AVAudioSession
можно использовать для установки выходного порта по умолчанию для сеанса.
Первое, что нужно сделать, это установить категорию AVAudioSession
. Здесь есть пара вариантов, так как мы хотим играть и записывать звуки.
AVAudioSessionCategoryPlayAndRecord
- Воспроизведение и запись. Ввод и вывод не обязательно происходят одновременно, но могут при необходимости. Используйте для приложений аудио-чата.
AVAudioSessionCategoryMultiRoute
- Воспроизведение и запись. Разрешить одновременный ввод и вывод для различных аудиопотоков, например, выход USB и наушников. Приложение DJ выиграет от использования многопроцессорной категории. Ди-джею часто приходится слушать один трек музыки, пока играет другой трек. Используя категорию multiroute, приложение DJ может воспроизводить будущие треки через наушники, в то время как текущий трек воспроизводится для танцоров.
В этой ситуации это выглядит как AVAudioSessionCategoryPlayAndRecord
. Установите его так:
NSError *setCategoryError = nil;
BOOL success = [[AVAudioSession sharedInstance]
setCategory: AVAudioSessionCategoryPlayAndRecord
error: &setCategoryError];
if (!success) { /* handle the error in setCategoryError */ }
Apple предлагает установить категорию один раз, а затем изменить маршруты ввода в зависимости от наших потребностей.
Как только категория будет установлена на AVAudioSessionCategoryPlayAndRecord, строка ниже вернет список доступных путей ввода и вывода.
NSArray <AVAudioSessionPortDescription *> *availableInputs = [AVAudioSession sharedInstance].availableInputs;
От OP этот порт будет использоваться для записи.
AVAudioSessionPortBluetoothHFP
- Устройство с поддержкой Bluetooth, поддерживающее профиль Hands-Free (HFP).
Установите его так:
[[AVAudioSession sharedInstance] setPreferredInput:AVAudioSessionPortBluetoothHFP error: &error];
После записи будет сделано, еще одно устройство из списка availableInputs
может быть выбран для воспроизведения. Скорее всего, порт воспроизведения для динамиков BT будет AVAudioSessionPortBluetoothA2DP
, но here is a comprehensive list of all playback ports.
Установите его так:
[[AVAudioSession sharedInstance] setPreferredInput:AVAudioSessionPortBluetoothA2DP error: &error];
Теперь звук должен играть на громкоговоритель BT.
Здесь важно отметить, что [[AVAudioSession sharedInstance] overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:&error];
вернется к внутреннему динамику телефона, а не к динамику BT.
Превосходно ... Но работает только с ручным набором гарнитуры Bluetooth и динамиком –