我正在为 iOS 开发一个 VOIP 项目,并注意到一个奇怪的问题。我的设置如下所示:
- 捕获端有一个 VoiceProcessingIO 单元(用于回声消除),具有输出范围、输出总线和输入范围、输入总线启用。
- 渲染端有一个 RemoteIO 单元,具有输出范围,启用输出总线。
到目前为止,我没有使用任何音频图。
当我开始录制声音时,我注意到上面的设置导致输出声音非常低,直到我关闭输出范围,VoiceProcessingIO 的输出总线。虽然这听起来像是我的代码中的一个错误(设置错误的 IO 总线),但捕获端的更改为什么会影响渲染端仍然没有意义。
在阅读了 developer.apple.com 的 iOS 音频单元托管指南后,我注意到它多次提到每个设计模式应该只包含一个 I/O 音频单元。我想知道这是强制性的,还是可选的。用两个音频单元保存我的代码是否安全?
确实,使用两个音频单元可能有其自身的原因,因为如果我想使一端静音,我可以简单地关闭一个单元。我不能用 kAudioUnitProperty_EnableIO 来做到这一点,因为它在 AudioUnitInitialize() 之后无法更改,这意味着如果我想禁用其中一个,单音频单元解决方案可能必须关闭两个通道并再次重新初始化音频单元。这会导致糟糕的用户体验,因为此时语音可能会暂停一小会儿。
谢谢,福州