2011-10-01 50 views

回答

4

音符只不過是特定的聲音頻率。您需要一種方法來分析輸入信號中的所有頻率,然後找到一種方法來隔離單個音符。

在音頻信號中查找頻率是使用Fast Fourier Transform (FFT)完成的。有許多在線的源代碼可用來從音頻信號中計算FFT。特別是,oScope爲iPhone提供了一個開源解決方案。

編輯:Pitch detection似乎是你正在嘗試做的技術名稱。這裏SO的similar question的答案可能有用。

+3

音高與頻率不一樣。一張紙條可能有一個缺失的根本。 – hotpaw2

+0

@ hotpaw2:有趣。顯示我對音樂的瞭解程度';)'。如果其他人不清楚差異,下面的文章很好地闡述了它:http://emusician.com/tutorials/emusic_pitch_vs_frequency/ –

+0

謝謝你的洞察力! –

1

就像@ e.James說的,你正在尋找一個音符的音高,它叫做音高檢測。 CCRMA,斯坦福大學有很多資源可供您尋找。只需google用於Pitch Detection,您將看到一系列精彩的算法。就想要找到音頻採樣塊的FFT而言,您可以使用Accelerate Framework的內置FFT功能(請參閱thisthis)或使用MoMu toolkit。使用MoMu可以將音頻流分解爲各種樣本,並使用自己的功能輕鬆應用FFT。

2

音樂音高估計沒有內置於iOS API的內容。你將不得不編寫你自己的DSP功能。 Accelerate框架中的FFT將爲您提供PCM採樣波形的頻譜頻率信息,但頻率與心理感知音調不同。

有很多好的和壞的方法來估計頻率和音高。我在DSP resources web page上有很多不同的估算方法。

您可以查看Apple的aurioTouch示例應用程序,獲取iOS設備音頻輸入並顯示其頻譜的示例。

+0

嘿,你有一個weblink的audioTouch應用程序嗎? – Ravi

+0

在開發資源下查看:developer.apple.com上的示例代碼 – hotpaw2

+0

它實際上名爲[aurioTouch](https://developer.apple.com/library/ios/samplecode/aurioTouch/Introduction/Intro.html) – Chris