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

Python 如何从输入音频流中提取频率信息(使用PortAudio)?,python,voice,frequency,portaudio,Python,Voice,Frequency,Portaudio,我想用PortAudio(PyAudio)录制声音(语音),并在屏幕上输出相应的声波。虽然我毫无希望,但我无法从音频流中提取频率信息,以便以Hz/时间的形式绘制 下面是一个示例代码段,它可以录制和播放录制的音频5秒钟,以防对您有所帮助: p = pyaudio.PyAudio() chunk = 1024 seconds = 5 stream = p.open(format=pyaudio.paInt16, channels=1,

我想用PortAudio(PyAudio)录制声音(语音),并在屏幕上输出相应的声波。虽然我毫无希望,但我无法从音频流中提取频率信息,以便以Hz/时间的形式绘制


下面是一个示例代码段,它可以录制和播放录制的音频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绑定的库。)



我将非常感谢任何帮助!即使是模糊相关的音频分析智慧也值得欣赏。:)

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


下面是一个它的用法示例:

如果您希望在频域和时域中进行分析,傅里叶变换将不会对您有多大帮助。你可能想看看“小波变换”。有一个叫做pywavelets的包。。。

那么你想做一个频谱分析仪吗?对每个数据块进行傅里叶变换就相当于一个STFT,这与小波变换是一样的。