Я ищу пару стереозвука A2DP с функцией прерывания AudioManager
MODE_IN_COMMUNICATION
. Цель этого соединения - вставить фрагменты пользовательских файлов musi c в трансляции AM / FM, используя musi c как нечто, «набирающее» устройство Android и останавливающее трансляцию AM / FM.
У меня это работает прилично с SCO, используя следующий код для начала «телефонного звонка».
Вот код AudioManager
:
AudioManager localAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
localAudioManager.setMode(0);
localAudioManager.setBluetoothScoOn(true);
localAudioManager.startBluetoothSco();
localAudioManager.setMode(AudioManager.MODE_IN_COMMUNICATION);
Вот MediaPlayer
, который я пытаюсь воспроизвести:
MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioAttributes(new AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_MEDIA)
.setContentType(AudioAttributes.CONTENT_TYPE_SPEECH)
.build());
mediaPlayer.setDataSource("https://wmbr.org/WMBR_Archive_128.m3u");
mediaPlayer.prepare();
mediaPlayer.start();
Звук, созданный этим Код некачественный и моно, а не стерео. Я хотел бы изменить это.
Проблема в том, что Android Сайт разработчика для startBluetoothSco говорит:
Даже если соединение SCO установлено, следующие ограничения применяются к выходным аудиопотокам, чтобы их можно было направить на гарнитуру SCO: - тип потока должен быть STREAM_VOICE_CALL - формат должен быть моно - выборка должна быть 16 кГц или 8 кГц
Существует ли какой-либо способ объединить стереозвук и функцию прерывания?
Дополнительный контекст : в этот ответ кажется, что MODE_IN_COMMUNICATION
и MODE_IN_CALL
используют стратегию маршрутизации PHONE
. Он также говорит:
Если ваш аксессуар BT поддерживает профиль громкой связи, он будет использовать канал SCO для голосового аудио, а канал ACL, используемый для A2DP, должен быть закрыт, чтобы избежать помех между ними.
Я предполагаю, что это означает, что мой единственный вариант - настраиваемая стратегия маршрутизации, и я не уверен, что это влечет за собой.