Воспроизведение звука через динамики при воспроизведении музыки через наушники
У меня есть AudioTrack
Потоковое через наушники. Я должен отправить SoundPool
только встроенные динамики, не прерывая AudioTrack
играть через наушники. Любые хаки гангстеры?
1 ответ
Многие устройства Android используют один выходной поток в AudioFlinger / audio HAL для всего локального воспроизведения (наушник, динамик, проводная гарнитура / наушники), что делает невозможной одновременную маршрутизацию двух дорожек (вот почему на многих устройствах мультимедийные потоки принудительно отключаются если воспроизводится уведомление, и у вас подключена проводная гарнитура, иначе вы услышите музыку в громкоговорителе во время воспроизведения уведомления).
На некоторых устройствах может быть возможно сделать то, что вы ищете, если вам удастся сделать setForceUse(FOR_MEDIA, FORCE_SPEAKER)
и использовать MUSIC
тип потока для материала, который вы хотите воспроизвести в динамике, и VOICE_CALL
Тип потока для материала, который вы хотите воспроизвести в проводной гарнитуре.
Я не уверен, есть ли способ для приложения, чтобы выполнить это setForceUse
позвони хоть. Возможно, вы можете получить на handleMessage
метод AudioService
класс через отражение и отправить его MSG_SET_FORCE_USE
сообщение.. Я никогда не пробовал сам, так что это может с треском провалиться.
РЕДАКТИРОВАТЬ: Сейчас я протестировал способ setForceUse для принудительной передачи потоков MEDIA в громкоговоритель, когда проводная гарнитура подключена к реальному устройству, и он работает (хотя я не могу гарантировать, что он будет работать на всех устройствах). Реализация немного отличалась от того, что я описал выше. Смотрите мой ответ о том, как программно включить / выключить динамик в Android 4.0 для кода, который я использовал.