如何从输入音频流中提取频率信息(使用PortAudio)?
我想用PortAudio(PyAudio)来录制声音(比如说话),然后把对应的声音波形显示在屏幕上。不过我实在是太无助了,无法从音频流中提取频率信息,这样我就不能把它画成赫兹/时间的形式。
这里有一段示例代码,可以录制和播放录制的音频,持续五秒钟,希望对你有帮助:
p = pyaudio.PyAudio()
chunk = 1024
seconds = 5
stream = p.open(format=pyaudio.paInt16,
channels=1,
rate=44100,
input=True,
output=True)
for i in range(0, 44100 / chunk * seconds):
data = stream.read(chunk)
stream.write(data, chunk)
我希望从上面的变量“data”中提取所需的信息。(或者用PortAudio或其他有Python绑定的库来使用一些更高级的方法。)
如果有人能帮我,我会非常感激!即使是一些与音频分析相关的零碎知识也很受欢迎。:)
2 个回答
1
傅里叶变换如果你想同时分析频率和时间的话,可能帮不上太多忙。你可以考虑看看“小波变换”。有一个叫做pywavelets的工具包……http://www.pybytes.com/pywavelets/#discrete-wavelet-transform-dwt
4
你想要的可能是音频数据的傅里叶变换。现在有很多工具包可以帮你计算这个,比如 scipy
和 numpy
就是其中两个。这个过程通常被称为“快速傅里叶变换”(FFT),但这只是算法的名字。
这里有一个使用的例子:https://svn.enthought.com/enthought/browser/Chaco/trunk/examples/advanced/spectrum.py