Mam streaming AudioTrack
przez słuchawki. Muszę wysłać SoundPool
tylko do wbudowanych głośników, nie przerywając odtwarzania przez słuchawki. Jakieś gangsterki hacki?Odtwarzanie dźwięku przez głośniki podczas odtwarzania muzyki przez słuchawki
Odpowiedz
Wiele urządzeń z Androidem używa jednego wątku wyjściowego w funkcji AudioFlinger/audio HAL do odtwarzania lokalnego (słuchawka, głośnik, przewodowe słuchawki/słuchawki), co uniemożliwia jednoczesne przełączanie dwóch ścieżek (dlatego na wielu urządzeniach media strumienie są wyciszane, jeśli jest odtwarzane powiadomienie i masz podłączony przewodowy zestaw słuchawkowy, ponieważ w przeciwnym razie usłyszysz muzykę w głośniku podczas odtwarzania powiadomienia).
W niektórych urządzeniach może to być możliwe, aby robić to, co szukasz, jeśli uda się zrobić setForceUse(FOR_MEDIA, FORCE_SPEAKER)
i użyć typu MUSIC
strumienia na rzeczy, które chcesz grać w głośniku, a typ VOICE_CALL
strumień dla rzeczy, które chcesz grać w przewodowym zestawie słuchawkowym.
Nie jestem pewien, czy jest jakiś sposób, aby aplikacja wykonała to wywołanie setForceUse
. Być może możesz uzyskać z klasy handleMessage
z klasy AudioService
poprzez odbicie i wysłać mu wiadomość MSG_SET_FORCE_USE
.. Nigdy nie próbowałem samemu, więc może to zawieść nieszczęśliwie.
EDIT: Mam obecnie testowane drogę setForceUse zmuszania strumieni mediów do głośnika podczas przewodowy zestaw słuchawkowy jest dołączony na rzeczywiste urządzenie, i to działa (choć nie mogę zagwarantować, że będzie działać w poprzek wszystkie urządzenia). Implementacja była nieco inna niż to, co opisałem powyżej. Zobacz moją odpowiedź na how to turn speaker on/off programatically in android 4.0 dla kodu, którego użyłem.
przy użyciu STREAM_RING pomaga przekierować dźwięk do głośnika, nawet jeśli słuchawki są podłączone. Jednak dźwięk odtwarzany w słuchawkach (AudioTrack) jest wstrzymany do czasu ukończenia STREAM_RING, a następnie wznowienia. Moim priorytetem jest nieprzerwane odtwarzanie strumienia słuchawek. –
Tak, STREAM_RING podąża za strategią routingu SONIFIKACJI, która spowodowałaby zachowanie opisane w pierwszym akapicie mojej odpowiedzi. Sprawdziłem, czy strumień MUSIC wymuszony na głośniku + strumień VOICE_CALL w przewodowym zestawie słuchawkowym działa prawidłowo na komputerze XPeria P, ale nie testowałem go na żadnych innych urządzeniach. – Michael
Mike, przepraszam, że Cię zbyt mocno naciskałem, ale testowałem to na S2 i HTC One X. Oboje wstrzymują dźwięk na słuchawkach. Mój jest sygnałem, który przy zerwaniu ciągłości narusza proces roboczy systemu. –
, więc SoundPool jest oddzielny od ścieżki AudioTrack? – Soham
AudioManager mAudioMgr = (AudioManager) getSystemService (Context.AUDIO_SERVICE); mAudioMgr.setSpeakerphoneOn (true); mAudioMgr.setMode (AudioManager.MODE_IN_COMMUNICATION); –