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