我需要在特定数量的缓冲区中读取* .wav文件中的数据。到目前为止,我能够使用波形库读取10秒的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))
我可以使用函数open作为写入模式和wave来编写文件。使用以前的源代码,我可以读取wave文件并写入wave文件的副本。但是,现在我想在2048的缓冲区中读取和写入wav文件。您是否知道更好的方法来读取和编写大小更长且需要按部件处理的wav文件?
感谢您的指导
答案 0 :(得分:2)
Wave.readframes(n)
方法采用参数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)