如何在 Android 中识别音调? [关闭]

Posted

技术标签:

【中文标题】如何在 Android 中识别音调? [关闭]【英文标题】:How to recognize a musical tone in Android? [closed] 【发布时间】:2014-12-17 14:38:35 【问题描述】:

我正在开发一个 android 应用程序,我需要的是识别音调,例如,如果你拿着我的吉他弹奏了 C 我希望我的应用程序能够分辨我弹奏的音符。

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

我唯一不知道的是:这有可能吗?

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

【问题讨论】:

查看此代码:code.google.com/p/android-guitar-tuner/source/browse/trunk/src/… 【参考方案1】:

可能吗?当然。商店中已经有执行此操作的应用程序: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我不确定。

【讨论】:

虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效。 好点。我已经用我链接的答案中的文字编辑了我的答案。 哇,这是一个非常好的答案。先生,您值得一票!

以上是关于如何在 Android 中识别音调? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何组合两个没有裂缝的正弦波[关闭]

如何在android中知道用户是否关闭了位置[重复]

您如何创建一个音调发生器,其音调可以在 Java 中“实时”或动态操作?

在 Swift 中创建一个函数来播放特定频率的音调 [关闭]

DSP5509项目之用FFT识别钢琴音调

在 Android 中运行音调分析器时出现未知模式字符 X