我有一个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));发布于 2016-12-06 20:14:00
要启用和禁用音频单元,只需调用AudioOutputUnitStop()和AudioOutputUnitStart()即可。如果您也希望更改单元的状态(并且启用/禁用似乎不被视为“状态”),则只需要AudioUnitUninitialize()和AudioUnitInitialize()。
来自AudioUnitUninitialize() 文档
通常,音频单元的状态(例如I/O格式和内存分配)在初始化音频单元时不能更改。
发布于 2016-12-06 22:56:49
停止音频单元并不是绝对必要的,尽管它确实降低了应用程序的功耗,因此,如果在任何时间内停止播放,都应该停止播放,以节省用户的电池寿命。不停止音频单元的优点是,开始再次记录将发生在许多毫秒的较低的延迟,这可能是重要的一些应用程序。停止音频单元的替代方法是丢弃记录回调中的样本,并在播放回调中用静默(零)填充缓冲区。
取消初始化只需要在以后用不同的配置重新初始化音频单元时才能完成。
https://stackoverflow.com/questions/40970245
复制相似问题