我想使用PortAudio(PyAudio)录制声音(语音)并在屏幕上输出相应的声波。像我一样无望,我无法从音频流中提取频率信息,因此我可以用Hz /时间形式绘制它。


这是一个示例代码段,记录并播放录制的音频五秒钟,以防它有助于:

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绑定的库的其他高级方法。)


我非常感谢任何帮助!甚至模糊相关的音频分析智慧的花絮也值得赞赏。 :)

有帮助吗?

解决方案

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

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

其他提示

如果您希望在频域和时域进行分析,傅里叶变换对您没有多大帮助。您可能想要查看“小波变换”。有一个名为pywavelets的包... http://www.pybytes.com/pywavelets/#discrete-wavelet-变换DWT

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top