我有一个 VoIP 应用程序,它使用 VoiceProcessingIO AudioUnit 进行通话音频。此外,应用程序中还有一个用于按下 DTMF 音调的键盘。当按下按钮时,我写了一个小音调发生器来播放标准声音。

我遇到的问题是:

  1. 如果我使用 RemoteIO AudioUnit,AudioUnit 会很快初始化并启动,但有时会在有活动呼叫时停止工作(我假设因为与第二个 VoiceProcessingIO 音频设备发生冲突)

  2. 如果我使用 VoiceProcessingIO AudioUnit,即使禁用了语音处理,AudioUnit 初始化和启动也需要很长时间,因此无法按下按钮进行播放(在 iPhone 7 上,AudioUnitInitializeAudioOutputUnitStart一直需要~ms 但是,即使正在进行通话,它也始终有效。

我在这里做错了吗? RemoteIO 似乎更接近我想要的音频单元 - 但即使音频会话是AVAudioSessionPlayAndRecord并且还有一个单独的VoiceProcessingIO单元,有没有办法让它始终如一?

更新:

我可能在这里错了。看起来 RemoteIO 正在使用 VoiceProcessingIO 单元,但它的音量明显低于 VoiceProcessingIO 不播放时的音量。它似乎也忽略了默认的输出设备(i.e.当我更改音频输出设备时不会切换到扬声器)