1

我有一个 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));
4

2 回答 2

2

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

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

于 2016-12-06T22:56:49.230 回答
0

AudioOutputUnitStop()要启用和禁用音频单元,调用和就足够了AudioOutputUnitStart()。您只需要 AudioUnitUninitialize()并且AudioUnitInitialize()如果您还希望更改单元的状态(并且启用/禁用似乎不被视为“状态”)。

AudioUnitUninitialize() 文档中:

通常,音频单元的状态(例如其 I/O 格式和内存分配)在音频单元初始化时无法更改。

于 2016-12-06T20:14:00.673 回答