【问题标题】:read markers of .wav file读取 .wav 文件的标记
【发布时间】:2013-11-29 10:42:07
【问题描述】:

我想在 .wav 文件中使用 标记

aifc 模块似乎支持 getmarkers()http://docs.python.org/2/library/aifc.html#aifc.aifc.getmarkers(对于 .aiff 文件),但不支持 wave 模块(http://docs.python.org/2/library/wave.html?highlight=wave#wave.Wave_read.getmarkers)。

我们如何读取标记 .wav 文件?

【问题讨论】:

    标签: python audio wav markers


    【解决方案1】:

    编辑:这是scipy.io.wavfile 的更新版本,它添加了许多内容(24 位 .wav 文件支持读/写、提示标记、提示标记标签和其他一些元数据,例如音调(如果定义)等):

    wavfile.py (enhanced)

    欢迎分享!


    我终于找到了一个解决方案(它使用了 scipy.io.wavfile 的一些功能):

    def readmarkers(file, mmap=False):
        if hasattr(file,'read'):
            fid = file
        else:
            fid = open(file, 'rb')
        fsize = _read_riff_chunk(fid)
        cue = []
        while (fid.tell() < fsize):
            chunk_id = fid.read(4)
            if chunk_id == b'cue ':
                size, numcue = struct.unpack('<ii',fid.read(8))
                for c in range(numcue):
                  id, position, datachunkid, chunkstart, blockstart, sampleoffset = struct.unpack('<iiiiii',fid.read(24))
                  cue.append(position)
            else:
                _skip_unknown_chunk(fid)
        fid.close()
        return cue
    

    如果有人感兴趣,请随时将其添加到 Scipy 的 wavfile.py

    【讨论】:

    • 不错!感谢分享
    • 我的标记属于“范围”类型(id、开始、结束、持续时间?)。使用您的功能,我只能读取每个范围的起始位置。如何修改您的函数以使其也适用于范围?
    • 这是我使用的参考:sonicspot.com/guide/wavefiles.html ... range 类型的标记存储在哪里?在Cue Chunk (sonicspot.com/guide/wavefiles.html#cue) 或Playlist Chunk (sonicspot.com/guide/wavefiles.html#plst) 中?
    • 如果它可能对某人有所帮助,您的代码对我来说工作得很好,但它在 _skip_unknown_chunk 中引发了一个异常,因为它发现了一些它无法读取的东西。由于这是在正确读取标记后发生的,因此我只是在 for 循环之后添加了一个中断 :)(我在 adobe 试听中添加了标记)
    • 这个提交给 scipy 了吗?
    【解决方案2】:

    它在 wave.Wave_read 模块中,称为Wave_read.getmarkers() 有关详细信息,请参阅文档: http://docs.python.org/2/library/wave.html?highlight=wave#wave.Wave_read.getmarkers

    【讨论】:

    • 我真的不明白为什么这不引发NotImplemented
    • FWIW,如果你想自己实现这个,这里有很多很好的信息here(参见提示点部分)
    • 不幸的是,我还没有足够的技能来打开文件、转到文件中的某个特定位置、提取一个块等等……关于NotImplemented,我们如何将其设置为这种状态NotImplemented
    • 你觉得你能帮我@goncalopp吗?
    • @Basj 我没有太多时间 ATM,也无法访问带有已知标记的波形文件。如果你能给我发一份,我可能会在一两天内拿出一些东西。否则,这是了解openfilesstruct 的好机会
    猜你喜欢
    • 2011-07-09
    • 2010-09-21
    • 2014-05-30
    • 2011-01-04
    • 2016-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多