Python :Wave.readframe 到 fft 的 numpy 数组

Python :Wave.readframe to numpy areay for fft

有没有办法将数据从 wave.readframe(chunk) 转换为用于 fft 的 numpy 数组?

(从 wav 文件读取到 numpy 数组不是一个选项,因为我从管道读取 wav 文件)

wavio package that I wrote includes the function _wav2array(nchannels, sampwidth, data) that does what you want. (You can also find it on github.)

要使用它,您需要:

那你可以写

array = _wav2array(nchannels, sampwidth, data)

您必须计算多个样本(例如 256 个)的 fft,因此您需要同时读取多个帧。

像这样的东西应该可以工作:

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