Attributs audio

Les lecteurs audio prennent en charge les attributs qui définissent la manière dont le système audio gère les décisions de routage, de volume et de mise au point pour la source spécifiée. Les applications peuvent attacher des attributs à une lecture audio (comme la musique jouée par un service de streaming ou une notification pour un nouvel e-mail), puis transmettre les attributs de la source audio au framework, où le système audio utilise les attributs pour prendre des décisions de mixage et notifier les applications. sur l'état du système.

Dans Android 4.4 et versions antérieures, le framework prenait des décisions de mixage en utilisant uniquement le type de flux audio. Cependant, baser ces décisions sur le type de flux était trop limitatif pour produire une sortie de qualité sur plusieurs applications et appareils. Par exemple, sur un appareil mobile, certaines applications (par exemple Google Maps) diffusaient des itinéraires routiers sur le type de flux STREAM_MUSIC ; cependant, sur les appareils mobiles en mode projection (c'est-à-dire Android Auto), les applications ne peuvent pas mélanger les itinéraires routiers avec d'autres flux multimédias.

À l'aide de l' API Audio Attribute , les applications fournissent au système audio des informations détaillées sur une source audio spécifique, notamment son utilisation (pourquoi la source est lue), le type de contenu (ce que la source lit), les indicateurs (comment la source doit être lue), et contextes (nouveau dans Android 9). Syntaxe:

AudioAttributes {
    mUsage
    mContentType
    mSource
    mFlags
    mTags / mFormattedTags / mBundle    (key value pairs)
}
  • Utilisation . Spécifie pourquoi la source est en cours de lecture et contrôle les décisions de routage, de mise au point et de volume.
  • Type de contenu . Spécifie ce que la source joue (musique, film, parole, sonification, inconnu).
  • Contexte . Valeurs d'utilisation extraites du HAL audio.
  • Drapeaux . Spécifie comment la source doit être lue. Inclut la prise en charge du contrôle de l'audibilité (sons de l'obturateur de la caméra requis dans certains pays) et de la synchronisation matérielle audio/vidéo.

Pour le traitement dynamique, les applications doivent faire la distinction entre le contenu vidéo, musical et vocal. Les informations sur les données elles-mêmes peuvent également être importantes, telles que le volume sonore et la valeur maximale de l'échantillon.

Utiliser des attributs

Utilisation spécifie le contexte dans lequel le flux est utilisé, fournissant des informations sur la raison pour laquelle le son est lu et à quoi sert le son. Les informations d'utilisation sont plus expressives qu'un type de flux et permettent aux plates-formes ou aux politiques de routage d'affiner les décisions de volume ou de routage.

Fournissez l'une des valeurs d'utilisation suivantes pour n'importe quelle instance :

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

Les valeurs d'utilisation des attributs audio s'excluent mutuellement. Pour des exemples, reportez-vous aux définitions USAGE_MEDIA et USAGE_ALARM ; pour les exceptions, reportez-vous à la définition AudioAttributes.Builder .

Type de contenu

Le type de contenu définit le son et exprime la catégorie générale du contenu, comme un film, une parole ou un bip/sonnerie. La structure audio utilise des informations sur le type de contenu pour configurer de manière sélective les blocs de post-traitement audio. Bien que la fourniture du type de contenu soit facultative, vous devez inclure des informations sur le type chaque fois que le type de contenu est connu, par exemple en utilisant CONTENT_TYPE_MOVIE pour un service de streaming de films ou CONTENT_TYPE_MUSIC pour une application de lecture de musique.

Fournissez l'une des valeurs de type de contenu suivantes pour n'importe quelle instance :

  • CONTENT_TYPE_UNKNOWN (par défaut)
  • CONTENT_TYPE_MOVIE
  • CONTENT_TYPE_MUSIC
  • CONTENT_TYPE_SONIFICATION
  • CONTENT_TYPE_SPEECH

