2013-11-15 64 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