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个因素:
- 延迟从麦克风流产生的输出流
- 差异原始声音之间的振幅和声音产生
任何想法如何能我在AudioUnit中处理这些问题?
非常感谢!
是的我正在使用kAudioUnitSubType_RemoteIO。我没有使用kAudioUnitSubType_VoiceProcessingIO,因为我实际上不想清除传入音频中的噪音。相反,我想生成一个180度的异相声波。 但我会尝试用kAudioUnitSubType_VoiceProcessingIO。感谢您的回答。 – rushafi