Attributs audio

Les lecteurs audio acceptent des attributs qui définissent la façon dont le système audio gère le routage, le volume et les décisions de mise au point pour la source spécifiée. Les applications peuvent associer des attributs à une lecture audio (par exemple, de la musique diffusé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 informer les applications de l'état du système.

Sous Android 4.4 et versions antérieures, le framework prenait des décisions de mixage en utilisant uniquement le type de flux audio. Cependant, fonder ces décisions sur le type de flux était trop limitatif pour produire un résultat de qualité sur plusieurs applications et appareils. Par exemple, sur un appareil mobile, certaines applications (Google Maps, par exemple) diffusaient des itinéraires sur le type de flux STREAM_MUSIC. Toutefois, sur les appareils mobiles en mode projection (Android Auto, par exemple), les applications ne peuvent pas mélanger les itinéraires 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 lue), le type de contenu (ce que la source lit), les indicateurs (comment la source doit être lue) et les contextes (nouveauté d'Android 9). Syntaxe:

AudioAttributes {
    mUsage
    mContentType
    mSource
    mFlags
    mTags / mFormattedTags / mBundle    (key value pairs)
}
  • Utilisation. Indique pourquoi la source est lue et contrôle les décisions de routage, de mise au point et de volume.
  • Type de contenu Indique ce que la source diffuse (musique, film, voix, sonification, inconnu).
  • Contexte. Valeurs d'utilisation abstraites vers le HAL Audio.
  • Options Spécifie comment la source doit être lue. Inclut la prise en charge de l'application de la visibilité (son de l'obturateur de l'appareil photo requis dans certains pays) et de la synchronisation audio/vidéo matérielle.

Pour le traitement des dynamiques, les applications doivent faire la distinction entre les contenus de films, de musique et de voix. Les informations sur les données elles-mêmes peuvent également être importantes, comme le volume et la valeur d'échantillon de pointe.

Utiliser 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 diffusé et à quoi il sert. Les informations d'utilisation sont plus expressives qu'un type de flux et permettent aux plates-formes ou aux règles de routage d'affiner les décisions de volume ou de routage.

Indiquez l'une des valeurs d'utilisation suivantes pour chaque 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 de l'attribut audio sont mutuellement exclusives. Pour obtenir des exemples, consultez les définitions de USAGE_MEDIA et USAGE_ALARM. Pour les exceptions, consultez la définition de 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 voix ou un bip/une sonnerie. Le framework audio utilise des informations sur le type de contenu pour configurer de manière sélective les blocs de post-traitement audio. Bien que l'indication du type de contenu soit facultative, vous devez inclure des informations sur le type de contenu chaque fois qu'il 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 chaque 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 de l'attribut audio sont mutuellement exclusives. Pour en savoir plus sur les types de contenus, consultez l'API des attributs audio.

Contextes

Chaque son dans Android est identifié par l'application responsable et la raison de la génération du son. L'appareil Android utilise ces informations pour déterminer comment présenter le son. Sous Android 8.x ou version antérieure, les applications peuvent indiquer la raison de la génération du son à l'aide d'anciens types de flux (par exemple, AudioSystem.STREAM_MUSIC) ou AudioAttributes. Dans Android 9, les valeurs AudioAttributes.usage sont abstraites au niveau du HAL en tant que Contextes.

Contextes audio HAL Utilisation d'AudioAttributes
MUSIQUE CONTENU MULTIMÉDIA
VOICE_COMMAND USAGE_ASSISTANT
NAVIGATION ASSISTANCE_NAVIGATION_GUIDANCE
APPELER COMMUNICATION_VOCALE
RINGTONE NOTIFICATION_RINGTONE
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'un appel vocal
  • CALL_CONTEXT // Appel vocal
  • ALARM_CONTEXT // Son de l'alarme depuis Android
  • NOTIFICATION_CONTEXT // Notifications
  • SYSTEM_SOUND_CONTEXT // Sons d'interaction utilisateur (clics de bouton, etc.)

Drapeaux

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

  • FLAG_AUDIBILITY_ENFORCED. Demande au système de s'assurer que le son est audible. À utiliser pour répondre aux besoins des anciennes STREAM_SYSTEM_ENFORCED (par exemple, pour forcer les sons de l'obturateur de l'appareil photo).
  • HW_AV_SYNC : demande au système de sélectionner un flux de sortie compatible avec la synchronisation A/V matérielle.

Les indicateurs d'attribut audio ne sont pas exclusifs et peuvent être combinés. Pour en savoir plus sur ces indicateurs, consultez l'API des attributs audio.

Exemple

Dans cet exemple, AudioAttributes.Builder définit le 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 lorsqu'ils créent ou mettent à jour des applications pour Android 5.0 ou version ultérieure. Toutefois, les applications ne sont pas tenues d'utiliser les attributs. Elles ne peuvent gérer que les anciens types de flux ou ignorer les attributs (par exemple, un lecteur multimédia générique qui ne sait rien du contenu qu'il lit).

Dans ce cas, le framework assure la rétrocompatibilité avec les appareils plus anciens et les versions d'Android en traduisant automatiquement les anciens types de flux audio en attributs audio. Toutefois, le framework n'applique ni ne garantit ce mappage entre les appareils, les fabricants ni les versions d'Android.

Mappages de compatibilité:

Android 5.0 ou version ultérieure 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 abandonne 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 en savoir plus, consultez la section Audio automobile.