如何从输入音频流中提取频率信息(使用PortAudio)?

2024-05-16 05:01:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用PortAudio(PyAudio)录制声音(声音)并在屏幕上输出相应的声波。虽然我是无可救药的,我无法提取音频流的频率信息,以便我可以绘制它的赫兹/时间形式。


下面是一个示例代码片段,用于录制和播放录制的音频5秒钟,以防有任何帮助:

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绑定使用其他库。)


我非常感谢你的帮助!即使是模糊相关的音频分析智慧的花絮也值得赞赏。:)


Tags: 信息true声音datastream屏幕绘制音频
2条回答

你想要的可能是音频数据的傅里叶变换。有几个包可以为您计算。scipynumpy是其中两个。它通常被称为“快速傅立叶变换”(FFT),但这只是算法的名称。

下面是它的用法示例:https://svn.enthought.com/enthought/browser/Chaco/trunk/examples/advanced/spectrum.py

如果你想同时在频域和时域进行分析,傅里叶变换对你没有多大帮助。你可能想看看“小波变换”。有一个叫做pywavelts的包。。。 http://www.pybytes.com/pywavelets/#discrete-wavelet-transform-dwt

相关问题 更多 >