我正在尝试使用远程 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;
}
但输出音调似乎不会产生破坏性干扰。我感觉到当我运行应用程序时,幅度会发生周期性变化,但不会取消输入声音。
我认为可能还有两个因素:
- 从麦克风流生成输出流的延迟
- 原始声音和生成声音之间的幅度差异
知道如何在 AudioUnit 中解决这些问题吗?
非常感谢!