2014-02-09 107 views
2

我正嘗試在iOS中使用遠程I/O進行主動噪音消除。我已經能夠以8.24定點格式獲得音頻緩衝區並將其放入揚聲器中。現在我試圖通過麥克風捕捉一個正弦波(使用onlinetonegenerator.com),並扭轉我通過回調獲得的每個幀的幅度。這裏是我的代碼:iOS中的主動噪音消除

static OSStatus PerformThru(
         void      *inRefCon, 
         AudioUnitRenderActionFlags *ioActionFlags, 
         const AudioTimeStamp  *inTimeStamp, 
         UInt32      inBusNumber, 
         UInt32      inNumberFrames, 
         AudioBufferList    *ioData) { 

AppDelegate *THIS = (AppDelegate *)inRefCon; 
OSStatus err = AudioUnitRender(THIS->rioUnit, ioActionFlags, inTimeStamp, 1, inNumberFrames, ioData); 

for(int i = 0; i < ioData->mNumberBuffers; ++i) { 
    Float32 *flptr = (Float32 *)ioData->mBuffers[i].mData;  
    for(int j = 0; j < inNumberFrames; ++j) { 
     *flptr *= -1.; // inverting the buffer value 
     flptr++; 
    } 
} 

return err; 
} 

但輸出音調似乎不會產生破壞性干擾。我感覺到,當我運行應用程序時,會出現振幅的週期性變化,但不會取消輸入聲音。

我覺得可能是2個因素:

  1. 延遲從麥克風流產生的輸出流
  2. 差異原始聲音之間的振幅和聲音產生

任何想法如何能我在AudioUnit中處理這些問題?

非常感謝!

回答

0

看來你使用kAudioUnitSubType_RemoteIO。 您是否嘗試過使用kAudioUnitSubType_VoiceProcessingIO? 可能會有所幫助。

該音頻單元上 確實信號處理輸入音頻(取出任何從裝置 播放在給定時間從傳入的音頻的音頻的)。

+0

是的我正在使用kAudioUnitSubType_RemoteIO。我沒有使用kAudioUnitSubType_VoiceProcessingIO,因爲我實際上不想清除傳入音頻中的噪音。相反,我想生成一個180度的異相聲波。 但我會嘗試用kAudioUnitSubType_VoiceProcessingIO。感謝您的回答。 – rushafi