Son spatial et suivi de la tête

Android 13 introduit une méthode standard permettant aux OEM de prendre en charge l'audio spatial et le suivi de la tête sans avoir besoin de personnalisations ni de SDK spécifiques aux fournisseurs.

L'audio spatial est une technologie utilisée pour créer un champ sonore autour de l'auditeur. L'audio spatial 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 multicanaux 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, alors qu'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 qui s'écoule 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 spatialisé et le suivi de la tête en proposant un traitement du son spatialisé au niveau le plus bas possible du pipeline audio pour 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 audio spatial dans l'écosystème.

La figure suivante illustre les modifications apportées à l'architecture du pipeline audio avec Android 13 en lien avec l'audio spatial :

spatial-audio

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 la couche HAL audio. Le découplage du spatialiseur et 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 hooks vers le 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 :

spatial-sys-arch

Figure 2. Architecture du système avec spatialiseur et suivi de la tête

Toutes les API audio spatial sont regroupées dans la classe publique Spatializer au niveau de l'application. La classe SpatializerHelper 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 des capacité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 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 mélange les pistes multicanaux et transmet le mix obtenu à un moteur d'effets de post-traitement qui génère une sortie stéréo pour 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, 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 éléments suivants :

  • Réduction de la latence entre le spatialiseur et les écouteurs.
  • Fournir des API unifiées aux développeurs d'applications.
  • Contrôler l'état du suivi de la tête à l'aide des API système.
  • Découverte des capteurs de suivi de la tête et association avec les appareils audio actifs.
  • Fusionner les signaux de différents capteurs et calculer la pose de la tête qui peut être consommée par le moteur d'effets spatialiseur.

Des fonctions telles que la compensation du biais, la détection de l'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 audio spatial

Android 13 propose un système audio spatial et des API pour les développeurs.

Les OEM peuvent adapter le comportement des applications en fonction de la disponibilité et de l'état d'activation 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", 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 le haut-parleur et les écouteurs filaires dans l'interface utilisateur des paramètres audio. Le paramètre audio spatial pour le haut-parleur n'est disponible que si l'implémentation de l'effet spatialiseur prend en charge 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 des mouvements de la tête n'est disponible que si le casque Bluetooth expose un capteur de suivi des mouvements de la tête.

Les paramètres par défaut du son 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 Sensor et exposé par le HAL Sensor en tant que capteur dynamique via Bluetooth ou USB.

Intégrer le son spatial

En plus d'implémenter le moteur d'effets spatialiseur, les OEM doivent configurer leur plate-forme pour la prise en charge du son spatial.

Conditions requises

Pour intégrer le son spatial, vous devez remplir les conditions suivantes :

  • Le HAL audio et le DSP audio doivent être compatibles avec un chemin de sortie dédié pour l'audio 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 sur le protocole HID d'un casque Bluetooth à un téléphone.
  • Audio HAL v7.1 est nécessaire pour la prise en charge du son spatial.

Pour intégrer l'audio spatial, procédez comme suit :

  1. Déclarez la prise en charge de l'audio spatial dans votre fichier device.mk, comme suit :

    PRODUCT_PROPERTY_OVERRIDES += \
         ro.audio.spatializer_enabled=true
    

    Cela permet à AudioService d'initialiser la prise en charge du spatialiseur.

  2. 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"/>
    
  3. 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"/>
    
  4. Les fournisseurs qui implémentent l'effet de spatialisation doivent respecter les consignes 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 cela est possible pour faciliter l'interopérabilité et atteindre les objectifs de latence.
  • Pour une bonne expérience utilisateur, 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 le Bluetooth (BT) classique avec profil de distribution audio avancé (A2DP) :
    • Utilisez un codec à faible latence, tel que Opus.
    • Implémentez les fonctions de contrôle de la latence au niveau de l'HAL audio. Cela permet d'optimiser la puissance 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é 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 listée dans les Recommandations.