Ist там способ конвертировать данные из wave.readframe (chunk) в numpy Array для fft?Python: Wave.readframe to numpy areay for fft
(чтение из файла WAV в Numpy массив не вариант, потому что я прочитал WAV файл из трубы)
Ist там способ конвертировать данные из wave.readframe (chunk) в numpy Array для fft?Python: Wave.readframe to numpy areay for fft
(чтение из файла WAV в Numpy массив не вариант, потому что я прочитал WAV файл из трубы)
wavio
package, что я написал включает в себя функцию _wav2array(nchannels, sampwidth, data)
, которая делает то, что вы хотите. (Вы можете также find it on github.)
Чтобы использовать его, вам нужно:
getnchannels()
method,getsampwidth()
method,readframes(n)
method.Тогда вы можете написать
array = _wav2array(nchannels, sampwidth, data)
Вы должны вычислить БПФ на нескольких образцах (256, например), поэтому вам нужно прочитать несколько кадров одновременно.
Что-то, как это должно работать:
import wave, struct
from numpy.fft import rfft
nb_samples = 256
sampwidth = waveFile.getsampwidth()
datatypes = (None, "%iB", "%ih", None)
datatype = fmts[sampwidth]
waveData = waveFile.readframes(nb_samples)
frame = struct.unpack(datatype % nb_frames, waveData)
fft = abs(rfft(frame))**2
Я получаю эту ошибку Traceback (последний последний звонок): Файл "./wav.py", строка 55, в
@spam junk. Это зависит от вашего типа данных. Я обновил ответ, чтобы прочитать моно-wav-файл с различным форматом (8 и 16 бит). Если ваш файл является стереофоническим, вам необходимо также использовать количество каналов для чтения данных. – PatriceG
работает для меня, я думаю, спасибо :) но у меня есть проблемы с использованием моих результатов FFT для вещей, как beatdetection, любые намеки на то, что для использования, я получаю большой массив форме это : 'code' array = wavio._wav2array (1, 2, data) fft = abs (np.fft.rfft (array))' code' должен ли я превышать нижнюю часть для получения амплитуды низких частот? –
Ваш вопрос состоит из двух частей: (1) как преобразовать данные, возвращаемые 'readframes (n)' в массив numpy, и (2) как использовать FFT для анализа ваших данных. Мой ответ здесь для первой части. Вторая часть заслуживает собственного вопроса: либо здесь, либо в stackoverflow или в [dsp.stackexchange.com] (http://dsp.stackexchange.com/) –