Audio spaziale e tracciamento della testa

Android 13 introduce un modo standard per consentire agli OEM di supportare l'audio spaziale e il rilevamento della testa senza dover ricorrere a SDK o personalizzazioni 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 i canali e i singoli suoni in posizioni diverse da quelle 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 in cuffia. Con l'audio spaziale, gli utenti delle cuffie possono percepire i dialoghi davanti a loro e gli effetti surround dietro di loro, nonostante dispongano di soli due trasduttori per la riproduzione.

Il rilevamento della testa aiuta l'utente a comprendere la natura del suono spaziale che viene simulato intorno 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 è ottimizzato per l'audio spaziale e il monitoraggio della testa offrendo l'elaborazione dell'audio spaziale al livello più basso possibile nella pipeline audio per ottenere la latenza più bassa possibile.

Architettura

L'API e il framework audio di Android modificati in Android 13 facilitano l'adozione della tecnologia audio spaziale nell'intero ecosistema.

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

audio-spaziale

Figura 1. Architettura della pipeline audio con spatializer

Nel nuovo modello, lo spazializzatore fa parte del framework audio ed è disaccoppiato dal decoder. Lo spazializzatore acquisisce contenuti audio misti e genera uno stream stereo per l'HAL audio. Il disaccoppiamento dello spazializzatore dal decoder consente agli OEM di scegliere fornitori diversi per il decoder e lo spazializzatore e di ottenere la latenza di andata e ritorno desiderata per il rilevamento dei movimenti della testa. Questo nuovo modello include anche hook per il framework del sensore per il monitoraggio della testa.

La figura seguente illustra l'architettura di sistema del framework audio per l'effetto di spazializzazione e rilevamento dei movimenti della testa:

spatial-sys-arch

Figura 2. Architettura di sistema con spatializer e rilevamento dei movimenti della testa

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

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

  • Riduzione della latenza tra lo spazializzatore e le cuffie.
  • Fornisce API unificate per servire gli sviluppatori di app.
  • Controllo dello stato del monitoraggio della testa tramite le API di sistema.
  • Rilevamento dei sensori di rilevamento della testa e associazione a dispositivi audio attivi.
  • Unisce i segnali di vari sensori e calcola la posizione della testa che può essere impiegata dal motore degli effetti di spazializzazione.

Funzionalità come la compensazione del bias, il rilevamento di immobilità e la limitazione della frequenza possono essere implementate utilizzando la libreria di utilità per il monitoraggio della testa.

API audio spaziale

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

Gli OEM possono adattare il comportamento delle app in base alla disponibilità delle funzionalità e allo stato di attivazione, 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 lo stream audio è già stato 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 delle impostazioni Audio e Bluetooth, che consente all'utente di controllare lo stato dell'audio spaziale e della funzionalità di monitoraggio della testa per il proprio dispositivo. L'utente può attivare o disattivare l'audio spaziale per lo speaker e le cuffie con cavo nell'interfaccia utente delle impostazioni Audio. L'impostazione dell'audio spaziale per l'altoparlante è disponibile solo se l'implementazione dell'effetto spaziale supporta la modalità transaurale.

L'utente può anche attivare o disattivare l'audio spaziale e il rilevamento della testa nell'impostazione del dispositivo Bluetooth per ciascun dispositivo. L'impostazione di monitoraggio della testa è disponibile solo se le cuffie Bluetooth dispongono di un sensore di monitoraggio della testa.

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

Il nuovo tipo di sensore di monitoraggio della testa Sensor.TYPE_HEAD_TRACKER viene aggiunto al framework Sensor e visualizzato dall'HAL Sensor come sensore dinamico tramite Bluetooth o USB.

Integrare l'audio spaziale

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

Requisiti

Per 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 monitoraggio della testa integrati.
  • L'implementazione deve essere conforme allo standard proposto per il monitoraggio della testa tramite il protocollo HID da un auricolare Bluetooth a uno smartphone.
  • Per il supporto dell'audio spaziale è necessaria la versione 7.1 dell'Audio HAL.

Integra l'audio spaziale seguendo questa procedura:

  1. Dichiara il supporto dell'audio spaziale nel file device.mk come segue:

    PRODUCT_PROPERTY_OVERRIDES += \
         ro.audio.spatializer_enabled=true
    

    In questo modo, AudioService inizializza 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 di effetti spazializzato 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 di spazializzazione devono rispettare quanto segue:

    • Configurazione e controllo di base identici a quelli di altri effetti in Effect HAL.
    • Parametri specifici necessari al framework per rilevare le funzionalità e la configurazione supportate, ad esempio:

      • 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

    Per ulteriori informazioni, visita la pagina effect_spatializer.h.

Consigli

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

  • Utilizza LE audio, se disponibile, per semplificare l'interoperabilità e raggiungere gli obiettivi di latenza.
  • La latenza nel tempo di round trip, dal rilevamento del movimento del sensore all'audio ricevuto dagli auricolari, deve essere inferiore a 150 ms per un'esperienza utente ottimale.
  • Per il Bluetooth (BT) classico con Advanced Audio Distribution Profile (A2DP):
    • Utilizza un codec a bassa latenza, ad esempio Opus.
    • Implementa le funzioni di controllo della latenza in Audio HAL. In questo modo, viene attivata l'ottimizzazione di potenza e prestazioni quando il monitoraggio della testa è disattivato e viene disattivato il monitoraggio della testa in condizioni non ottimali.

Convalida

Per convalidare la funzionalità dell'audio spaziale, utilizza i test CTS disponibili in SpatializerTest.java.

Una scarsa implementazione degli algoritmi di spazializzazione o monitoraggio della testa può causare il mancato rispetto del consiglio sulla latenza di andata e ritorno indicato nella sezione Consigli.