iOS не может играть на динамике и настроить аудиосеанс на запись

Желаемые функции: 1) воспроизведение звука через наушники при подключении, 2) воспроизведение звука через динамик, когда наушники не подключены, и 3) запись звука через наушники или внутренний микрофон.

Чтобы заставить его воспроизводить звук через динамик и наушники, я использую следующий тип аудиосеанса:

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error: &setCategoryError];

А затем создайте экземпляр аудиоплеера. Это отлично работает для воспроизведения звука через наушники, когда они подключены, и через динамик, когда нет, пока я не попытаюсь записать.

При записи я сначала устанавливаю аудиосеанс на AVAudioSessionCategoryPlayAndRecord, а затем пытаюсь записать с помощью Novicane. Иногда это удается, но иногда приложение дает сбой без трассировки стека или индикации отладчика и выдает AUIOClient_StartIO ошибку.

Мой поиск этой ошибки в Google предполагает, что мне нужно постоянно поддерживать сеанс AVAudioSessionCategoryPlayAndRecord. Похоже, это предотвращает появление ошибки AUIOClient_StartIO.

Но всякий раз, когда я выполняю воспроизведение с AVAudioSessionCategoryPlayAndRecord, он начинает воспроизводиться из встроенного динамика, а не из динамика.

Я знаю, что могу переопределить канал вывода звука на динамик (например, https://stackoverflow.com/a/1064941/895876 ), но при подключении наушников не происходит автоматического переключения на звук через наушники.

Как мне получить все три функции?


person Jason    schedule 19.03.2014    source источник
comment
Я не думаю, что вам нужно постоянно устанавливать AVAudioSessionCategoryPlayAndRecord. Я думаю, вам следует наблюдать за AVAudioSessionRouteChangeNotification и воссоздавать свой AU, когда он срабатывает. Хотя вы передали эту работу Новичану.   -  person Rhythmic Fistman    schedule 28.03.2014


Ответы (1)


Вы должны использовать блок AUHAL, чтобы установить конкретное устройство ввода в качестве входа по умолчанию, а затем подключить его к AudioQueue.

Ознакомьтесь с этой технологией Apple. обратите внимание, это может вам помочь ..

Если это не сработает, попробуйте AVAudioSession использовать setPreferredInput:

Это не в моей голове, на основе того, что я недавно прочитал, я на самом деле не пробовал, но знаю, что другим это удалось.

удачи.

person MrHaze    schedule 27.03.2014