7

我已经阅读了一段时间的 FFT 和音高检测,但我无法将它们拼凑在一起。

我已经发现 Accelerate 框架可能是最好的方法,我已经阅读了来自苹果的示例代码,了解如何将它用于 FFT。如果我想实时运行音高检测,FFT 的输入数据是什么?我只是从麦克风传入音频流吗?我该怎么做?

另外,在获得 FFT 输出后,如何从中获得频率?我一直在到处阅读,但找不到任何例子或解释?

谢谢你的帮助。

4

2 回答 2

7

频率和音高不是一回事——频率是一个物理量,音高是一种心理感知——它们是相似的,但有重要的区别,这对你来说可能很重要,也可能无关紧要,这取决于你所使用的乐器类型试图测量音高。

您需要阅读一些关于各种音高检测算法(以及音高本身的含义)的信息,确定您要使用的算法,然后才开始实施它。有关音高和音高检测的详细概述,请参阅此 Wikipedia 页面(请注意,您可以将 FFT 用于基于自相关和频域的方法)。

至于使用 FFT 来识别频谱中的峰值及其相关频率,在 SO 上已经有很多与此相关的问题和答案,例如:如何获取 FFT 中每个值的频率?

于 2012-04-30T08:24:10.800 回答
3

我有一个适用于 ios 5.1 的自相关函数的示例实现。查看这篇文章以获取有关如何找到最近的音符以及如何创建表示音高的字符串(A、A#、B、B# 等)的实现和函数的链接

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

于 2012-06-14T23:20:52.420 回答