Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:Wave.readframe到用于fft的numpy区域_Python_Numpy_Audio_Fft_Wave - Fatal编程技术网

Python:Wave.readframe到用于fft的numpy区域

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) 我编写

有没有一种方法可以将数据从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)

必须对多个样本(例如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上,要么在