运行时的 RemoteIO 配置

RemoteIO configuration at runtime

我有一个 RemoteIO 单元设置,它从麦克风获取输入并播放它。只需轻按一下按钮,即可随时启用或禁用播放。我的问题是启用或禁用播放的调用是否需要音频单元停止、取消初始化然后配置或根本不需要停止和取消初始化?这是我在 RIO 为 运行.

时用于在运行时启用或禁用播放的示例代码
/* Are these two lines required or not???*/
[self stopIOUnit];
AudioUnitUninitialize(mAudioUnit);


 int flag = enable? 1 : 0;
// play on io on the output bus
OSStatus   status = AudioUnitSetProperty(mAudioUnit,
                              kAudioOutputUnitProperty_EnableIO,
                              kAudioUnitScope_Output,
                              0, /*output*/
                              &flag,
                              sizeof(flag));

要启用和禁用音频单元,调用AudioOutputUnitStop()AudioOutputUnitStart()就足够了。如果你也想改变单位的状态,你只需要 AudioUnitUninitialize()AudioUnitInitialize()(enabled/disabled 似乎不被认为是 "state")。

来自AudioUnitUninitialize() documentation:

Usually, the state of an audio unit (such as its I/O formats and memory allocations) cannot be changed while an audio unit is initialized.

并非绝对需要停止音频单元,尽管它确实会降低应用程序的功耗,因此如果停止播放任何时间长度都应该这样做,以节省用户的电池寿命。不停止 Audio Unit 的好处是再次开始录制时延迟会降低很多毫秒,这在某些应用程序中可能很重要。停止音频单元的替代方法是丢弃记录回调中的样本,并在播放回调中用静音(零)填充缓冲区。

仅当您稍后使用不同的配置重新初始化音频单元时才需要取消初始化。