Configurer les règles audio

La version Android 10 inclut une refactorisation importante de l'audio gestionnaire de règles afin d'offrir plus de flexibilité pour prendre en charge des cas d'utilisation complexes dans le secteur automobile:

  • Stratégies de routage spécifiques aux OEM.
  • Groupes de volumes personnalisables pour des groupes d'anciens types de flux à l'aide des mêmes courbes de volume.
  • Stratégies de routage déclarées par le moteur de règles audio au lieu d'être codées en dur.
  • Courbes et groupes de volume gérés par le moteur de règles audio
  • Refactorisation interne en préparation d'une future division entre le code commun et le code configurable et offre une gestion plus riche des appareils audio. Par exemple, l'utilisation de toutes les propriétés d'appareil, pas seulement son type dans les règles de stratégie.

Android 7.0 a introduit un format de fichier de configuration des règles audio (XML) pour décrivant votre topologie audio.

Les versions précédentes d'Android sont requises avec device/<company>/<device>/audio/audio_policy.conf pour déclarer les appareils audio présents dans votre produit (voir un exemple ce fichier pour le matériel audio Galaxy Nexus dans device/samsung/tuna/audio/audio_policy.conf). Cependant, CONF est un format simple et propriétaire trop limité pour décrire des topologies complexes dans des secteurs tels que les téléviseurs et l'automobile.

Android 7.0 a abandonné audio_policy.conf et est désormais compatible. pour définir une topologie audio à l'aide d'un format de fichier XML lisible par l'humain, dispose de nombreux outils d'édition et d'analyse, et offre une grande flexibilité pour décrire des topologies audio complexes. Android 7.0 utilise le Indicateur de compilation USE_XML_AUDIO_POLICY_CONF pour choisir le fichier XML des fichiers de configuration.

Avantages du format XML

Comme dans le fichier CONF, le fichier XML permet de définir le nombre et les types de profils de flux de sortie et d'entrée, d'appareils utilisables pour la lecture et la capture, et de l'audiodescription. En outre, le format XML offre les améliorations suivantes:

  • Sous Android 10, plusieurs applications d'enregistrement actives simultanément.
    • Le début de l'enregistrement n'est jamais refusé en raison d'une situation de simultanéité.
    • registerAudioRecordingCallback(AudioManager.AudioRecordingCallback cb) d'un rappel informe les clients des modifications du chemin de capture.
  • Dans les situations suivantes, un client reçoit des échantillons audio silencieux: <ph type="x-smartling-placeholder">
      </ph>
    • Un cas d'utilisation sensible à la confidentialité (par exemple, VOICE_COMMUNICATION) est actif.
    • Le client ne dispose pas d'un service ni d'une UI de premier plan.
    • Les rôles spéciaux sont reconnus par le règlement: <ph type="x-smartling-placeholder">
        </ph>
      • Service d'accessibilité: peut enregistrer même si un cas d'utilisation sensible à la confidentialité est actif.
      • Assistant: considéré comme sensible à la confidentialité si l'interface utilisateur est en haut.
  • Les profils audio ont une structure similaire à celle des descripteurs audio simples HDMI, ce qui permet une autre un ensemble de taux d'échantillonnage/masques de canal pour chaque format audio.
  • Il existe des définitions explicites pour toutes les connexions possibles entre les appareils et les flux. Auparavant, une règle implicite permettait de connecter tous les appareils connectés au même HAL. , ce qui empêche la règle audio de contrôler les connexions demandées avec le correctif audio. API. Au format XML, la description de la topologie définit les limites de connexion.
  • La prise en charge de include évite de répéter les appels standards A2DP ou USB, ou de réacheminer l'envoi. et définitions.
  • Les courbes de volume sont personnalisables. Auparavant, les tableaux de volumes étaient codés en dur. Dans le fichier XML les tableaux de volumes sont décrits et personnalisables.

Le modèle disponible sur frameworks/av/services/audiopolicy/config/audio_policy_configuration.xml montre qu'un grand nombre de ces fonctionnalités sont utilisées.

