int*_*tgr 19
要识别音频信号的频率,您可以使用FFT(快速傅立叶变换)算法.据我所知,PyGame无法录制音频,也不支持FFT变换.
首先,您需要从声卡中捕获原始采样数据; 这种数据称为PCM(脉冲编码调制).在Python中捕获音频的最简单方法是使用PyAudio库(Python绑定到PortAudio).GStreamer也可以做到这一点,它可能是一个矫枉过正的目的.以48000 Hz的速率捕获16位采样非常典型,可能是普通声卡给你的最好的.
获得原始PCM音频数据后,您可以使用scipy库中的fftpack
模块通过FFT变换运行样本.这将为您提供分析的音频信号的频率分布,即某些频段的信号强度.然后,这是找到具有最强信号的频率的问题.
你可能需要一些额外的过滤来避免我不确定的谐波频率.
Ofr*_*viv 19
我曾经写过一个实用程序就是这样 - 它分析了正在播放的声音.
您可以在这里查看代码(或者您可以下载整个项目.它与Frets On Fire集成,一个吉他英雄开源克隆,以创建一个真正的吉他英雄).它是用吉他,口琴和口哨测试的:)代码很难看,但它有效:)
我使用pymedia来记录和scipy用于FFT.
除了其他人已经注意到的基础知识,我可以给你一些提示: