Los reproductores de audio admiten atributos que definen cómo el sistema de audio maneja las decisiones de enrutamiento, volumen y enfoque para la fuente especificada. Las aplicaciones pueden adjuntar atributos a una reproducción de audio (como música reproducida por un servicio de streaming o una notificación de un nuevo correo electrónico) y luego pasar los atributos de la fuente de audio al marco, donde el sistema de audio usa los atributos para tomar decisiones de mezcla y notificar a las aplicaciones. sobre el estado del sistema.
En Android 4.4 y versiones anteriores, el marco tomaba decisiones de mezcla utilizando solo el tipo de transmisión de audio. Sin embargo, basar tales decisiones en el tipo de flujo era demasiado limitante para producir resultados de calidad en múltiples aplicaciones y dispositivos. Por ejemplo, en un dispositivo móvil, algunas aplicaciones (es decir, Google Maps) reproducían indicaciones para llegar en automóvil en el tipo de transmisión STREAM_MUSIC; sin embargo, en dispositivos móviles en modo de proyección (es decir, Android Auto), las aplicaciones no pueden combinar indicaciones de conducción con otros flujos de medios.
Al utilizar Audio Attribute API , las aplicaciones proporcionan al sistema de audio información detallada sobre una fuente de audio específica, incluido el uso (por qué se reproduce la fuente), el tipo de contenido (qué se reproduce la fuente), las banderas (cómo se debe reproducir la fuente), y contextos (nuevo en Android 9). Sintaxis:
AudioAttributes { mUsage mContentType mSource mFlags mTags / mFormattedTags / mBundle (key value pairs) }
- Uso . Especifica por qué se reproduce la fuente y controla las decisiones de enrutamiento, enfoque y volumen.
- Tipo de contenido . Especifica qué fuente se está reproduciendo (música, película, voz, sonificación, desconocido).
- Contexto . Valores de uso abstraídos al Audio HAL.
- Banderas . Especifica cómo se debe reproducir la fuente. Incluye compatibilidad con la aplicación de audibilidad (se requieren sonidos del obturador de la cámara en algunos países) y sincronización de audio/vídeo por hardware.
Para el procesamiento dinámico, las aplicaciones deben distinguir entre contenido de películas, música y voz. La información sobre los datos en sí también puede ser importante, como el volumen y el valor máximo de muestra.
Usar atributos
El uso especifica el contexto en el que se utiliza la transmisión y proporciona información sobre por qué se reproduce el sonido y para qué se utiliza. La información de uso es más expresiva que un tipo de flujo y permite que las plataformas o las políticas de enrutamiento refinen las decisiones de volumen o enrutamiento.
Proporcione uno de los siguientes valores de uso para cualquier instancia:
- USAGE_UNKNOWN
- USAGE_MEDIA
- USAGE_VOICE_COMMUNICATION
- USAGE_VOICE_COMMUNICATION_SIGNALLING
- USAGE_ALARM
- USO_NOTIFICACIÓN
- USAGE_NOTIFICATION_TELEPHONY_RINGTONE
- USAGE_NOTIFICATION_COMMUNICATION_REQUEST
- USAGE_NOTIFICATION_COMMUNICATION_INSTANT
- USAGE_NOTIFICATION_COMMUNICATION_DELAYED
- USAGE_NOTIFICATION_EVENT
- USAGE_ASSISTANCE_ACCESSIBILITY
- USAGE_ASSISTANCE_NAVIGATION_GUIDANCE
- USAGE_ASSISTANCE_SONIFICATION
- USAGE_GAME
- USAGE_VIRTUAL_SOURCE
- USO_ASSISTANT
Los valores de uso de atributos de audio son mutuamente excluyentes. Para ver ejemplos, consulte las definiciones USAGE_MEDIA
y USAGE_ALARM
; para conocer las excepciones, consulte la definición de AudioAttributes.Builder
.
Tipo de contenido
El tipo de contenido define qué es el sonido y expresa la categoría general del contenido, como película, voz o pitido/tono de llamada. El marco de audio utiliza información del tipo de contenido para configurar selectivamente bloques de posprocesamiento de audio. Si bien proporcionar el tipo de contenido es opcional, debe incluir información de tipo siempre que se conozca el tipo de contenido, como usar CONTENT_TYPE_MOVIE
para un servicio de transmisión de películas o CONTENT_TYPE_MUSIC
para una aplicación de reproducción de música.
Proporcione uno de los siguientes valores de tipo de contenido para cualquier instancia:
-
CONTENT_TYPE_UNKNOWN
(predeterminado) -
CONTENT_TYPE_MOVIE
-
CONTENT_TYPE_MUSIC
-
CONTENT_TYPE_SONIFICATION
-
CONTENT_TYPE_SPEECH
Los valores del tipo de contenido de los atributos de audio son mutuamente excluyentes. Para obtener detalles sobre los tipos de contenido, consulte la API de atributos de audio .
Contextos
Cada sonido en Android se identifica por la aplicación responsable y el motivo de generar el sonido; y el dispositivo Android utiliza esta información para determinar cómo presentar el sonido. En Android 8.x y versiones anteriores, las aplicaciones pueden informar el motivo de la generación de sonido utilizando tipos de transmisión heredados (por ejemplo, AudioSystem.STREAM_MUSIC
) o AudioAttributes
. En Android 9, los valores AudioAttributes.usage
se abstraen en el nivel HAL como Contexts .
Contextos de audio HAL | Uso de atributos de audio |
---|---|
MÚSICA | MEDIOS DE COMUNICACIÓN |
COMANDO DE VOZ | USO_ASSISTANT |
NAVEGACIÓN | ASISTENCIA_NAVIGACIÓN_GUIDANCE |
LLAMAR | COMUNICACIÓN DE VOZ |
TONO DE LLAMADA | TONO DE NOTIFICACIÓN |
NOTIFICACIÓN | NOTIFICACIÓN |
ALARMA | ALARMA |
SISTEMA_SONIDO | ASISTENCIA_SONIFICACIÓN |
DESCONOCIDO | DESCONOCIDO |
Puede proporcionar uno de los siguientes valores CONTEXT_NUMBER
para cualquier instancia:
- MUSIC_CONTEXT // Reproducción de música
- NAVIGATION_CONTEXT // Direcciones de navegación
- VOICE_COMMAND_CONTEXT // Sesión de comando de voz
- CALL_RING_CONTEXT // Llamada de voz sonando
- CALL_CONTEXT // Llamada de voz
- ALARM_CONTEXT // Sonido de alarma desde Android
- NOTIFICATION_CONTEXT // Notificaciones
- SYSTEM_SOUND_CONTEXT // Sonidos de interacción del usuario (clics en botones, etc.)
Banderas
Las banderas especifican cómo el marco de audio aplica efectos a la reproducción de audio. Proporcione uno o más de los siguientes indicadores para una instancia:
-
FLAG_AUDIBILITY_ENFORCED
. Solicita al sistema que garantice la audibilidad del sonido. Úselo para abordar las necesidades delSTREAM_SYSTEM_ENFORCED
heredado (como forzar los sonidos del obturador de la cámara). -
HW_AV_SYNC
. Solicita al sistema que seleccione un flujo de salida que admita la sincronización A/V de hardware.
Las marcas de atributos de audio no son exclusivas y se pueden combinar. Para obtener detalles sobre estas banderas, consulte la API de atributos de audio .
Ejemplo
En este ejemplo, AudioAttributes.Builder
define los AudioAttributes
que utilizará una nueva instancia AudioTrack
:
AudioTrack myTrack = new AudioTrack( new AudioAttributes.Builder() .setUsage(AudioAttributes.USAGE_MEDIA) .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC) .build(), myFormat, myBuffSize, AudioTrack.MODE_STREAM, mySession);
Compatibilidad
Los desarrolladores de aplicaciones deben utilizar atributos de audio al crear o actualizar aplicaciones para Android 5.0 y versiones posteriores. Sin embargo, no es necesario que las aplicaciones aprovechen los atributos; sólo pueden manejar tipos de flujos heredados o ignorar los atributos (es decir, un reproductor multimedia genérico que no sabe nada sobre el contenido que está reproduciendo).
En tales casos, el marco mantiene la compatibilidad con dispositivos más antiguos y versiones de Android al traducir automáticamente los tipos de transmisión de audio heredados a atributos de audio. Sin embargo, el marco no impone ni garantiza esta asignación entre dispositivos, fabricantes o versiones de Android.
Asignaciones de compatibilidad:
Android 5.0 y superior | Android 4.4 y anteriores |
---|---|
CONTENT_TYPE_SPEECH USAGE_VOICE_COMMUNICATION | STREAM_VOICE_CALL |
CONTENT_TYPE_SONIFICATION USAGE_ASSISTANCE_SONIFICATION | STREAM_SYSTEM |
CONTENT_TYPE_SONIFICATION USAGE_NOTIFICATION_RINGTONE | STREAM_RING |
CONTENT_TYPE_MUSIC USAGE_UNKNOWN USAGE_MEDIA USAGE_GAME USAGE_ASSISTANCE_ACCESSIBILITY USAGE_ASSISTANCE_NAVIGATION_GUIDANCE | STREAM_MUSIC |
CONTENT_TYPE_SONIFICATION USAGE_ALARM | STREAM_ALARM |
CONTENT_TYPE_SONIFICATION USAGE_NOTIFICATION USAGE_NOTIFICATION_COMMUNICATION_REQUEST USAGE_NOTIFICATION_COMMUNICATION_INSTANT USAGE_NOTIFICATION_COMMUNICATION_DELAYED USAGE_NOTIFICATION_EVENT | STREAM_NOTIFICATION |
CONTENT_TYPE_SPEECH | (@hide) STREAM_BLUETOOTH_SCO |
FLAG_AUDIBILITY_ENFORCED | (@hide) STREAM_SYSTEM_ENFORCED |
CONTENT_TYPE_SONIFICATION USAGE_VOICE_COMMUNICATION_SIGNALLING | (@hide) STREAM_DTMF |
Tipos de flujo obsoletos
Android 9 deja obsoletos los siguientes tipos de transmisión para uso automotriz:
- STREAM_DEFAULT
- STREAM_VOICE_CALL
- STREAM_SYSTEM
- STREAM_RING
- TRANSMITIR MÚSICA
- TRANSMISIÓN_ALARM
- TRANSMISIÓN_NOTIFICACIÓN
- STREAM_BLUETOOTH_SCO
- STREAM_SYSTEM_ENFORCED
- STREAM_DTMF
- TRANSMISIÓN_TTS
- STREAM_ACCESIBILIDAD
Para obtener más detalles, consulte Audio automotriz .