Audio spaziale e rilevamento dei movimenti 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 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 tramite le cuffie. Grazie all'audio spaziale, gli utenti delle cuffie possono percepire i dialoghi 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 intorno alla 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 spostarsi di conseguenza.

Android 13 è ottimizzato per l'audio spaziale e il rilevamento 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 e l'API Android modificati 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 del framework audio ed è disaccoppiato dal decoder. Lo spazializzatore riceve contenuti audio misti e restituisce uno stream stereo all'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 della testa. Questo nuovo modello include anche hook al framework dei sensori per il monitoraggio della testa.

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

spatial-sys-arch

Figura 2. Architettura del sistema con spazializzatore e head tracking

Tutte le API audio spaziale sono raggruppate nella classe pubblica Spatializer a livello di app. La classe SpatializerHelper nelle interfacce del servizio audio interagisce con i componenti della UI di sistema per gestire la funzionalità relativa allo spazializzatore in base alla piattaforma e alle funzionalità del dispositivo connesso. La nuova classe Spatializer nel servizio di policy audio crea e controlla il grafico audio spaziale necessario per il mixaggio multicanale e la spazializzazione in base alle funzionalità espresse dall'OEM, ai dispositivi connessi e ai casi d'uso attivi. Una nuova classe di mixer SpatializerThread mixa le tracce multicanale e invia il mix risultante a un motore di effetti di post-elaborazione che esegue il rendering di un output stereo per l'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 filtro dei segnali dei sensori che vengono inviati al motore degli effetti. I dati del sensore di monitoraggio della testa vengono trasferiti tramite il protocollo HID dal driver Bluetooth.

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

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

Funzioni come la compensazione della distorsione, il rilevamento dell'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 API di sistema e per sviluppatori per l'audio spaziale.

Gli OEM possono adattare il comportamento delle app in base alla disponibilità e allo stato di attivazione delle funzionalità, impostati 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à elaborato per l'audio spaziale.

Per le API rivolte agli sviluppatori, consulta Spatializer.

Gli OEM possono utilizzare le API di sistema per implementare la UI 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 nella UI delle impostazioni Audio. L'impostazione dell'audio spaziale per lo speaker è disponibile solo se l'implementazione dell'effetto spazializzatore supporta la modalità transaurale.

L'utente può anche attivare o disattivare l'audio spaziale e il monitoraggio della testa nelle impostazioni del dispositivo Bluetooth per ogni dispositivo. L'impostazione di tracciamento della testa è disponibile solo se le cuffie Bluetooth espongono un sensore di tracciamento 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 dei sensori ed esposto da Sensor HAL come sensore dinamico tramite Bluetooth o USB.

Integrare l'audio spaziale

Oltre a implementare il motore di effetti spazializzatore, gli OEM devono configurare la propria 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 head tracking, le cuffie devono avere sensori di tracciamento della testa integrati.
  • L'implementazione deve essere conforme allo standard proposto per il rilevamento della posizione della testa tramite il protocollo HID da un headset Bluetooth a uno smartphone.
  • Audio HAL v7.1 è necessario per il supporto dell'audio spaziale.

Integra l'audio spaziale seguendo questi passaggi:

  1. Dichiara il supporto dell'audio spaziale nel file device.mk nel seguente modo:

    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 di spazializzazione 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 rispettare i seguenti requisiti:

    • Configurazione e controllo di base identici ad 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 saperne di più, consulta effect_spatializer.h.

Consigli

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

  • Utilizza LE Audio quando disponibile per facilitare l'interoperabilità e raggiungere gli obiettivi di latenza.
  • La latenza nel tempo di round trip, dal rilevamento del movimento del sensore all'audio ricevuto dalle cuffie, deve essere inferiore a 150 ms per una buona esperienza utente.
  • Per Bluetooth (BT) Classic con profilo Advanced Audio Distribution (A2DP):
    • Utilizza un codec a bassa latenza, ad esempio Opus.
    • Implementa le funzioni di controllo della latenza nell'HAL audio. Ciò consente l'ottimizzazione della potenza e delle prestazioni quando il monitoraggio della testa è disattivato e la disattivazione del 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 di rilevamento della testa può causare il mancato rispetto del consiglio relativo alla latenza di andata e ritorno elencato nei consigli.