Attributs audio

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'ancien STREAM_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 .