2012-08-18 31 views
5

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

+0

, więc SoundPool jest oddzielny od ścieżki AudioTrack? – Soham

+0

AudioManager mAudioMgr = (AudioManager) getSystemService (Context.AUDIO_SERVICE); mAudioMgr.setSpeakerphoneOn (true); mAudioMgr.setMode (AudioManager.MODE_IN_COMMUNICATION); –

Odpowiedz

11

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.

+0

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. –

+0

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

+0

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. –