Python:Wave.readframe到用于fft的numpy区域
有没有一种方法可以将数据从wave.readframe(chunk)转换为用于fft的numpy数组 (从wav文件读取numpy数组不是一个选项,因为我是从管道读取wav文件的)我编写的包含函数Python:Wave.readframe到用于fft的numpy区域,python,numpy,audio,fft,wave,Python,Numpy,Audio,Fft,Wave,有没有一种方法可以将数据从wave.readframe(chunk)转换为用于fft的numpy数组 (从wav文件读取numpy数组不是一个选项,因为我是从管道读取wav文件的)我编写的包含函数\u wav2array(nchannels,sampwidth,data),它满足您的需要。(您也可以。) 要使用它,您需要: 由返回的音频通道数 返回的样本宽度 和返回的数据 然后你就可以写了 array = _wav2array(nchannels, sampwidth, data) 我编写
\u wav2array(nchannels,sampwidth,data)
,它满足您的需要。(您也可以。)
要使用它,您需要:
- 由返回的音频通道数
- 返回的样本宽度
- 和返回的数据
array = _wav2array(nchannels, sampwidth, data)
我编写的函数包括函数\u wav2array(nchannels,sampwidth,data)
,它可以满足您的需要。(您也可以。)
要使用它,您需要:
- 由返回的音频通道数
- 返回的样本宽度
- 和返回的数据
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
必须对多个样本(例如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
我得到了这个错误回溯(上次调用):文件“/wav.py”,第55行,在frame=struct.unpack(“%dh”%nb\u samples,waveData)struct中。错误:unpack需要一个长度为的字符串参数512@spam废旧物品这取决于您的数据类型。我更新了答案以读取不同格式(8位和16位)的mono wav文件。如果您的文件是立体声文件,则还必须使用通道数来读取数据。我得到此错误回溯(上次调用):file“/wav.py”,第55行,在frame=struct.unpack(“%dh”%nb\u samples,waveData)struct中。错误:unpack需要长度为的字符串参数512@spam废旧物品这取决于您的数据类型。我更新了答案以读取不同格式(8位和16位)的mono wav文件。如果你的文件是立体声的,你还必须使用通道数来读取数据。对我来说是有效的,我想谢谢:)但是我很难将我的fft结果用于beatdetection之类的东西,任何使用的提示,我得到一个大数组形式:
code
array=wavio.\u wav2array(1,2,data)fft=abs(np.fft.rfft(array))code
我应该对下部进行平均以获得低频振幅吗?你的问题有两个部分:(1)如何将readframes(n)
返回的数据转换为numpy数组,以及(2)如何使用FFT分析数据。我的答案是第一部分。第二部分值得提出自己的问题,不管是在stackoverflow上还是在works上,我想谢谢:)但是我很难将我的fft结果用于beatdetection之类的东西,任何关于使用什么的提示,我都会从下面得到一个大数组:code
array=wavio.\u wav2array(1,2,data)fft=abs(np.fft.rfft(array))code
我应该对下部进行平均以获得低频振幅吗?你的问题有两个部分:(1)如何将readframes(n)
返回的数据转换为numpy数组,以及(2)如何使用FFT分析数据。我的答案是第一部分。第二部分值得提出自己的问题,要么在stackoverflow上,要么在