2013-11-15 41 views

回答

3

编辑:这里是增加了许多东西(24位.wav文件的支持scipy.io.wavfile的更新版本读/写,提示标记,提示标记的标签,以及其他一些类似的元数据间距(如果定义)等):

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如果有人问津。

+0

不错!感谢分享 – goncalopp

+0

我的标记类型为'范围'(id,开始,结束,持续时间?)。使用你的功能,我只能读取每个范围的起始位置。我怎样才能修改你的功能,以使它适用于范围呢? – Eric

+0

这是我使用的参考资料:http://www.sonicspot.com/guide/wavefiles.html ...哪里存储了'range'类型的标记?在“提示区块”(http://www.sonicspot.com/guide/wavefiles.html#cue)或“播放列表区块”(http://www.sonicspot.com/guide/wavefiles.html#plst)中? – Basj

-1

它是在wave.Wave_read模块,称为Wave_read.getmarkers() 看到的文档查看详细: http://docs.python.org/2/library/wave.html?highlight=wave#wave.Wave_read.getmarkers

+0

'Wave_read.getmarkers()':返回无。 – Basj

+1

我真的不明白为什么这不会提高'NotImplemented'而不是 – goncalopp

+0

FWIW,如果你想自己实现这个,有很多很好的信息[here](http://home.roadrunner.com/~jgglatt /tech/wave.htm)(请参阅关于提示点的部分) – goncalopp