Как читать волновой файл блок за блоком в Python (совместим с массивом numpy)?

Вместо загрузки всего волнового файла, я хочу прочитать блок волнового файла за блоками в python (совместим с массивом numpy). Таким образом, только часть волнового файла должна быть загружена в массив numpy одновременно. Мне известно о scipy.io.wavfile.read(somefile) и scikits.audiolab.wavread(имя файла). Но они не поддерживают блочно. Весь волновой файл загружен. Проблема в том, что когда размер волнового файла очень большой, используется много памяти.

1 ответ

Решение

Как насчет попытки PySoundFile? По данным сайта:

Звуковые файлы также могут быть прочитаны короткими, опционально перекрывающимися блоками. Например, это вычисляет уровень сигнала для каждого блока длинного файла:

import numpy as np
import soundfile as sf

rms = [np.sqrt(np.mean(block**2)) for block in
sf.blocks('myfile.wav', blocksize=1024, overlap=512)]

Надеюсь, это поможет.

Другие вопросы по тегам