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.

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.

Aquí hay un par de ideas:

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

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

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

  • Transmisión de audio MP3 mediante comunicación de socket mediante OpenSL ES en Android
  • Vinculación con la biblioteca actualizada en Android
  • Cómo medir la latencia de audio con OpenSL en Android?
  • Comunicación de voz a una frecuencia de muestreo de 8KHz para todos los dispositivos Android con OpenSL
  • Reproducción de audio de baja latencia en Android
  • Precisamente Sync Looped Audio con animación en Android
  • ¿Cuáles deberían ser las razones para usar OpenSL ES en lugar de AudioTrack en Android?
  • Cómo convertir voz humana a nota musical en Android?
  • ¿Es necesario liberar un buffer final de un reproductor de audio OpenSL ES?
  • RecorderObject en OpenSL no implementa la interfaz para configurar el volumen o configurarlo en Android
  • ¿Qué es SLDataLocator_AndroidSimpleBufferQueue (Android 4.3)?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.