使用加速框架的iOS FFT快速检测?

我已经读了一段时间的FFT和音高检测,但是我在拼接时遇到了麻烦。

我已经研究出加速框架可能是最好的方法,我已经阅读了苹果的示例代码,看看如何使用它的FFT。 如果我想要实时运行音高检测,那么FFT的input数据是多less? 我只是从麦克风传入audiostream? 我将如何做到这一点?

另外,在得到FFT输出后,我怎样才能从中得到频率? 我到处读书,找不到任何例子或解释呢?

谢谢你的帮助。

频率和音调是不一样的 – 频率是一种物理量,音调是一种心理感觉 – 它们是相似的,但是有重要的差异,这对您而言可能是或者可能不重要,这取决于您所使用的乐器types试图测量音调。

您需要阅读各种基音检测algorithm(以及基音本身的含义),决定要使用的algorithm, 然后才开始实施它。 请参阅维基百科页面 ,了解俯仰和俯仰检测的概况(请注意,您可以将FFT用于基于自相关和频域的方法)。

对于使用FFT来识别频谱中的峰值及其相关频率,已经有很多与此相关的问题和答案,例如,请参阅: 如何获得FFT中每个值的频率?

我有一个在线提供的自动相关函数的示例实现,用于ios 5.1。 看看这篇文章的链接到实现和函数如何find最近的音符,以及如何创build一个string表示的音调(A,A#,B,B#等…)

虽然FFT在许多应用中非常有用,但如果您尝试进行简单的音高检测,它可能并不是最准确的。 (它可以是一样准确的,但是你必须处理复杂的数字来进行大量的相位计算)