Format et emplacement du fichier

Le nouveau fichier de configuration des règles audio est audio_policy_configuration.xml et se trouve dans /system/etc Les exemples suivants illustrent une configuration simple de règle audio dans le Format de fichier XML pour Android 12 et pour les versions ci-dessous Android 12.

La structure de premier niveau contient des modules qui correspondent à chaque HAL audio. module matériel, où chaque module a une liste de ports mixtes, de ports d'appareil et routes:

  • Les ports de combinaison décrivent les profils de configuration possibles pour les flux. qui peut être ouvert au niveau de l'HAL audio pour la lecture et l'enregistrement.
  • Les ports d'appareils décrivent les appareils avec lesquels vous pouvez les connecter. leur type (et éventuellement les propriétés audio et d'adresse, le cas échéant).
  • Les routes sont séparées du descripteur de port de combinaison. la description des routes d'un appareil à un autre ou d'un flux à un autre.

Les tableaux de volumes sont de simples listes de points définissant la courbe utilisée pour traduire d'un index d'interface utilisateur à un volume en dB. Un fichier d'inclusion distinct fournit courbes, mais chaque courbe pour un cas d'utilisation et une catégorie d'appareils donnés remplacé.

Inclusions de fichiers

La méthode d'inclusions XML (XInclude) peut être utilisée pour inclure une règle audio. des informations de configuration situées dans d'autres fichiers XML. Tous les fichiers inclus doivent respectez la structure décrite ci-dessus, avec les restrictions suivantes:

  • Les fichiers ne peuvent contenir que des éléments de niveau supérieur.
  • Les fichiers ne peuvent pas contenir d'éléments XInclude.

L'utilisation d'inclusions permet d'éviter de copier un projet Android Open Source (AOSP) standard. Informations de configuration du module HAL audio vers toutes les configurations de règles audio (ce qui est sujet à des erreurs). Fichier XML de configuration des règles audio standard est fournie pour les HAL audio suivantes:

  • A2DP:a2dp_audio_policy_configuration.xml
  • Reroutage du sous-mix: rsubmix_audio_policy_configuration.xml
  • USB:usb_audio_policy_configuration.xml

Organisation du code des règles audio

AudioPolicyManager.cpp est divisé en plusieurs modules pour faciliter sa gestion et sa configuration. L'organisation de frameworks/av/services/audiopolicy inclut les dans les modules suivants.

Module Description
/managerdefault Inclut les interfaces génériques et l'implémentation du comportement commune à tous applications. Semblable à AudioPolicyManager.cpp avec moteur les fonctionnalités et les concepts courants.
/common Définit les classes de base (par exemple, les structures de données pour le flux audio d'entrée/sortie) les descripteurs d'appareil audio, les correctifs audio et les ports audio). C'était auparavant défini dans AudioPolicyManager.cpp.
/engine

