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'ancienSTREAM_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 .