2

我正在尝试使用远程 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. 原始声音和生成声音之间的幅度差异

知道如何在 AudioUnit 中解决这些问题吗?

非常感谢!

4

1 回答 1

0

看来你用kAudioUnitSubType_RemoteIO. 你试过用kAudioUnitSubType_VoiceProcessingIO吗?可能会有所帮助。

该音频单元对传入的音频进行信号处理(从传入的音频中取出在给定时间从设备播放的任何音频)。

于 2014-02-16T10:36:36.753 回答