Audio spatial et suivi de la tête

Android 13 introduit un moyen standard permettant aux OEM de prendre en charge l'audio spatial et le suivi de la tête sans avoir besoin de personnalisations ou 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 les canaux et les sons individuels dans des positions différentes des positions physiques des transducteurs de l'appareil audio utilisé pour la lecture. Par exemple, l’audio spatial offre à l’utilisateur la possibilité d’écouter une bande sonore multicanal avec des écouteurs. 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, la latence étant 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 bouger en conséquence.

Android 13 optimise l'audio spatial et le suivi de la tête en offrant un traitement audio spatial au niveau le plus bas possible dans le pipeline audio pour obtenir la latence la plus faible possible.

Architecture

Le cadre audio Android modifié et l'API dans Android 13 facilitent l'adoption de la technologie audio spatiale dans l'ensemble de l'écosystème.

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

spatial-audio

Figure 1. Architecture de pipeline audio avec spatialiseur

Dans le nouveau modèle, le spatialiseur fait partie du cadre audio et est découplé du décodeur. Le spatialiseur prend en charge le contenu audio mixte et restitue un flux stéréo vers l'Audio HAL. 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 comprend également des crochets au cadre du capteur 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 tête :

spatial-sys-arch

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'interface utilisateur système pour gérer les fonctionnalités liées au spatialiseur en fonction des capacités de la plate-forme et des appareils connectés. La nouvelle classe Spatializer du service de politique audio crée et contrôle le graphe audio spatial nécessaire au mixage multicanal et à la spatialisation en fonction des capacités exprimées par l'OEM , les appareils connectés et les cas d'utilisation actifs. Une nouvelle classe de mixage, SpatializerThread mélange les pistes multicanaux et transmet le mixage résultant à un moteur d'effets de post-traitement qui restitue une sortie stéréo vers l'Audio HAL. Pour le suivi de la tête, la classe SpatializerPoseController regroupe les fonctions liées au suivi de la tête, pour s'interfacer avec la pile de capteurs et pour fusionner et filtrer les signaux des capteurs 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 Android 13 améliorent les éléments suivants :

  • Réduction de la latence entre le spatialiseur et le casque.
  • Fournir des API unifiées pour servir les développeurs d'applications.
  • Contrôler l'état du suivi de la tête via les API du système.
  • Découvrir les capteurs de suivi de tête et les associer à des appareils audio actifs.
  • Fusionner les signaux de divers capteurs et calculer la pose de la tête qui peut être consommée par le moteur d'effet spatialiseur.

Des fonctions telles que la compensation de biais, la détection d'immobilité et la limitation de débit peuvent être implémentées à l'aide de la bibliothèque d'utilitaires de suivi de tête .

API audio spatiales

Android 13 propose un système audio spatial et des API de développement.

Les OEM peuvent adapter le comportement des applications en fonction de la disponibilité des fonctionnalités et de l'état d'activation, qui sont définis par les API système. Les applications peuvent également configurer des attributs audio pour désactiver l'audio spatial pour des raisons esthétiques ou pour indiquer que le flux audio est déjà traité pour l'audio spatial .

Pour les API destinées aux développeurs, consultez Spatializer .

Les OEM peuvent utiliser des API système pour implémenter l'interface utilisateur des paramètres Sons et Bluetooth, qui permet à l'utilisateur de contrôler l'état de l'audio spatial et la fonction de suivi de la tête de son appareil. L'utilisateur peut activer ou désactiver l'audio spatial pour le haut-parleur et les écouteurs filaires dans l'interface utilisateur des paramètres Sons. 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 l'audio spatial et le suivi de la tête dans les paramètres du périphérique Bluetooth pour chaque appareil. Le paramètre de suivi de la tête est disponible uniquement si le casque Bluetooth expose un capteur de suivi de la tête.

Les paramètres par défaut pour l'audio spatial sont toujours activés si la fonctionnalité est prise en charge. Voir Spatializer.java pour une liste complète des API système.

Le nouveau type de capteur de suivi de tête Sensor.TYPE_HEAD_TRACKER est ajouté au framework Sensor et exposé par le Sensor HAL en tant que capteur dynamique via Bluetooth ou USB.

Intégrer l'audio spatial

Parallèlement à la mise en œuvre du moteur d'effet spatialiseur, les OEM doivent configurer leur plate-forme pour la prise en charge de l'audio spatial.

Exigences

Les conditions suivantes doivent être remplies pour intégrer l'audio spatial :

  • Le HAL audio et le DSP audio doivent prendre en charge un chemin de sortie dédié pour l'audio spatial.
  • Pour l’audio spatial avec suivi de la tête, les écouteurs doivent être équipés de capteurs de suivi de la tête intégrés.
  • La mise en œuvre doit être conforme à la norme proposée pour le suivi de la tête via le protocole HID depuis un casque Bluetooth vers un téléphone.
  • Audio HAL v7.1 est nécessaire pour la prise en charge audio spatiale.

Intégrez l’audio spatial en procédant 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 amène AudioService à initialiser la prise en charge du spatialiseur.

  2. Déclarez une sortie dédiée pour le 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"/>
    
  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 implémentant l’effet spatialiseur doivent se conformer aux éléments suivants :

    • Configuration de base et contrôle identiques aux autres effets dans Effect HAL.
    • Paramètres spécifiques nécessaires au framework pour découvrir les fonctionnalités et la configuration prises en charge, tels que :

      • 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

    Voir effect_spatializer.h pour plus d’informations.

Recommandations

Nous recommandons aux OEM d’utiliser les directives suivantes lors de la mise en œuvre :

  • Utilisez l'audio LE lorsqu'il est disponible pour faciliter l'interopérabilité et atteindre les objectifs de latence.
  • La latence aller-retour, depuis la détection de mouvement du capteur jusqu'à l'audio reçu par les écouteurs, doit être inférieure à 150 ms pour une bonne UX.
  • Pour Bluetooth (BT) Classic avec profil de distribution audio avancé (A2DP) :
    • Utilisez un codec à faible latence, tel que Opus .
    • Implémentez des fonctions de contrôle de latence au niveau de l' Audio HAL . 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 la fonctionnalité de la fonctionnalité audio spatiale, utilisez les tests CTS disponibles dans SpatializerTest.java .

Une mauvaise mise en œuvre des algorithmes de spatialisation ou de suivi de la tête peut entraîner le non-respect de la recommandation de latence aller-retour telle qu'énumérée dans les Recommandations .