2016-01-23 192 views
0

我需要從特定數量的緩衝區中的* .wav文件中讀取數據。到現在爲止,我能看懂的使用Wave庫10秒的wav文件:讀取緩衝區中的* .wav文件

fp = wave.open('M1F1-int16-AFsp.wav') 
nchan = fp.getnchannels() 
N = fp.getnframes() 
fr= fp.getframerate() 
dstr = fp.readframes(N*nchan) 
data = numpy.fromstring(dstr, numpy.int16) 
data = numpy.reshape(data, (-1,nchan)) 

後,我可以使用與波書寫模式開啓該功能寫入文件。使用以前的源代碼,我可以讀取一個波形文件並寫入一個波形文件的副本。但是,現在我想讀取和寫入2048年的緩衝區中的wav文件。你知道一個更好的方式來讀取和寫入更長的大小和需要處理的部分的wav文件嗎?

謝謝您的方向

回答

1

Wave.readframes(n)方法採用PARAM controlling the size of the frames returned。我們可以通過將緩衝區大小(2048字節)除以樣本寬度+通道數量來計算幀大小。然後,我們可以遍歷該文件,抓取一堆這樣大小的幀並將它們寫入我們的輸出文件。

如下:

import wave 

BUFFER_SIZE = 2048 

fp = wave.open('M1F1-int16-AFsp.wav') 

output = wave.open('output.wav', 'wb') 
output.setparams(fp.getparams()) 

frames_to_read = BUFFER_SIZE/(fp.getsampwidth() + fp.getnchannels()) 

while True: 
    frames = fp.readframes(frames_to_read) 
    if not frames: 
     break 

    output.writeframes(frames)