我有一个 MP3 文件,需要不断检测并显示这个正在播放的 MP3 文件的 Hz 值。一些谷歌搜索表明我有 2 个机会:使用 FFT 或使用 Apple Accelerate 框架。不幸的是,我还没有找到任何易于使用的样本。所有样本,如 AurioTouch 等,都需要大量代码来获取样本缓冲区的简单数字。是否有任何简单的 iOS 音高检测示例?
例如,我找到了https://github.com/clindsey/pkmFFT,但它缺少一些作者已删除的文件。有这样的工作吗?
我有一个 MP3 文件,需要不断检测并显示这个正在播放的 MP3 文件的 Hz 值。一些谷歌搜索表明我有 2 个机会:使用 FFT 或使用 Apple Accelerate 框架。不幸的是,我还没有找到任何易于使用的样本。所有样本,如 AurioTouch 等,都需要大量代码来获取样本缓冲区的简单数字。是否有任何简单的 iOS 音高检测示例?
例如,我找到了https://github.com/clindsey/pkmFFT,但它缺少一些作者已删除的文件。有这样的工作吗?
恐怕不是。处理声音通常很困难,Core Audio 也不例外。现在谈谈手头的事情。
FFT 是一种将输入从时域转换到频域的算法。不一定与声音处理有关,您也可以将其用于声音以外的其他事情。
Accelerate 是 Apple 提供的框架,除其他外,它还提供 FFT 实现。因此,您实际上没有两种选择,只有一种及其实现。
现在,取决于您想要做什么(例如,如果您更喜欢速度而不是准确性、稳健性而不是简单等)以及您拥有的波形类型(简单、复杂、人类语音、音乐),FFT 本身可能还不够,或者甚至不是您任务的正确选择。还有其他选项,自相关、过零、倒谱分析、最大似然等等。但没有一个是微不足道的,除了过零,它也会给你最差的结果,并且无法处理复杂的波形。
这是一个很好的起点:
http://blog.bjornroche.com/2012/07/frequency-detection-using-fft-aka-pitch.html
关于SO还有其他问题。
但是,正如其他答案所示,这不是可以“神奇”地完成的事情。即使您从某人那里获得了代码许可(例如,iZotope 和 z-plane 都为您想要做的事情提供了出色的代码),您仍然需要了解如何将数据输入和输出他们的库。
如果您需要快速音高检测,请使用http://www.schmittmachine.com/dywapitchtrack.html
你会在里面找到一个 IOS 示例代码。
如果你需要 FFT,你应该使用 Apple Accelerate 框架。
希望这有帮助