我有一个VoIP应用程序,它使用VoiceProcessingIO AudioUnit进行通话音频。此外,应用程序中还有一个用于按下DTMF音调的键盘。当按下按钮时,我写了一个小音调发生器来播放标准声音。
我遇到的问题是:
1)如果我使用RemoteIO AudioUnit,AudioUnit会很快初始化并启动,但有时会在有活动呼叫时停止工作(我假设因为与第二个VoiceProcessingIO音频设备发生冲突)
2)如果我使用VoiceProcessingIO AudioUnit,即使禁用了语音处理,AudioUnit初始化和启动也需要很长时间,因此无需按下按钮即可播放(在iPhone 7上它始终需要~40- AudioUnitInitialize
和AudioOutputUnitStart
返回60毫秒。但是,即使正在进行通话,它也始终有效。
我在这里做错了吗? RemoteIO似乎更接近我想要的音频单元 - 但即使音频会话为AVAudioSessionPlayAndRecord
并且还有一个单独的VoiceProcessingIO
单元,有没有办法让它始终如一地播放?
更新
我可能在这里错了。看起来RemoteIO正在使用VoiceProcessingIO单元,但它的音量明显低于VoiceProcessingIO不播放时的音量。它似乎也忽略了默认的输出设备(即当我改变音频输出设备时不切换到扬声器)