Les valeurs du type de contenu d’attribut audio s’excluent mutuellement. Pour plus de détails sur les types de contenu, reportez-vous à l' API d'attribut audio .

Contextes

Chaque son dans Android est identifié par l'application responsable et la raison pour laquelle il a été généré ; et l'appareil Android utilise ces informations pour déterminer comment présenter le son. Sous Android 8.x et versions antérieures, les applications peuvent signaler la raison de la génération du son à l'aide de types de flux hérités (par exemple AudioSystem.STREAM_MUSIC ) ou AudioAttributes . Dans Android 9, les valeurs AudioAttributes.usage sont abstraites au niveau HAL en tant que Contexts .

Contextes audio HAL Utilisation des attributs audio
MUSIQUE MÉDIAS
COMMANDE VOCALE USAGE_ASSISTANT
LA NAVIGATION ASSISTANCE_NAVIGATION_GUIDANCE
APPEL COMMUNICATION_VOICE
SONNERIE SONNERIE DE NOTIFICATION
NOTIFICATION NOTIFICATION
ALARME ALARME
SYSTÈME_SOUND ASSISTANCE_SONIFICATION
INCONNU INCONNU

Vous pouvez fournir l'une des valeurs CONTEXT_NUMBER suivantes pour n'importe quelle instance :

  • MUSIC_CONTEXT // Lecture de musique
  • NAVIGATION_CONTEXT // Itinéraires de navigation
  • VOICE_COMMAND_CONTEXT // Session de commande vocale
  • CALL_RING_CONTEXT // Sonnerie d'appel vocal
  • CALL_CONTEXT // Appel vocal
  • ALARM_CONTEXT // Son d'alarme depuis Android
  • NOTIFICATION_CONTEXT //Notifications
  • SYSTEM_SOUND_CONTEXT // Sons d'interaction utilisateur (clics de boutons, etc.)

Drapeaux

Les indicateurs spécifient comment le framework audio applique les effets à la lecture audio. Fournissez un ou plusieurs des indicateurs suivants pour une instance :

  • FLAG_AUDIBILITY_ENFORCED . Demande au système de garantir l’audibilité du son. À utiliser pour répondre aux besoins de l'ancien STREAM_SYSTEM_ENFORCED (tels que le forçage des sons de l'obturateur de la caméra).
  • HW_AV_SYNC . Demande au système de sélectionner un flux de sortie prenant en charge la synchronisation matérielle A/V.

Les indicateurs d’attributs audio ne sont pas exclusifs et peuvent être combinés. Pour plus de détails sur ces indicateurs, reportez-vous à l' API de l'attribut audio .

Exemple

Dans cet exemple, AudioAttributes.Builder définit les AudioAttributes à utiliser par une nouvelle instance AudioTrack :

AudioTrack myTrack = new AudioTrack(
  new AudioAttributes.Builder()
 .setUsage(AudioAttributes.USAGE_MEDIA)
    .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
    .build(),
  myFormat, myBuffSize, AudioTrack.MODE_STREAM, mySession);

Compatibilité

Les développeurs d'applications doivent utiliser des attributs audio lors de la création ou de la mise à jour d'applications pour Android 5.0 et versions ultérieures. Cependant, les applications ne sont pas tenues de tirer parti des attributs ; ils peuvent gérer uniquement les types de flux existants ou ignorer les attributs (c'est-à-dire un lecteur multimédia générique qui ne sait rien du contenu qu'il lit).

Dans de tels cas, le framework maintient la compatibilité ascendante avec les anciens appareils et les versions Android en traduisant automatiquement les types de flux audio existants en attributs audio. Cependant, le framework n'applique ni ne garantit ce mappage entre les appareils, les fabricants ou les versions d'Android.

Mappages de compatibilité :

Android 5.0 et supérieur Android 4.4 et versions antérieures
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

Types de flux obsolètes

Android 9 rend obsolètes les types de flux suivants pour une utilisation automobile :

  • 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_ACCESSIBILITÉ

Pour plus de détails, voir Audio automobile .