studio play mediaplayer mediabrowser how android audio

android - play - ¿Utilizando el valor audioSessionId para crear una instancia de la clase AudioFx?



mediaplayer android studio (4)

He leído las API de Android y he intentado buscar en Internet para declarar un audioSessionId personalizado y luego usar ese audioSessionId para inicializar una clase AudioFx y asignar a mi MediaPlayer o AudioTrack el audioSessionId codificado.

Este método me permitiría crear un AudioFx primero y luego adjuntar un nuevo MediaPlayer o AudioTrack a este audioSessionId .

Actualmente puedo usar este método en Android 2.3.6, pero en Android 4.x tengo problemas con los errores por los que falla la inicialización o en otros dispositivos ICS / JellyBean. Este error es silencioso, pero llamar a una función conlleva excepciones.

Samsung Galaxy S II [Android 4.0.3]: [El problema ya no ocurre con Android 4.0.4]

E/AudioEffect(13250): set(): AudioFlinger could not create effect, status: -38 E/AudioEffects-JNI(13250): AudioEffect initCheck failed -5 E/AudioEffect-JAVA(13250): Error code -5 when initializing AudioEffect. W/WrapEqualizer(13250): createEqualizer() -> Effect library not loaded

Motorola Xoom [Android 4.1.2]
Falla parece silencioso tras el constructor. Entonces llamando a getProperties () se bloquea.

java.lang.RuntimeException: AudioEffect: set/get parameter error at android.media.audiofx.AudioEffect.checkStatus(AudioEffect.java:1247) at android.media.audiofx.Equalizer.getProperties(Equalizer.java:532)

Nexus 4 [Android 4.2.1]
Al usar audioSessionId = 0, todo funciona bien, pero al usar cualquier otro número, el dispositivo informará el siguiente error silencioso cada vez que intente cambiar el preajuste, el nivel de banda, el refuerzo de graves a ON o el Virtualizador a ON. El ID de efecto reportado es diferente dependiendo del FX que estoy tratando de modificar.

W/AudioPolicyManagerBase(165): unregisterEffect() unknown effect ID 1381

Actualización 08/11/12:
Puedo usar audioSessionId como 0. Sé que está en desuso pero funciona con el permiso. <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> ¿Debo estar usando AudioFx con el ID de sesión de audio 0?


¿Debo utilizar el AudioFx con el ID de sesión de audio 0?

Probablemente funcionará en algunos casos, pero no cuente con ello para seguir haciéndolo en futuras versiones de Android. Ya estarás comprometiendo la interoperabilidad entre tu aplicación y otras aplicaciones en Jellybean. Eche un vistazo a lo que hace AudioFlinger cuando se activa un efecto :

// suspend all effects in AUDIO_SESSION_OUTPUT_MIX when enabling any effect on // another session. This gives the priority to well behaved effect control panels // and applications not using global effects. // Enabling post processing in AUDIO_SESSION_OUTPUT_STAGE session does not affect // global effects if ((sessionId != AUDIO_SESSION_OUTPUT_MIX) && (sessionId != AUDIO_SESSION_OUTPUT_STAGE)) { setEffectSuspended_l(NULL, enabled, AUDIO_SESSION_OUTPUT_MIX); }


Aparte de la sesión 0, que es la "sesión global en desuso", mi comprensión del código de AudioFlinger muestra que las sesiones solo se crean para las clases que realmente hacen audio IO, es decir, AudioRecord, AudioTrack, MediaPlayer, etc. Debes crear estas clases y luego obtenga su ID de sesión, y luego adjunte el efecto.

Cualquier otro valor que proporcione para la ID de sesión corresponderá a una sesión de audio que no existe, y por lo tanto fallará.


Debes mirar: this

Aparentemente es un problema no resuelto surgido en ICS, y probablemente tampoco se resolvió en JB.


Sé que este problema si alguien quiere probar

hacer esto

Equalizer eq=null; . . . . . //in any function before initialization do this if(eq!=null) eq.release(); eq=new Equalizer(0, audiosessionid);

pruébalo una vez