我有一把吉他,我需要我的电脑能够分辨出正在演奏的音符,并识别出音调。可以在python中做到吗,也可以在pygame中做到吗?能够在pygame中做到这一点将非常有帮助。
要识别音频信号的频率,可以使用FFT(快速傅立叶变换)算法。据我所知,PyGame无法记录音频,也不支持FFT转换。
首先,您需要从声卡捕获原始采样数据。这种数据称为PCM(脉冲编码调制)。在Python中捕获音频的最简单方法是使用PyAudio库(Python与PortAudio的绑定)。GStreamer也可以做到这一点,对您而言,这可能是一个过大的杀伤力。以48000 Hz的频率捕获16位样本是非常典型的,并且可能是普通声卡所能提供的最佳选择。
获得原始PCM音频数据后,就可以使用scipy库中的fftpack模块通过FFT转换运行样本。这将为您提供所分析音频信号的 频率分布 ,即信号在某些频带中的强度。然后,要找到具有最强信号的频率。 __
fftpack
您 可能 需要一些其他滤波来避免不确定的谐波频率。