read markers of .wav file

2020-07-09 09:11发布

问题:

I would like to use markers in .wav files.

It seems to be supported by aifc module with getmarkers() : http://docs.python.org/2/library/aifc.html#aifc.aifc.getmarkers (for .aiff files), but not for wave module (http://docs.python.org/2/library/wave.html?highlight=wave#wave.Wave_read.getmarkers).

How could we read markers of .wav files ?

回答1:

Edit: here is an updated version of scipy.io.wavfile that adds many things (24 bit .wav files support for read/write, cue markers, cue markers labels, and some other metadata like pitch (if defined), etc.):

wavfile.py (enhanced)

Feel free to share it!


I finally found a solution (it uses some function of 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

Feel free to add it into Scipy's wavfile.py if someone is interested.



回答2:

it is in wave.Wave_read modules, called Wave_read.getmarkers() see the docs for detail: http://docs.python.org/2/library/wave.html?highlight=wave#wave.Wave_read.getmarkers