Les lecteurs audio prennent en charge les attributs qui définissent la façon 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 pour 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 restrictif pour produire une sortie de qualité sur plusieurs applications et appareils. Par exemple, sur un appareil mobile, certaines applications (par exemple, Google Maps) lisaient les 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, y compris l'utilisation (pourquoi la source est en cours de lecture), le type de contenu (ce que la source est en train de lire), les drapeaux (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, discours, sonification, inconnu).
- Contexte . Valeurs d'utilisation extraites de la couche HAL audio.
- Drapeaux . Spécifie comment la source doit être lue. Inclut la prise en charge de l'application de l'audibilité (sons de l'obturateur de l'appareil photo requis dans certains pays) et de la synchronisation audio/vidéo matérielle.
Pour le traitement dynamique, les applications doivent faire la distinction entre le film, la musique et le contenu vocal. Les informations sur les données elles-mêmes peuvent également être importantes, telles que l'intensité et la valeur d'échantillonnage de crête.
Utilisation des attributs
L'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 il sert. 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
- 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
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, un discours ou un bip/sonnerie. La structure audio utilise des informations de type de contenu pour configurer de manière sélective des blocs de post-traitement audio. Bien que la fourniture du type de contenu soit facultative, vous devez inclure des informations de type chaque fois que le type de contenu est connu, par exemple en utilisant CONTENT_TYPE_MOVIE
pour un service de diffusion 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 de 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 de la génération du son ; et l'appareil Android utilise ces informations pour déterminer comment présenter le son. Dans 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 |
APPELER | COMMUNICATION_VOCALE |
SONNERIE | SONNERIE DE NOTIFICATION |
NOTIFICATION | NOTIFICATION |
ALARME | ALARME |
SYSTEM_SOUND | ASSISTANCE_SONIFICATION |
INCONNUE | INCONNUE |
Vous pouvez fournir l'une des valeurs CONTEXT_NUMBER
suivantes pour n'importe quelle instance :
- MUSIC_CONTEXT // Lecture de musique
- NAVIGATION_CONTEXT // Itinéraire 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 d'Android
- NOTIFICATION_CONTEXT // Notifications
- SYSTEM_SOUND_CONTEXT // Sons d'interaction de l'utilisateur (clics de bouton, etc.)
Drapeaux
Les drapeaux spécifient comment le cadre audio applique des effets à la lecture audio. Fournissez un ou plusieurs des indicateurs suivants pour une instance :
-
FLAG_AUDIBILITY_ENFORCED
. Demande au système d'assurer l'audibilité du son. À utiliser pour répondre aux besoins de l'ancienSTREAM_SYSTEM_ENFORCED
(comme forcer les 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 drapeaux d'attributs audio ne sont pas exclusifs et peuvent être combinés. Pour plus de détails sur ces drapeaux, 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 hérités ou ne pas connaître 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 rétrocompatibilité avec les anciens appareils et les versions d'Android en traduisant automatiquement les types de flux audio hérités en attributs audio. Cependant, le cadre 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 déconseille 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_ACCESSIBILITY
Pour plus de détails, voir Audio automobile .