Audio spaziale e tracciamento della testa

Android 13 introduce un metodo standard per gli OEM supportano l'audio spaziale e il tracciamento della testa senza la necessità di specifiche personalizzazioni o SDK.

L'audio spaziale è una tecnologia che consente di creare un campo sonoro che circonda il e ascolto. 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 usato per la riproduzione. Ad esempio, l'audio spaziale offre all'utente possibilità di ascoltare una colonna sonora multicanale in cuffia. Utilizzo dello spazio audio, gli utenti delle cuffie percepiscono il dialogo davanti a sé e dietro di loro, pur avendo solo due trasduttori per la riproduzione.

Il rilevamento della testa aiuta l'utente a comprendere la natura del suono spaziale. 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 muove la testa e il tempo in cui sente muoversi la posizione dello speaker virtuale di conseguenza.

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

Architettura

L'API e il framework audio Android modificati in Android 13 facilita l'adozione della tecnologia audio spaziale in tutto l'ecosistema.

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

audio spaziale

Figura 1. Architettura della pipeline audio con spazializzatore

Nel nuovo modello, lo spazializzatore fa parte del framework audio ed è disaccoppiato dal decoder. Lo spazializzatore acquisisce contenuti audio misti e esegue il rendering di uno stream stereo nell'Audio HAL. Disaccoppiando lo spazializzatore consente agli OEM di scegliere fornitori diversi per il decoder e lo spazializzatore e per 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 rilevamento della testa.

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

sys-arch-spaziale

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

Tutte le API per l'audio spaziale sono raggruppate nel pubblico Spatializer a livello di app. La SpatializerHelper nel servizio audio si interfaccia con i componenti dell'interfaccia utente di sistema per Funzionalità relative allo spazializzatore in base alla piattaforma e al dispositivo connesso le funzionalità di machine learning. La nuova classe Spatializer nel servizio criteri audio crea e controlla la per il missaggio multicanale e la spazializzazione in base a delle funzionalità espresse dall'OEM, i dispositivi connessi e i casi d'uso attivi. Una nuova classe mixer SpatializerThread combina tracce multicanale e invia il mix risultante a un FX di post-elaborazione che esegue il rendering di un'uscita stereo nell'Audio HAL. Per il tracciamento della testa, La classe SpatializerPoseController raggruppa le funzioni relative al tracciamento della testa per si interfacciano con il gruppo di sensori e di unire e filtrare i segnali dei sensori viene inviato al motore degli effetti. I dati dei sensori per il tracciamento della testa vengono trasmessi tramite il protocollo HID dal driver Bluetooth.

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

  • Riduzione 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 le API di sistema.
  • Rilevamento dei sensori di tracciamento della testa e associazione a dispositivi audio attivi.
  • Unire i segnali di vari sensori e calcolare la posizione della testa, che può essere consumato dal motore degli effetti spazializzatore.

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

API audio spaziale

Android 13 offre un sistema audio spaziale e uno sviluppatore su quelle di livello inferiore.

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 attributi audio per disabilita 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, vedi Spatializer.

Gli OEM possono usare le API di sistema per implementare l'UI delle impostazioni Suoni e Bluetooth, che consente all'utente di controllare lo stato dell'audio spaziale e della testa funzionalità di monitoraggio del dispositivo. L'utente può attivare o disattivare l'audio spaziale per l'altoparlante e le cuffie con cavo nella UI delle impostazioni Suoni. Lo spazio l'impostazione audio per l'altoparlante è disponibile solo se l'effetto spazializzatore dell'implementazione supporta la modalità transaurale.

L'utente può anche attivare o disattivare l'audio spaziale e il tracciamento della testa nella Impostazione dispositivo Bluetooth per ogni dispositivo. L'impostazione di rilevamento della testa è disponibile solo se le cuffie Bluetooth mostrano un sensore di tracciamento della testa.

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

Il nuovo sensore di tracciamento della testa, tipo Sensor.TYPE_HEAD_TRACKER, viene aggiunto al Struttura del sensore ed esposto dal sensore HAL come sensore dinamico tramite Bluetooth o USB.

Integra audio spaziale

Oltre a implementare il motore degli effetti spazializzato, gli OEM devono configurare il proprio per il supporto dell'audio spaziale.

Requisiti

Per integrare l'audio spaziale, devono essere soddisfatti i seguenti requisiti:

  • L'HAL audio e il DSP audio devono supportare un percorso di output dedicato per audio.
  • Per l'audio spaziale con tracciamento della testa, le cuffie devono avere la testa integrata sensori del tracker.
  • L'implementazione deve essere conforme allo standard proposto per il tracciamento della testa tramite il protocollo HID da una cuffie Bluetooth a un telefono.
  • HAL audio versione 7.1 necessaria per il supporto dell'audio spaziale.

Integra l'audio spaziale seguendo questa procedura:

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

    PRODUCT_PROPERTY_OVERRIDES += \
         ro.audio.spatializer_enabled=true
    

    Questo fa sì che AudioService inizializza il supporto dello spazializzatore.

  2. Dichiara l'output dedicato per il mix audio spaziale nella 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 spazializzatore devono rispettare i seguenti requisiti:

    • Configurazione e controllo di base identici ad altri effetti in Effetto HAL
    • Parametri specifici necessari affinché il framework possa rilevare elementi supportati funzionalità e configurazione, 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 quando disponibile per facilitare l'interoperabilità e ottenere la latenza obiettivi.
  • Latenza di andata e ritorno, dal rilevamento del movimento del sensore all'audio ricevuto deve essere inferiore a 150 ms per una buona UX.
  • Per Bluetooth (BT) Classic con Advanced Audio Distribution Profile (A2DP):
    • Utilizza un codec a bassa latenza, come Opus.
    • Implementa le funzioni di controllo della latenza in Audio HAL. Consente l'ottimizzazione dell'alimentazione e delle prestazioni quando il tracciamento della testa è e disattivazione del tracciamento della testa in condizioni non ottimali.

Convalida

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

Una scarsa implementazione degli algoritmi di spazializzazione o di tracciamento della testa può causare mancata conformità ai suggerimenti per la latenza di andata e ritorno come elencato in Consigli.