Edit: вот обновленная версия scipy.io.wavfile
, что добавляет много вещей (.wav файлы 24 бит поддержки для чтение/запись, маркеры разметки, маркеры разметки этикеток, а также некоторые другие метаданные, как шаг (если они определены), и т.д.):
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
Не стесняйтесь, чтобы добавить его в wavfile.py
SciPy, если кто-то заинтересован.
Ницца! Спасибо за обмен – goncalopp
Мои маркеры имеют тип 'range' (id, start, end, duration?). С вашей функцией я могу читать только начальную позицию каждого диапазона. Как я могу изменить вашу функцию, чтобы заставить ее работать и на диапазон? – Eric
Это ссылка, которую я использовал: http://www.sonicspot.com/guide/wavefiles.html ... Где хранятся ваши маркеры типа 'range'? В 'Cue Chunk' (http://www.sonicspot.com/guide/wavefiles.html#cue) или' Playlist Chunk' (http://www.sonicspot.com/guide/wavefiles.html#plst)? – Basj