2014-02-09 225 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