Audio spaziale e tracciamento della testa

Android 13 introduce un modo standard per gli OEM di supportare l'audio spaziale e il tracciamento della testa senza la necessità di personalizzazioni o SDK specifici del fornitore.

L'audio spaziale è una tecnologia utilizzata per creare un campo sonoro che circonda l'ascoltatore. L'audio spaziale consente agli utenti di percepire canali e suoni individuali in posizioni che differiscono dalle posizioni fisiche dei trasduttori del dispositivo audio utilizzato per la riproduzione. Ad esempio, l'audio spaziale offre all'utente la possibilità di ascoltare una colonna sonora multicanale tramite le cuffie. Utilizzando l'audio spaziale, gli utenti delle cuffie possono percepire il dialogo davanti a loro e gli effetti surround dietro di loro, nonostante abbiano solo due trasduttori per la riproduzione.

Il tracciamento della testa aiuta l'utente a comprendere la natura del palcoscenico sonoro spazializzato simulato attorno alla sua testa. Questa esperienza è efficace solo quando la latenza è bassa, dove la latenza viene misurata come il tempo che intercorre tra il momento in cui l'utente muove la testa e il momento in cui sente la posizione dell'altoparlante virtuale muoversi di conseguenza.

Android 13 ottimizza l'audio spaziale e il tracciamento della testa offrendo l'elaborazione dell'audio spaziale al livello più basso possibile nella pipeline audio per ottenere la latenza più bassa possibile.

Architettura

Il framework audio Android modificato e l'API in Android 13 facilitano l'adozione della tecnologia audio spaziale in tutto l'ecosistema.

La figura seguente illustra le modifiche relative all'audio spaziale apportate all'architettura della pipeline audio con Android 13:

spatial-audio

Figura 1. Architettura della pipeline audio con spazializzatore

Nel nuovo modello lo spazializzatore fa parte della struttura audio ed è disaccoppiato dal decoder. Lo spazializzatore accetta contenuto audio misto ed esegue il rendering di un flusso stereo nell'HAL audio. Il disaccoppiamento dello spazializzatore dal decodificatore consente agli OEM di scegliere diversi fornitori per il decodificatore e lo spazializzatore e di ottenere la latenza di andata e ritorno desiderata per il tracciamento della testa. Questo nuovo modello include anche ganci alla struttura del sensore per il tracciamento della testa.

La figura seguente illustra l'architettura del sistema della struttura audio per lo spazializzatore e l'effetto di tracciamento della testa:

spatial-sys-arch

Figura 2. Architettura del sistema con spazializzatore e tracciamento della testa

Tutte le API audio spaziali sono raggruppate nella classe Spatializer pubblica a livello di app. La classe SpatializerHelper nel servizio audio si interfaccia con i componenti dell'interfaccia utente del sistema per gestire le funzionalità relative allo spazializzatore in base alla piattaforma e alle funzionalità del dispositivo connesso. La nuova classe Spatializer nel servizio policy audio crea e controlla il grafico audio spaziale necessario per il missaggio e la spazializzazione multicanale in base alle capacità espresse dall'OEM , dai dispositivi connessi e dai casi d'uso attivi. Una nuova classe di mixer SpatializerThread mixa tracce multicanale e invia il mix risultante a un motore FX di post-elaborazione che esegue il rendering di un'uscita stereo sull'HAL audio. Per il tracciamento della testa, la classe SpatializerPoseController raggruppa le funzioni relative al tracciamento della testa, per interfacciarsi con lo stack di sensori e per unire e filtrare i segnali dei sensori che vengono inviati al motore degli effetti. I dati del sensore di rilevamento della testa vengono trasferiti tramite il protocollo HID dal driver Bluetooth.

Le modifiche all'architettura della pipeline audio di Android 13 migliorano quanto segue:

  • Diminuzione della latenza tra lo spazializzatore e le cuffie.
  • Fornire API unificate per servire gli sviluppatori di app.
  • Controllo dello stato del tracciamento della testa tramite API di sistema.
  • Scoprire i sensori di tracciamento della testa e associarli a dispositivi audio attivi.
  • Unione dei segnali provenienti da vari sensori e calcolo della posa della testa che può essere consumata dal motore dell'effetto spazializzatore.

Funzioni come la compensazione del bias, il rilevamento dell'immobilità e la limitazione della frequenza possono essere implementate utilizzando la libreria dell'utilità di tracciamento della testa .

API audio spaziale

Android 13 offre un sistema audio spaziale e API per sviluppatori.

