studio play mediaplayer example audiomanager android android-audiomanager dtmf audioflinger

android - play - ¿Qué es AudioFlinger y por qué falla TONE_PROP_ACK?



music player android studio (2)

El análisis / decodificación es manejado por el miedo del escenario, que es usado por el servicio del reproductor de medios. Los datos decodificados se escriben en una pista de audio a través de un receptor de audio, y luego las pistas se mezclan con los hilos del mezclador del flinger de audio y se escriben en una secuencia de salida (hardware de audio). El objeto de flujo de salida llena sus propios búferes y luego escribe los datos en el archivo de dispositivo de salida PCM (que puede o no ser un controlador ALSA).

En mi solicitud emito la siguiente declaración:

toneGenerator.startTone(ToneGenerator.TONE_PROP_ACK, 600);

Lo que funciona muy bien en un LG LS670 barato con Android 2.3.3 pero no suena en todos los demás teléfonos que tengo, desde Android 2.2.1 hasta Android 2.3.4.

Así que sé que la versión del sistema operativo no desempeña un papel aquí (también verifiqué en la documentación que ha sido compatible desde la API 1).

Además, tanto el volumen del timbre como el volumen del medio se configuran al máximo y el generador de tonos se inicializa con:

toneGenerator = new ToneGenerator(ToneGenerator.TONE_DTMF_1, 100);

Y verifiqué que Settings.System.DTMF_TONE_WHEN_DIALING está establecido en 1.

Desconcertado por este comportamiento inconsistente (en diferentes teléfonos), examiné los registros del sistema cuando esto sucede y la única diferencia sospechosa que he podido encontrar es que los teléfonos que no suenan TONE_PROP_ACK tienen esta línea en su registro:

AudioFlinger setParameters(): io 25, keyvalue routing=0, tid 155, calling tid 121

¿Cuál es el propósito de AudioFlinger y cuál podría ser su conexión para silenciar TONE_PROP_ACK ?

¿Alguna idea cómo arreglar mi código para que TONE_PROP_ACK siempre suene, independientemente del modelo de teléfono?


Una solución alternativa es generar el tono en algo como Audacity y reproducirlo a través de SoundPool o la API de su elección.

De acuerdo con la documentación de Android, ToneGenerator.TONE_PROP_ACK es:

1200Hz, 100ms ON, 100ms OFF 2 ráfagas

Si elige SoundPool, le sugiero que lo guarde en formato de archivo ogg y repita el tono hasta que finalice. Esto proporciona un audio continuo con un clip muy pequeño y no utiliza muchos recursos.