Control del volumen de audio forzado a altavoz
Estoy reproduciendo un clip de audio usando OpenSL ES. En mi código tengo
audioManager.setMode(AudioManager.MODE_IN_CALL); audioManager.setSpeakerphoneOn(true);
Para forzar el audio a través del altavoz mientras el auricular está enchufado. Funciona bien, pero no puedo controlar el volumen. Al presionar los botones de volumen mientras se reproduce el clip, la barra de búsqueda de volumen aparece y se mueve, pero el volumen no cambia. Llamar a setVolumeControlStream(AudioManager.STREAM_VOICE_CALL)
o setVolumeControlStream(AudioManager.STREAM_MUSIC)
antes de jugar no parece ayudar. Cambiar cualquiera de los volúmenes fuera de mi aplicación (por ejemplo, en la configuración de Android) no afecta al volumen de reproducción. El control de volumen funciona bien en el auricular y el altavoz cuando no se aplica ningún enrutamiento.
- OpenSL ES en Android con SL_ANDROID_STREAM_VOICE. La entrada de micrófono es extremadamente baja
- Descodificador AES OpenSL ES de Android
- Android 2.3.4, OpenSL ES y enorme log-spam por razones desconocidas
- Tutoriales para OpenSL ES para Android
- Android AlertDialog congela la aplicación unos segundos después de mostrarse - la causa parece relacionada con OpenSL
También he intentado enrutar el audio al altavoz usando este código que encontré en otra respuesta
Class audioSystemClass = Class.forName("android.media.AudioSystem"); Method setForceUse = audioSystemClass.getMethod("setForceUse", int.class, int.class); // First 1 == FOR_MEDIA, second 1 == FORCE_SPEAKER. To go back to the default // behavior, use FORCE_NONE (0). setForceUse.invoke(null, 1, 1);
Pero no funciona en mi Android 4.3 Nexus 4. Necesito la forma más compatible para que de todos modos.
¿Algunas ideas? Gracias.
- ¿Biblioteca de sonido nativa en Android que puede cambiar de tono?
- attachAuxEffect y OpenSL ES
- Android con Nexus 6 - ¿cómo evitar la disminución de la prioridad de audio de OpenSL en relación con el enfoque de la aplicación?
- ¿Es posible obtener un búfer de bytes directamente desde un activo de audio en OpenSL ES (para Android)?
- Redirigir audio / crear rutas de sonido alternativas en Android
- reproducir un archivo MP3 android NDK utilizando openSL desde la memoria
- ¿Es posible tener acceso a la señal del altavoz en Android?
- Alternativa de OpenSL ES en Android
Aquí hay un par de ideas:
-
MODE_IN_CALL establece todos los tipos de prioridad / directiva en STREAM_VOICE_CALL. Durante este tiempo, otro STREAM puede perder el control de volumen. Comprueba si tu clip de audio se reproduce en STREAM_VOICE_CALL.
-
MODE_IN_COMMUNICATION (para VoIP) puede ser un ajuste mejor para usted. MODE_IN_CALL es para llamadas celulares y puede degradar su calidad de audio.
-
Es posible que desee intentar captar el foco de audio y ver si eso ayuda. http://developer.android.com/training/managing-audio/audio-focus.html