objective-c - 使用 Accelerate Framework 的 iOS 的 FFT 音调检测?

标签 objective-c ios signal-processing fft accelerate-framework

我已经研究了 FFT 和 Pitch Detection 有一段时间了,但我无法将它们拼凑在一起。

我发现 Accelerate 框架可能是处理此问题的最佳方式,并且我已阅读 apple 的示例代码以了解如何将其用于 FFT。如果我想实时运行音调检测,FFT 的输入数据是什么?我只是从麦克风传入音频流吗?我该怎么做?

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

感谢您的帮助。

最佳答案

频率和音高不是一回事 - 频率是一个物理量,音高是一种心理感知 - 它们很相似,但有重要的区别,这对你来说可能重要也可能不重要,具体取决于乐器的类型您正在尝试测量音高。

您需要稍微阅读一下各种音高检测算法(以及音高本身的含义),决定要使用的算法,然后然后着手实现它。参见 this Wikipedia page了解 pitch和音调检测(请注意,您可以将 FFT 用于基于自相关和频域的方法)。

至于使用 FFT 识别频谱中的峰值及其相关频率,SO 上已经有许多与此相关的问题和答案,例如:How do I obtain the frequencies of each value in an FFT?

关于objective-c - 使用 Accelerate Framework 的 iOS 的 FFT 音调检测?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10378953/

相关文章:

ios - 在 iOS 中合并 2 个 pdf 文件

ios - 对 uiviewcontroller 内存管理和在它们之间传递数据感到困惑

iphone - Objective-C 包级属性

python - 如何从 RGB 图像中提取单个 channel

iphone - NSString 值在 -(id)init 之后更改

ios - 使用模式时将数据传递给 UIViewController

php - 连接到数据库只发送一个字 iOS

ios - 2个NSData对象如何输出相同的HEX但在转换为char数组时却不同?

matlab - 如何在 MATLAB 中根据信号峰值查找 X 轴值

audio - 8 位音频采样到 16 位