如何在Android中识别音乐音调?

时间:2014-12-17 14:38:36

标签: android audio

我正在开发一个Android应用程序,我需要的是识别音乐音调,例如,如果你拿了我的吉他并且你玩了 C 我想我的应用程序能够告诉我我演奏的音符。

基本操作很简单,通过某种识别录制的麦克风声音会产生我需要的输出。

我不知道的唯一一件事是:有可能这样做吗?

如果是,是否有可能在一段时间内识别出多个音符?

1 个答案:

答案 0 :(得分:2)

可能?当然。商店中已有应用程序执行此操作:Take this for example。至于如何做到这一点,this question可能会引导您朝着正确的方向前进,并且这里是该问题的文字:

要识别音频信号的频率,您可以使用FFT(Fast Fourier transform)算法。据我所知,PyGame无法录制音频,也不支持FFT转换。

首先,您需要从声卡中捕获原始采样数据;这种数据称为PCM(脉冲编码调制)。在Python中捕获音频的最简单方法是使用PyAudio library(Python绑定到PortAudio)。 GStreamer也可以这样做,但对于您的目的而言,这可能是一种过度杀伤力。以48000 Hz的速率捕获16位采样是非常典型的,可能是普通声卡给你的最好的。

获得原始PCM音频数据后,您可以使用scipy library中的fftpack模块通过FFT变换运行样本。这将为您提供所分析的音频信号的频率分布,即某些频带中的信号有多强。然后,问题是找到信号最强的频率。

可能需要一些额外的过滤以避免harmonic frequencies我不确定。