2013-11-15 23 views
6

Tôi muốn sử dụng điểm đánh dấu trong các tệp .wav.đọc điểm đánh dấu của tệp .wav

Nó dường như được hỗ trợ bởi aifc mô-đun với getmarkers(): http://docs.python.org/2/library/aifc.html#aifc.aifc.getmarkers (cho các tập tin .aiff), nhưng không phải cho wave mô-đun (http://docs.python.org/2/library/wave.html?highlight=wave#wave.Wave_read.getmarkers).

Làm cách nào chúng tôi có thể đọc điểm đánh dấu tệp .wav?

Trả lời

3

Sửa: đây là một phiên bản cập nhật của scipy.io.wavfile có thêm nhiều điều (24 bit file .wav hỗ trợ cho đọc/ghi, đánh dấu gợi ý, gợi ý đánh dấu nhãn, và một số siêu dữ liệu khác như sân (nếu định nghĩa), vv):

wavfile.py (enhanced)

Hãy chia sẻ nó!


cuối cùng tôi đã tìm thấy một giải pháp (nó sử dụng một số chức năng của 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 

Hãy để thêm nó vào wavfile.py scipy nếu ai đó đang quan tâm.

+0

Tốt! Cảm ơn bạn đã chia sẻ – goncalopp

+0

Điểm đánh dấu của tôi thuộc loại 'dải ô' (id, bắt đầu, kết thúc, thời lượng?). Với chức năng của bạn, tôi chỉ có thể đọc vị trí bắt đầu của mỗi phạm vi. Làm thế nào tôi có thể sửa đổi chức năng của bạn để làm cho nó hoạt động cho phạm vi quá? – Eric

+0

Đây là tài liệu tham khảo mà tôi đã sử dụng: http://www.sonicspot.com/guide/wavefiles.html ... Nơi lưu trữ các điểm đánh dấu của bạn thuộc loại 'dải ô'? Trong 'Cue Chunk' (http://www.sonicspot.com/guide/wavefiles.html#cue) hoặc' Playlist Chunk' (http://www.sonicspot.com/guide/wavefiles.html#plst)? – Basj

-1

nó là trong module wave.Wave_read, gọi Wave_read.getmarkers() thấy các tài liệu để xem chi tiết: http://docs.python.org/2/library/wave.html?highlight=wave#wave.Wave_read.getmarkers

+0

'Wave_read.getmarkers()': Trả về Không. – Basj

+1

Tôi thành thật không thể hiểu tại sao điều này không nâng cao 'NotImplemented' thay vì – goncalopp

+0

FWIW, nếu bạn muốn tự mình thực hiện, có rất nhiều thông tin tốt [ở đây] (http://home.roadrunner.com/~jgglatt /tech/wave.htm) (xem phần trên điểm dừng) – goncalopp

Các vấn đề liên quan