我正在使用 AudioUnit 访问 RemoteIO 以获得高性能音频。我的应用程序解码嵌入从麦克风接收的音频中的信号。为了准确起见,我需要将音频过滤和操作降至最低。我对音频会话这样做:
UInt32 mode = kAudioSessionMode_Measurement;
Float32 zeroF = 0;
UInt32 audioCategory = kAudioSessionCategory_PlayAndRecord;
AudioSessionSetProperty(kAudioSessionProperty_Mode, sizeof(mode), &mode);
AudioSessionSetProperty(kAudioSessionProperty_InputGainScalar, sizeof(zeroF), &zeroF);
AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(audioCategory), &audioCategory);
这对音频单元:
UInt32 one = 1;
UInt32 zero = 0;
AudioUnitSetProperty(rioUnit, kAUVoiceIOProperty_BypassVoiceProcessing, kAudioUnitScope_Input, 0, &one, sizeof(one));
AudioUnitSetProperty(rioUnit, kAUVoiceIOProperty_VoiceProcessingEnableAGC, kAudioUnitScope_Input, 0, &zero, sizeof(zero));
AudioUnitSetProperty(rioUnit, kAUVoiceIOProperty_DuckNonVoiceAudio, kAudioUnitScope_Input, 0, &zero, sizeof(zero));
这似乎有效,尽管肯定还有一些增益修正正在进行。
我的问题是当用户按下主页按钮离开应用程序,然后点击应用程序图标返回它。音频发生了一些变化,似乎 iOS 正在启用噪声抑制和增益控制。这是音频的频谱图 - 请注意整个音频频谱中功率的巨大下降,在图表的中途。这是我离开应用程序然后重新打开它的时候。
- X轴是时间
- Y轴为频率(0-22050 Hz)
- 像素亮度就是功率(黑色=-128 dB,白色= 0 dB)
我觉得我已经尝试了一切——停止和重新启动音频单元,停止和重新启动音频会话......似乎没有任何帮助。希望有任何尝试的提示。