2012-05-26 55 views
3

我的主要目標:找到通過AVAudioRecorder拖入噪音的頻率。我跟了這:AVAudioRecorder通過加速FFT到頻率 - 執行

http://www.ehow.com/how_12224909_detect-blow-mic-xcode.html

我已經在SO詢問如何檢測頻率讀了諸多問題。大部分答案都是「使用FFT!」然後問問人員說:「哦,太好了!」。

我的問題是,你如何從這裏得到:

- (void)levelTimerCallback { 
    [recorder updateMeters]; 

    const double ALPHA = 0.05; 
    double peakPowerForChannel = pow(10, (0.05 * [recorder peakPowerForChannel:0])); 
    lowPassResults = ALPHA * peakPowerForChannel + (1.0 - ALPHA) * lowPassResults; 

    if (lowPassResults > sensitivitySlider.value) { 
     NSLog(@"Sound detected"); 

     //What goes here so I can spit out a frequency? 
    } 

} 

神奇地使用FFT ...(我會用accelerate.h),

和風了「頻率= 450.3" ?

如果有人能告訴我實際的代碼,我會用

  1. 從AVAudioRecorder插入聲音進入加速 和
  2. 如何結果轉換爲頻率...

這將不勝感激。

在此先感謝。

+0

許多重複,例如[用於使用Accelerate Framework的iOS的FFT音高檢測?](http://stackoverflow.com/questions/10378953/fft-pitch-detection-for-ios-using-accelerate-framework) –

回答

5

由於AVRecorder API沒有插入Accelerate框架,所以沒有「去那裏」。相反,您必須使用完全不同的API(音頻隊列或RemoteIO音頻單元API)來捕獲音頻輸入,這是一種完全不同的代碼安排,例如等待回調以獲取數據,緩衝區大小管理以獲取數據適當的大小來饋送FFT,然後知道足夠的DSP來後處理您正在尋找的特定種類的頻率測量的FFT結果。

+1

這比我第一次複雜得多思想。謝謝。 –