【发布时间】:2011-11-29 04:55:54
【问题描述】:
我正在 iphone 上制作应用程序,我需要一种方法来检测通过麦克风传入的声音的曲调。 (即 A#、G、C♭ 等) 我以为我会使用 AVAudio,但我真的不知道,我在文档中找不到任何东西..
有什么帮助吗?
【问题讨论】:
标签: iphone objective-c audio avaudiorecorder
我正在 iphone 上制作应用程序,我需要一种方法来检测通过麦克风传入的声音的曲调。 (即 A#、G、C♭ 等) 我以为我会使用 AVAudio,但我真的不知道,我在文档中找不到任何东西..
有什么帮助吗?
【问题讨论】:
标签: iphone objective-c audio avaudiorecorder
音符只不过是特定频率的声音。您将需要一种方法来分析输入信号中的所有频率,然后找到一种方法来隔离各个音符。
使用Fast Fourier Transform (FFT) 查找音频信号中的频率。网上有大量源代码可用于根据音频信号计算 FFT。特别是,oScope 为 iPhone 提供了一个开源解决方案。
编辑: Pitch detection 似乎是您正在尝试做的事情的技术名称。在 SO 上similar question 的答案可能有用。
【讨论】:
;)。如果其他人不清楚差异,下面的文章很好地说明了它:emusician.com/tutorials/emusic_pitch_vs_frequency
就像@e.James 所说,您正在寻找一个音符的音高,它称为音高检测。斯坦福大学 CCRMA 有大量资源可满足您的需求。只需google 用于音高检测,您就会看到一系列精彩的算法。至于想要找到音频样本块的 FFT,您可以使用 Accelerate Framework 的内置 FFT 功能(请参阅this 和this)或使用MoMu toolkit。使用 MoMu 的好处是它的功能可以为您将音频流分解为样本,并使用它自己的功能轻松应用 FFT。
【讨论】:
iOS API 没有内置任何用于音高估计的功能。您必须编写自己的 DSP 函数。 Accelerate 框架中的 FFT 将为您提供来自 PCM 采样波形的频谱频率信息,但频率与心理感知音高不同。
估计频率和音高有很多好方法和坏方法。我的DSP resources web page 上有很长的部分估算方法列表。
您可以查看 Apple 的 aurioTouch 示例应用,了解获取 iOS 设备音频输入并显示其频谱的示例。
【讨论】: