Настройка RemoteIO во время выполнения
У меня есть настройка устройства 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));
2 ответа
Чтобы включить и отключить аудиоустройство, достаточно позвонить AudioOutputUnitStop()
а также AudioOutputUnitStart()
, Вам нужно только AudioUnitUninitialize()
а также AudioUnitInitialize()
если вы также хотите изменить состояние устройства (и включение / отключение не считается "состоянием").
От AudioUnitUninitialize()
документация:
Обычно состояние аудиоустройства (например, его форматы ввода-вывода и выделения памяти) не может быть изменено, пока аудиоустройство инициализируется.
Остановка аудиоустройства не является абсолютно обязательной, хотя это снижает энергопотребление приложения, и, следовательно, это следует делать при остановке воспроизведения на любой промежуток времени, чтобы сохранить время автономной работы пользователей. Непрерывная работа аудиоустройства имеет то преимущество, что возобновление записи будет происходить через много миллисекунд с меньшей задержкой, что может быть важно в некоторых приложениях. Альтернативой остановке аудиоустройства является сброс сэмплов в обратном вызове записи и заполнение буфера тишиной (нулями) в обратном вызове воспроизведения.
Деинициализацию нужно выполнять только в том случае, если позже вы переинициализировали аудиоустройство с другой конфигурацией.