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 traccia audio multicanale con le cuffie. 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 dei movimenti della testa aiuta l'utente a comprendere la natura della scena sonora spazializzata simulata 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:
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:
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
la funzionalità relativa allo spazializzatore in base alle funzionalità della piattaforma e del dispositivo collegato. La nuova classe Spatializer
nel servizio di criteri audio crea e controlla il grafo audio spaziale necessario per il missaggio 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
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 di sensori di monitoraggio della testa e loro associazione ai 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 lo speaker è disponibile solo se l'implementazione dell'effetto di spazializzazione 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.
Per integrare l'audio spaziale, segui questi passaggi:
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.Dichiara l'uscita dedicata 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"/>
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"/>
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 per consentire al framework di 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 andata e ritorno, 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 nell'HAL audio. 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.