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.
- Un cas d'utilisation sensible à la confidentialité (par exemple,
- 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.