Atributos de audio

Los reproductores de audio admiten atributos que definen cómo el sistema de audio controla el enrutamiento, el volumen y las decisiones de enfoque para la fuente especificada. Las aplicaciones pueden adjuntar atributos a una reproducción de audio (como la música que reproduce un servicio de transmisión o una notificación de un correo electrónico nuevo) y, luego, pasar los atributos de la fuente de audio al framework, 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 framework tomaba decisiones de mezcla solo con el tipo de flujo de audio. Sin embargo, basar esas decisiones en el tipo de transmisión era demasiado limitado para producir resultados de calidad en varias aplicaciones y dispositivos. Por ejemplo, en un dispositivo móvil, algunas aplicaciones (p. ej., Google Maps) reproducen instrucciones sobre cómo llegar en el tipo de transmisión STREAM_MUSIC. Sin embargo, en dispositivos móviles en modo de proyección (p. ej., Android Auto), las aplicaciones no pueden combinar instrucciones sobre cómo llegar con otras transmisiones multimedia.

Con la API de Audio Attribute, 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), las marcas (cómo se debe reproducir la fuente) y los contextos (novedad 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 lo que se está reproduciendo en la fuente (música, película, voz, sonificación, desconocido).
  • Context. Valores de uso abstraídos al HAL de audio
  • Marcas: Especifica cómo se debe reproducir la fuente. Incluye compatibilidad con la aplicación forzosa de audibilidad (se requieren sonidos del obturador de la cámara en algunos países) y la sincronización de audio y video de 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 de muestra máximo.

Usa atributos

El uso especifica el contexto en el que se usa la transmisión y proporciona información sobre por qué se reproduce el sonido y para qué se usa. La información de uso es más expresiva que un tipo de transmisión y permite que las plataformas o las políticas de enrutamiento definan mejor las decisiones de volumen o enrutamiento.

Proporciona uno de los siguientes valores de uso para cualquier instancia:

  • USAGE_UNKNOWN
  • USAGE_MEDIA
  • USAGE_VOICE_COMMUNICATION
  • USAGE_VOICE_COMMUNICATION_SIGNALLING
  • USAGE_ALARM
  • USAGE_NOTIFICATION
  • 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
  • USAGE_ASSISTANT

Los valores de uso del atributo de audio son mutuamente excluyentes. Para ver ejemplos, consulta las definiciones de USAGE_MEDIA y USAGE_ALARM. Para ver las excepciones, consulta 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 framework de audio usa información del tipo de contenido para configurar de forma selectiva los bloques de procesamiento posterior de audio. Si bien proporcionar el tipo de contenido es opcional, debes incluir información del tipo siempre que se conozca, 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.

Proporciona 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 de tipo de contenido del atributo de audio son mutuamente excluyentes. Para obtener detalles sobre los tipos de contenido, consulta la API de atributos de audio.

Contextos

Cada sonido en Android se identifica por la aplicación responsable y el motivo para generarlo. El dispositivo Android usa 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 con tipos de transmisión heredados (p.ej., AudioSystem.STREAM_MUSIC) o AudioAttributes. En Android 9, los valores de AudioAttributes.usage se abstraen a nivel de HAL como Contextos.

Contextos de audio de HAL Uso de AudioAttributes
MÚSICA CONTENIDO MULTIMEDIA
VOICE_COMMAND USAGE_ASSISTANT
NAVIGATION ASSISTANCE_NAVIGATION_GUIDANCE
CALL VOICE_COMMUNICATION
RINGTONE NOTIFICATION_RINGTONE
NOTIFICACIÓN NOTIFICACIÓN
ALARMA ALARMA
SYSTEM_SOUND ASSISTANCE_SONIFICATION
DESCONOCIDO DESCONOCIDO

Puedes proporcionar uno de los siguientes valores de CONTEXT_NUMBER para cualquier instancia:

  • MUSIC_CONTEXT // Reproducción de música
  • NAVIGATION_CONTEXT // Instrucciones sobre cómo llegar
  • VOICE_COMMAND_CONTEXT // Sesión de comando por voz
  • CALL_RING_CONTEXT // Sonido de llamada de voz
  • CALL_CONTEXT // Llamada de voz
  • ALARM_CONTEXT // Sonido de alarma de Android
  • NOTIFICATION_CONTEXT // Notifications
  • SYSTEM_SOUND_CONTEXT // Sonidos de interacción del usuario (clics en botones, etc.)

Marcas

Las marcas especifican cómo el framework de audio aplica efectos a la reproducción de audio. Proporciona una o más de las siguientes marcas para una instancia:

  • FLAG_AUDIBILITY_ENFORCED: Solicita al sistema que garantice la audibilidad del sonido. Se usa para abordar las necesidades de STREAM_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 de A/V de hardware.

Las marcas de atributos de audio no son exclusivas y se pueden combinar. Para obtener más detalles sobre estas marcas, consulta la API de atributos de audio.

Ejemplo

En este ejemplo, AudioAttributes.Builder define el AudioAttributes que usará una instancia nueva de 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 usar atributos de audio cuando crean o actualizan aplicaciones para Android 5.0 y versiones posteriores. Sin embargo, las aplicaciones no son obligatorias para aprovechar los atributos; pueden controlar solo los tipos de transmisión heredados o no estar al tanto de los atributos (es decir, un reproductor multimedia genérico que no sabe nada sobre el contenido que reproduce).

En esos casos, el framework mantiene la retrocompatibilidad con dispositivos y versiones de Android más antiguos, ya que traduce automáticamente los tipos de flujo de audio heredados a atributos de audio. Sin embargo, el framework no aplica ni garantiza esta asignación en todos los dispositivos, fabricantes o versiones de Android.

Asignaciones de compatibilidad:

Android 5.0 y versiones posteriores Android 4.4 y versiones 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 transmisiones obsoletos

En Android 9, dejan de estar disponibles los siguientes tipos de transmisión para uso automotriz:

  • STREAM_DEFAULT
  • STREAM_VOICE_CALL
  • STREAM_SYSTEM
  • STREAM_RING
  • STREAM_MUSIC
  • STREAM_ALARM
  • STREAM_NOTIFICATION
  • STREAM_BLUETOOTH_SCO
  • STREAM_SYSTEM_ENFORCED
  • STREAM_DTMF
  • STREAM_TTS
  • STREAM_ACCESSIBILITY

Para obtener más detalles, consulta Audio para vehículos.