Android 13 propose aux OEM une méthode standard pour prendre en charge l'audio spatial et le suivi de la tête sans avoir besoin de personnalisations ni de SDK spécifiques au fournisseur.
L'audio spatial est une technologie utilisée pour créer un champ sonore entourant l'auditeur. L'audio spatial permet aux utilisateurs de percevoir des canaux et des sons individuels dans des positions qui diffèrent des positions physiques 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 à l'audio 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, où la latence est mesurée comme le temps écoulé entre le moment où l'utilisateur bouge la tête et le moment où il entend la position de l'enceinte virtuelle bouger en conséquence.
Android 13 optimise l'audio spatial et le suivi de la tête en proposant un traitement audio spatial au niveau le plus bas possible dans le pipeline audio afin d'obtenir la latence la plus faible possible.
Architecture
Le framework et l'API audio Android modifiés dans Android 13 facilitent l'adoption de la technologie audio spatiale dans l'ensemble de l'écosystème.
La figure suivante illustre les modifications apportées à l'architecture du pipeline audio avec Android 13 en ce qui concerne l'audio spatial:
Figure 1 : Architecture du pipeline audio avec spatialisateur
Dans le nouveau modèle, le spatialisateur fait partie du framework audio et est dissocié du décodeur. Le spatialisateur reçoit du contenu audio mélangé et génère un flux stéréo pour le HAL audio. Le découplage du spatialiseur du décodeur permet aux OEM de choisir différents fournisseurs pour le décodeur et le spatialiseur, et d'obtenir la latence aller-retour souhaitée pour le suivi de la tête. Ce nouveau modèle inclut également des crochets au framework de capteurs pour le suivi de la tête.
La figure suivante illustre l'architecture système du framework audio pour l'effet de spatialisation et de suivi de la tête:
Figure 2. Architecture du système avec spatialiseur et suivi de la tête
Toutes les API audio spatiales sont regroupées dans la classe publique Spatializer
au niveau de l'application. La classe SpatializerHelper
du service audio s'interface avec les composants de l'UI système pour gérer les fonctionnalités liées au spatialiseur en fonction des fonctionnalités de la plate-forme et de l'appareil connecté. La nouvelle classe Spatializer
du service de règles audio crée et contrôle le graphique audio spatial nécessaire pour le mixage multicanal et la spatialisation en fonction des fonctionnalités exprimées par l'OEM, des appareils connectés et des cas d'utilisation actifs. Une nouvelle classe de mélangeur SpatializerThread
mélange les pistes multicanaux et alimente le mixage obtenu dans un moteur d'effets de post-traitement qui génère une sortie stéréo sur l'HAL audio. Pour le suivi de la tête, la classe SpatializerPoseController
regroupe les fonctions liées au suivi de la tête, à l'interface avec la pile de capteurs et à la fusion et au filtrage des signaux des capteurs fournis 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 éléments suivants:
- Réduction de la latence entre le spatialisateur et les écouteurs.
- Fournir des API unifiées pour les développeurs d'applications
- Contrôler l'état du suivi de la tête via les API système.
- Détecter les capteurs de suivi de la tête et les associer aux appareils audio actifs.
- Fusion des signaux de divers capteurs et calcul de la position de la tête pouvant être consommée par le moteur d'effet spatialisateur.
Des fonctions telles que la compensation des biais, la détection d'immobilité et la limitation de la fréquence d'échantillonnage peuvent être implémentées à l'aide de la bibliothèque d'utilitaires de suivi de la tête.
API de son spatial
Android 13 propose un système audio spatial et des API pour les développeurs.
Les OEM peuvent adapter le comportement de l'application en fonction de la disponibilité des fonctionnalités et de leur état activé, qui est défini 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 en savoir plus sur les API destinées aux développeurs, consultez Spatializer
.
Les OEM peuvent utiliser des API système pour implémenter l'UI des paramètres "Sons" et "Bluetooth", ce qui permet à l'utilisateur de contrôler l'état de l'audio 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 l'enceinte et le casque filaire dans l'interface utilisateur des paramètres "Sons". Le paramètre audio spatial pour l'enceinte n'est disponible que si l'implémentation de l'effet spatialisateur 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 de l'audio spatial sont toujours activés si la fonctionnalité est prise en charge. Pour obtenir la liste complète des API système, consultez Spatializer.java
.
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 HAL de capteur en tant que capteur dynamique via Bluetooth ou USB.
Intégrer le son spatial
En plus d'implémenter le moteur d'effet spatialisateur, les OEM doivent configurer leur plate-forme pour la prise en charge de l'audio spatial.
Conditions requises
Pour intégrer le son spatial, vous devez remplir les conditions suivantes:
- L'HAL audio et le DSP audio doivent prendre en charge un chemin de sortie dédié pour le son spatial.
- Pour le son spatial dynamique avec suivi de la tête, les casques doivent être équipés de capteurs de suivi de la tête intégrés.
- L'implémentation doit respecter la norme proposée pour le suivi de la tête via le protocole HID d'un casque Bluetooth vers un téléphone.
- La version 7.1 de l'HAL audio est nécessaire pour la prise en charge du son spatial.
Pour intégrer l'audio 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=true
AudioService
initialise alors la prise en charge du spatialiseur.Déclarez une sortie dédiée pour le mixage audio spatial dans le
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 de spatialisation 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 spatialisateur doivent respecter les conditions suivantes:
- Configuration et contrôle de base identiques aux autres effets dans Effect HAL.
Paramètres spécifiques nécessaires au framework pour découvrir les fonctionnalités et la configuration compatibles, par exemple:
SPATIALIZER_PARAM_SUPPORTED_LEVELS
SPATIALIZER_PARAM_LEVEL
SPATIALIZER_PARAM_HEADTRACKING_SUPPORTED
SPATIALIZER_PARAM_HEADTRACKING_MODE
SPATIALIZER_PARAM_SUPPORTED_CHANNEL_MASKS
SPATIALIZER_PARAM_SUPPORTED_SPATIALIZATION_MODES
SPATIALIZER_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 disponible pour faciliter l'interopérabilité et atteindre les objectifs de latence.
- La latence aller-retour, de la détection de mouvement du capteur à l'audio reçu par les écouteurs, doit être inférieure à 150 ms pour une expérience utilisateur optimale.
- Pour le Bluetooth (BT) classique avec le profil de distribution audio avancé (A2DP) :
- Utilisez un codec à faible latence, tel que Opus.
- Implémentez des fonctions de contrôle de la latence au niveau du HAL audio. Cela permet d'optimiser la consommation d'énergie et les performances lorsque le suivi de la tête est désactivé, et de désactiver le suivi de la tête dans des conditions non optimales.
Validation
Pour valider le fonctionnement de la fonctionnalité d'audio 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 non-respect de la recommandation de latence aller-retour indiquée dans les recommandations.