Android 13 introduit une méthode standard permettant aux OEM de prendre en charge le son spatial et le suivi de la tête sans nécessiter de personnalisations ni de SDK spécifiques à un fournisseur.
Le son spatial est une technologie utilisée pour créer un champ sonore autour de l'auditeur. Il permet aux utilisateurs de percevoir les canaux et les sons individuels dans des positions différentes de celles des transducteurs de l'appareil audio utilisé pour la lecture. Par exemple, le son spatial permet à l'utilisateur d'écouter une bande-son multicanal avec un casque. Grâce au son spatial, les utilisateurs de casques peuvent percevoir les dialogues devant eux et les effets surround derrière eux, même s'ils ne disposent que de deux transducteurs pour la lecture.
Le suivi de la tête aide l'utilisateur à comprendre la nature de la scène sonore spatialisée simulée autour de sa tête. Cette expérience n'est efficace que lorsque la latence est faible. La latence est mesurée comme le temps entre le moment où l'utilisateur bouge la tête et le moment où il entend la position du haut-parleur virtuel se déplacer en conséquence.
Android 13 optimise le son spatial et le suivi de la tête en proposant un traitement du son spatial au niveau le plus bas possible du pipeline audio afin d'obtenir la latence la plus faible possible.
Architecture
Le framework audio et l'API Android modifiés dans Android 13 facilitent l'adoption de la technologie de son spatial dans l'écosystème.
La figure suivante illustre les modifications apportées à l'architecture du pipeline audio avec Android 13 en lien avec le son spatial :
Figure 1. Architecture du pipeline audio avec spatialiseur
Dans le nouveau modèle, le spatialiseur fait partie du framework audio et est dissocié du décodeur. Le spatialiseur reçoit du contenu audio mixé et génère un flux stéréo pour l'Audio HAL. La dissociation du spatialiseur du décodeur permet aux OEM de choisir différents fournisseurs pour le décodeur et le spatialiseur, et d'atteindre la latence aller-retour souhaitée pour le suivi de la tête. Ce nouveau modèle inclut également des hooks dans le framework de capteurs pour le suivi de la tête.
La figure suivante illustre l'architecture système du framework audio pour le spatialiseur et l'effet de suivi de la tête :
Figure 2. Architecture système avec spatialiseur et suivi de la tête
Toutes les API de son spatial sont regroupées dans la classe publique
Spatializer au niveau de l'application. La SpatializerHelper
classe dans les interfaces de service audio interagit avec les composants de l'UI système pour gérer
les fonctionnalités liées au spatialiseur en fonction de la plate-forme et des capacités de l'appareil connecté. La nouvelle classe Spatializer du service de stratégie audio crée et contrôle le graphique de son spatial
nécessaire au mixage et à la spatialisation multicanaux en fonction des
capacités exprimées par l'OEM,
des appareils connectés et des cas d'utilisation actifs. Une nouvelle classe de mixeur SpatializerThread mixe les pistes multicanaux et transmet le mixage obtenu à un moteur FX de post-traitement
qui génère une sortie stéréo pour l'Audio HAL. Pour le suivi de la tête, la
SpatializerPoseController classe regroupe les fonctions liées au suivi de la tête, à l'
interface avec la pile de capteurs, ainsi qu'à la fusion et au filtrage des signaux de capteur qui sont
transmis au moteur d'effets. Les données du capteur de suivi de la tête sont transmises via le protocole HID
à partir du pilote Bluetooth.
Les modifications apportées à l'architecture du pipeline audio d'Android 13 améliorent les aspects suivants :
- Réduction de la latence entre le spatialiseur et les écouteurs.
- Fourniture d'API unifiées aux développeurs d'applications.
- Contrôle de l'état du suivi de la tête via les API système.
- Détection des capteurs de suivi de la tête et association à des appareils audio actifs.
- Fusion des signaux de différents capteurs et calcul de la pose de la tête qui peut être utilisée par le moteur d'effets du spatialiseur.
Des fonctions telles que la compensation de biais, la détection d'immobilité et la limitation du débit peuvent être implémentées à l'aide de la bibliothèque utilitaire de suivi de la tête.
API de son spatial
Android 13 propose des API système et des API pour les développeurs de son spatial.
Les OEM peuvent adapter le comportement des applications en fonction de la disponibilité et de l'état activé des fonctionnalités, qui sont définis par les API système. Les applications peuvent également configurer des attributs audio pour désactiver le son spatial pour des raisons esthétiques ou pour indiquer que le flux audio est déjà traité pour le son spatial.
Pour les API destinées aux développeurs, consultez Spatializer.
Les OEM peuvent utiliser les API système pour implémenter l'UI des paramètres "Sons" et "Bluetooth", qui permet à l'utilisateur de contrôler l'état du son spatial et de la fonctionnalité de suivi de la tête pour son appareil. L'utilisateur peut activer ou désactiver le son spatial pour le haut-parleur et les écouteurs filaires dans l'UI des paramètres "Sons". Le paramètre de son spatial pour le haut-parleur n'est disponible que si l'implémentation de l'effet de spatialiseur est compatible avec le mode transaural.
L'utilisateur peut également activer ou désactiver le son spatial et le suivi de la tête dans les paramètres de l'appareil Bluetooth pour chaque appareil. Le paramètre de suivi de la tête n'est disponible que si le casque Bluetooth expose un capteur de suivi de la tête.
Les paramètres par défaut du son spatial sont toujours activés si la fonctionnalité est prise en charge. Consultez Spatializer.java
pour obtenir la liste complète des API système.
Le nouveau type de capteur de suivi de la tête Sensor.TYPE_HEAD_TRACKER est ajouté au framework de capteurs et exposé par le Sensor HAL en tant que capteur dynamique via Bluetooth ou USB.
Intégrer le son spatial
En plus d'implémenter le moteur d'effets du spatialiseur, les OEM doivent configurer leur plate-forme pour la prise en charge du son spatial.
Conditions requises
Les conditions suivantes doivent être remplies pour intégrer le son spatial :
- L'Audio HAL et le DSP audio doivent être compatibles avec un chemin de sortie dédié au son spatial.
- Pour le son spatial dynamique avec suivi de la tête, les écouteurs doivent être équipés de capteurs de suivi de la tête intégrés.
- L'implémentation doit être conforme à la norme proposée pour le suivi de la tête via le protocole HID d'un casque Bluetooth à un téléphone.
- L'Audio HAL v7.1 est nécessaire pour la prise en charge du son spatial.
Pour intégrer le son spatial, procédez comme suit :
Déclarez la prise en charge du son spatial dans votre fichier
device.mk, comme suit :PRODUCT_PROPERTY_OVERRIDES += \ ro.audio.spatializer_enabled=trueCela permet à
AudioServiced'initialiser la prise en charge du spatialiseur.Déclarez la sortie dédiée au mixage audio spatial dans
audio_policy_configuration.xml, comme suit :<audioPolicyConfiguration> <modules> <module> <mixPorts> <mixPort name="spatializer" role="source" flags="AUDIO_OUTPUT_FLAG_SPATIALIZER"> <profile name="sa" format="AUDIO_FORMAT_PCM_FLOAT" samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>Déclarez la bibliothèque d'effets du spatialiseur dans
audio_effects.xml, comme suit :<audio_effects_conf> <libraries> <library name="spatializer_lib" path="libMySpatializer.so"/> … </libraries> <effects> <effect name="spatializer" library="spatializer_lib" uuid="myunique-uuid-formy-spatializereffect"/>Les fournisseurs qui implémentent l'effet de spatialiseur doivent respecter les conditions suivantes :
- Configuration et contrôle de base identiques à ceux des autres effets dans l'Effect HAL.
Paramètres spécifiques nécessaires au framework pour découvrir les capacités et la configuration compatibles, tels que :
SPATIALIZER_PARAM_SUPPORTED_LEVELSSPATIALIZER_PARAM_LEVELSPATIALIZER_PARAM_HEADTRACKING_SUPPORTEDSPATIALIZER_PARAM_HEADTRACKING_MODESPATIALIZER_PARAM_SUPPORTED_CHANNEL_MASKSSPATIALIZER_PARAM_SUPPORTED_SPATIALIZATION_MODESSPATIALIZER_PARAM_HEAD_TO_STAGE
Pour en savoir plus, consultez
effect_spatializer.h.
Recommandations
Nous recommandons aux OEM de suivre les consignes suivantes lors de l'implémentation :
- Utilisez l'audio LE lorsque cela est possible pour faciliter l'interopérabilité et atteindre les objectifs de latence.
- La latence aller-retour, de la détection du mouvement du capteur à la réception de l'audio par les écouteurs, doit être inférieure à 150 ms pour une bonne expérience utilisateur.
- Pour le Bluetooth (BT) Classic avec Advanced Audio Distribution Profile (A2DP) :
Validation
Pour valider la fonctionnalité de son spatial, utilisez les tests CTS
disponibles dans SpatializerTest.java.
Une mauvaise implémentation des algorithmes de spatialisation ou de suivi de la tête peut entraîner un échec de la recommandation de latence aller-retour, comme indiqué dans les recommandations.