2012-08-18 12 views
5

Tengo un AudioTrack transmisión a través de auriculares. Tengo que enviar un SoundPool solo a los altavoces incorporados, sin interrumpir el AudioTrack reproduciendo por los auriculares. ¿Algún ladrón de hackers?Reproducción de sonido a través de altavoces mientras se reproduce música a través de auriculares

+0

por lo que el SoundPool está separado del AudioTrack ¿verdad? – Soham

+0

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

Respuesta

11

Muchos dispositivos Android usan una única salida en AudioFlinger/audio HAL para todas las reproducciones locales (auricular, altavoz, auriculares con cable/auriculares), imposibilitando al mismo tiempo el enrutamiento diferente de dos pistas (por eso en muchos dispositivos los medios las transmisiones se silencian por la fuerza si se reproduce una notificación y tiene un auricular con cable conectado, porque de lo contrario escucharía la música en el altavoz mientras se reproduce la notificación).

En algunos dispositivos puede ser que sea posible hacer lo que usted está buscando si logras hacer un setForceUse(FOR_MEDIA, FORCE_SPEAKER) y utilizar el tipo MUSIC corriente de las cosas que desea reproducir en el altavoz, y el tipo VOICE_CALL corriente de los cosas que desea jugar en el auricular con cable.
No estoy seguro si hay alguna manera para que una aplicación realice esa llamada setForceUse. Tal vez pueda obtener el handleMessage método de la clase AudioService a través de la reflexión y enviar un mensaje MSG_SET_FORCE_USE .. Nunca lo he probado, por lo que podría fallar miserablemente.

EDIT: ahora hemos probado la manera de forzar setForceUse flujos de medios para el altavoz mientras que un auricular con cable está unido en un dispositivo real, y lo hace el trabajo (aunque no puedo garantizar que va a trabajar a través de todos los dispositivos). La implementación fue ligeramente diferente de lo que describí anteriormente. Vea mi respuesta al how to turn speaker on/off programatically in android 4.0 para el código que utilicé.

+0

usando STREAM_RING ayuda a redirigir el sonido al altavoz incluso si los auriculares están conectados. Sin embargo, el sonido que se reproduce en los auriculares (AudioTrack) se pausa hasta que se complete STREAM_RING y luego se reanuda. Mi prioridad es reproducir la transmisión de auriculares sin interrupción. –

+0

Sí, STREAM_RING sigue la estrategia de enrutamiento SONIFICACIÓN, que desencadenaría el comportamiento que describí en el primer párrafo de mi respuesta. Comprobé que una transmisión MUSIC forzada a altavoz + una transmisión VOICE_CALL en auriculares con cable funciona correctamente en una XPeria P, pero no la he probado en ningún otro dispositivo. – Michael

+0

Mike, siento presionarlo demasiado, pero lo he estado probando en S2 y HTC One X. Ambos están pausando el audio en los auriculares. El mío es una señal que hasta la ruptura de continuidad violará el proceso de trabajo del sistema. –

Cuestiones relacionadas