2

我想使用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)

我希望从上述变量“数据”中提取所需的信息。(或者使用 PortAudio 或其他带有 Python 绑定的库的其他高级方法。)


我将非常感谢任何帮助!即使是模糊相关的音频分析智慧的花絮也受到赞赏。:)

4

2 回答 2

4

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

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

于 2008-11-03T18:31:46.533 回答
1

如果您希望在频域和时域中进行分析,傅立叶变换对您的帮助不大。您可能想看看“小波变换”。有一个包叫 pywavelets... http://www.pybytes.com/pywavelets/#discrete-wavelet-transform-dwt

于 2009-02-20T11:52:06.677 回答