Elle implémente les règles qui définissent l'appareil et les volumes à utiliser. pour un cas d'utilisation donné. Il implémente une interface standard avec la partie générique, telle que comment obtenir l'appareil approprié pour un cas d'utilisation donné de lecture ou de capture, ou définir des appareils connectés ou un état externe (c'est-à-dire un état d'appel d'utilisation forcée) qui peut modifier la décision de routage.

Disponible en deux versions: configurable et default. Pour savoir comment sélectionner la version, consultez Configuration à l'aide de Parameter Framework

/engineconfigurable Implémentation de Policy Engine qui s'appuie sur Parameter Framework (voir ci-dessous) La configuration est basée sur le framework de paramètres et sur l'emplacement de la règle définies par des fichiers XML.
/enginedefault Implémentation du moteur de règles basée sur l'ancienne version du gestionnaire de règles audio d'Android mises en œuvre. Il s'agit du comportement par défaut, qui inclut les règles codées en dur correspondent aux implémentations Nexus et AOSP.
/service Inclut les interfaces de liaison, le thread et l'implémentation du verrouillage avec l'interface au reste du framework.

Configuration à l'aide de Parameter Framework

Le code des règles audio est organisé de façon à être facile à comprendre tout en prenant en charge une règle audio entièrement définie par la configuration. . La conception des règles d'administration et audio est basée sur les paramètres d'Intel Framework : un framework basé sur des plug-ins et des règles pour la gestion des paramètres.

Grâce à la règle audio configurable, les OEM des fournisseurs peuvent:

  • Décrire la structure d'un système et ses paramètres au format XML
  • Écrire (en C++) ou réutiliser un backend (plug-in) pour accéder aux ressources paramètres.
  • Définir (au format XML ou dans un langage spécifique au domaine) les conditions/règles sur lesquelles un paramètre donné doit accepter une valeur donnée.

AOSP inclut un exemple de fichier de configuration de règle audio qui utilise le paramètre Framework sur Frameworks/av/services/audiopolicy/engineconfigurable/parameter-framework/example/Settings/PolicyConfigurableDomains.xml. Pour consultez la documentation Intel sur la Framework de paramètres.

Sous Android 10 ou version antérieure, la règle audio configurable est sélectionné à l'aide de l'option de compilation USE_CONFIGURABLE_AUDIO_POLICY. Sur Android 11 ou version ultérieure, la version de la règle audio est sélectionné dans le fichier audio_policy_configuration.xml. Pour sélectionner le moteur de règles audio configurables, définissez la valeur de engine_library l'attribut de l'élément globalConfiguration sur configurable comme dans l'exemple suivant:

<audioPolicyConfiguration>
    <globalConfiguration engine_library="configurable" />
...
</audioPolicyConfiguration>

API de routage des règles audio

Android 6.0 a introduit une API publique Enumeration and Selection qui repose sur de l'infrastructure patch/port audio audio et permet à l'application aux développeurs d'indiquer leur préférence pour une sortie ou une entrée spécifique des enregistrements audio ou des pistes connectés.

Dans Android 7.0, l'API Enumeration and Selection est vérifiée par des tests CTS et s'étend pour inclure le routage des flux audio C/C++ (OpenSL ES) natifs. Le routage des flux natifs se fait toujours en Java, avec l'ajout Une interface AudioRouting qui remplace, combine et abandonne les méthodes de routage explicites spécifiques à AudioTrack et AudioRecord de classes.

Pour en savoir plus sur l'API Enumeration and Selection, consultez Sur Android interfaces de configuration et OpenSLES_AndroidConfiguration.h. Pour en savoir plus sur le routage audio, consultez Routage audio :

Assistance multicanal

Si votre matériel et votre pilote sont compatibles avec l'audio multicanal via HDMI, vous pouvez envoyer le flux audio directement vers le matériel audio (cela permet de contourner une table de mixage AudioFlinger afin qu'elle ne soit pas rétrogradée sur deux canaux.) Le HAL audio doit indiquer si un profil de flux de sortie est compatible avec l'audio multicanal des fonctionnalités. Si le HAL présente ses capacités, le gestionnaire de règles par défaut permet une lecture multicanal sur HDMI. Pour en savoir plus sur l'implémentation, consultez device/samsung/tuna/audio/audio_hw.c

Pour indiquer que votre produit contient une sortie audio multicanal, modifiez le paramètre fichier de configuration de la règle audio pour décrire la sortie multicanale produit. L'exemple suivant, frameworks/av/services/audiopolicy/config/primary_audio_policy_configuration_tv.xml affiche un masque de canal dynamique, ce qui signifie que le gestionnaire de règles audio interroge le canal. pris en charge par le récepteur HDMI après la connexion.

Vous pouvez également spécifier un masque de canal statique tel que AUDIO_CHANNEL_OUT_5POINT1 Le mélangeur d'AudioFlinger réduit le volume automatiquement le contenu en stéréo lorsqu'il est envoyé à un appareil audio est compatible avec l'audio multicanal.

Codecs multimédias

Assurez-vous que les codecs audio pris en charge par votre matériel et vos pilotes sont corrects. déclaré pour votre produit. Pour en savoir plus, consultez Exposer les codecs Google Cloud.