2016-01-23 1 views
0

Мне нужно прочитать данные из * .wav-файла в буферах определенной суммы. До сих пор я не могу прочитать файл 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)) 

После того как я могу записать файл с помощью функции открытой в письменном режиме с волной. С предыдущим исходным кодом я могу прочитать волновой файл и написать копию волнового файла. Тем не менее, теперь я хочу читать и писать файлы wav в буферах 2048. Знаете ли вы, что лучший способ читать и писать wav-файлы, которые больше по размеру и требуется для обработки по частям?

Благодарит Вас за ориентацию

ответ

1

Метод 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)