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.)
要使用它,您需要:
getnchannels()
method、 返回的音频通道数
getsampwidth()
method、 返回的样本宽度
- 和
readframes(n)
method返回的数据。
那你可以写
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
有没有办法将数据从 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.)
要使用它,您需要:
getnchannels()
method、 返回的音频通道数
getsampwidth()
method、 返回的样本宽度
- 和
readframes(n)
method返回的数据。
那你可以写
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