Невозможно подключить гарнитуру Bluetooth с AVAudioSessionCategoryPlayAndRecord во время работы приложения - PullRequest
0 голосов
/ 25 августа 2018

Я разрабатываю музыкальное приложение, которое требует ввода с микрофона, поэтому мой AVAudioSessionCategory установлен на AVAudioSessionCategoryPlayAndRecord.

Я пытаюсь заставить Bluetooth-наушники работать с приложением, но я заметил кое-что странное в соединении BT с различными категориями AVAudioSession:

Если я использую AVAudioSessionCategoryAmbient,Наушники BT прекрасно сочетаются / отключаются во время работы приложения или до его запуска.Я также могу получать AVAudioSessionRouteChangeNotification s при сопряжении или отключении наушников.

С помощью AVAudioSessionCategoryPlayAndRecord, однако, я могу сопрягать и получать аудио с BT, если подключаю его до запуска приложения, но еслиЯ пытаюсь выполнить сопряжение, пока приложение работает, оно не будет работать.Мои наушники BT будут указывать, что они «подключены», но значок BT не появится в строке состояния iOS.Я также не получаю никаких уведомлений о прерывании звука AVAudioSessionRouteChangeNotification или других, когда я включаю или выключаю наушники.

Я могу заставить BT работать, если переместить приложение в фоновый режим, а затемвведите его заново, но я никогда не смогу выполнить сопряжение, пока приложение находится на переднем плане.

Я использую libpd для звукового движка, и вот как я инициализирую свой PdAudioController объект:

 [self.pdAudio configurePlaybackWithSampleRate:samplingRate numberChannels:2 inputEnabled:YES mixingEnabled:NO];

 //enable bluetooth
 [PdAudioController setSessionOptions:AVAudioSessionCategoryOptionAllowBluetoothA2DP];

Есть ли другие настройки, которые я могу изменить, чтобы можно было подключать наушники во время работы приложения при использовании AVAudioSessionCategoryPlayAndRecord?

1 Ответ

0 голосов
/ 27 августа 2018

Многие Bluetooth-гарнитуры, по-видимому, ограничены определенными наборами частот дискретизации, иногда не одинаковыми для входа (микрофон) и выхода (динамик). Поэтому они не могут подключиться к сеансу живого аудио с несовместимой частотой дискретизации.

Когда приложение останавливает свой аудиосеанс, чтобы перейти в фоновый режим, а затем снова выходит на передний план, этот разрыв позволяет коду аудиосеанса и аудиоустройства пересматривать частоты дискретизации (например, предлагать и обрабатывать сбой / ошибку). коды, -50 и т. д.) до (повторного) включения сеанса и (повторного) запуска аудиоустройства.

Если вы получили уведомление об изменении маршрута, вы можете попытаться заставить приложение остановить аудио, прервать сеанс, подождать несколько тиков, а затем перезапустить любой звук по мере необходимости.

...