Gli OEM possono adattare il comportamento dell'app in base alla disponibilità delle funzionalità e allo stato abilitato, impostato dalle API di sistema. Le app possono anche configurare gli attributi audio per disattivare l'audio spaziale per motivi estetici o per indicare che il flusso audio è già elaborato per l'audio spaziale .

Per le API rivolte agli sviluppatori, consulta Spatializer .

Gli OEM possono utilizzare le API di sistema per implementare l'interfaccia utente dei suoni e delle impostazioni Bluetooth, che consente all'utente di controllare lo stato dell'audio spaziale e la funzionalità di tracciamento della testa per il proprio dispositivo. L'utente può abilitare o disabilitare l'audio spaziale per l'altoparlante e le cuffie cablate nell'interfaccia utente delle impostazioni Suoni. L'impostazione audio spaziale per l'oratore è disponibile solo se l'implementazione dell'effetto spazializzatore supporta la modalità transaurale.

L'utente può anche abilitare o disabilitare l'audio spaziale e il tracciamento della testa nelle impostazioni del dispositivo Bluetooth per ciascun dispositivo. L'impostazione del rilevamento della testa è disponibile solo se l'auricolare Bluetooth espone un sensore di rilevamento della testa.

Le impostazioni predefinite per l'audio spaziale sono sempre attive se la funzionalità è supportata. Vedi Spatializer.java per un elenco completo delle API di sistema.

Il nuovo tipo di sensore di tracciamento della testa Sensor.TYPE_HEAD_TRACKER viene aggiunto al framework Sensor ed esposto da Sensor HAL come sensore dinamico tramite Bluetooth o USB.

Integra l'audio spaziale

Oltre a implementare il motore degli effetti spazializzatore, gli OEM devono configurare la propria piattaforma per il supporto dell'audio spaziale.

Requisiti

Per poter integrare l'audio spaziale è necessario soddisfare i seguenti requisiti:

  • L'HAL audio e il DSP audio devono supportare un percorso di output dedicato per l'audio spaziale.
  • Per l'audio spaziale con tracciamento della testa, le cuffie devono avere sensori di tracciamento della testa integrati.
  • L'implementazione deve essere conforme allo standard proposto per il tracciamento della testa tramite il protocollo HID da un auricolare Bluetooth a un telefono.
  • Per il supporto audio spaziale è necessario HAL audio v7.1 .

Integra l'audio spaziale utilizzando i seguenti passaggi:

  1. Dichiara il supporto audio spaziale nel tuo file device.mk , come segue:

    PRODUCT_PROPERTY_OVERRIDES += \
         ro.audio.spatializer_enabled=true
    

    Ciò fa sì che AudioService inizializzi il supporto dello spazializzatore.

  2. Dichiara l'output dedicato per il mix audio spaziale in audio_policy_configuration.xml , come segue:

    <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. Dichiara la libreria degli effetti spazializzatore in audio_effects.xml , come segue:

    <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. I fornitori che implementano l'effetto spazializzatore devono conformarsi a quanto segue:

    • Configurazione e controllo di base identici agli altri effetti in Effect HAL.
    • Parametri specifici necessari affinché il framework scopra le funzionalità e la configurazione supportate, come:

      • 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

    Vedi effect_spatializer.h per ulteriori informazioni.

Raccomandazioni

Consigliamo agli OEM di utilizzare le seguenti linee guida durante l'implementazione:

  • Utilizza l'audio LE quando disponibile per facilitare l'interoperabilità e raggiungere gli obiettivi di latenza.
  • La latenza di andata e ritorno, dal rilevamento del movimento del sensore all'audio ricevuto dalle cuffie, deve essere inferiore a 150 ms per una buona UX.
  • Per Bluetooth (BT) Classic con profilo di distribuzione audio avanzato (A2DP):
    • Utilizza un codec a bassa latenza, come Opus .
    • Implementare le funzioni di controllo della latenza nell'HAL audio . Ciò consente l'ottimizzazione della potenza e delle prestazioni quando il tracciamento della testa è disattivato e la disabilitazione del tracciamento della testa in condizioni non ottimali.

Validazione

Per convalidare la funzionalità della funzionalità audio spaziale, utilizzare i test CTS disponibili in SpatializerTest.java .

Una scarsa implementazione degli algoritmi di spazializzazione o di tracciamento della testa può causare il mancato rispetto della raccomandazione sulla latenza di andata e ritorno elencata nelle Raccomandazioni .