iOS中的主动降噪功能

时间:2014-02-09 13:03:32

标签: ios audio audiounit remoteio

我正在尝试使用远程I / O在iOS中进行主动降噪。我已经能够以8.24定点格式获得音频缓冲区并将其放入扬声器中。现在我正试图通过麦克风捕获正弦波(使用onlinetonegenerator.com)并反转我通过回调得到的每帧中的幅度。这是我的代码:

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;
}

但输出音似乎不会产生破坏性干扰。我感觉到,当我运行应用程序时,周期性的幅度变化,但它不会取消输入声音。

我认为可能还有两个因素:

  1. 从麦克风流生成输出流的延迟
  2. 原始声音与产生的声音之间的幅度差异
  3. 任何想法如何在AudioUnit中处理这些问题?

    非常感谢!

1 个答案:

答案 0 :(得分:0)

您似乎使用kAudioUnitSubType_RemoteIO。 您是否尝试使用kAudioUnitSubType_VoiceProcessingIO? 可能会有所帮助。

  

此音频单元执行信号处理                       传入的音频(取出从设备播放的任何音频)                       在来自传入音频的给定时间)。