Il sistema operativo Android Automotive (AAOS) si basa sullo stack audio Android di base per supportare i casi d'uso per il funzionamento come sistema di infotainment in un veicolo. AAOS è responsabile dei suoni di infotainment (ovvero media, navigazione e comunicazioni), ma non è direttamente responsabile dei segnali acustici e degli avvisi che hanno requisiti rigorosi di disponibilità e tempistica.
Sebbene AAOS fornisca segnali e meccanismi per aiutare il veicolo a gestire l'audio, alla fine spetta al veicolo decidere quali suoni devono essere riprodotti per il conducente e i passeggeri, garantendo che i suoni critici per la sicurezza e quelli regolamentari vengano ascoltati correttamente senza interruzioni.
Poiché AAOS sfrutta lo stack audio di Android, le applicazioni di terze parti che riproducono audio non devono fare nulla di diverso rispetto agli smartphone. Il routing audio dell'applicazione viene gestito automaticamente da AAOS come descritto in Configurazione delle policy audio.
Poiché Android gestisce l'esperienza multimediale del veicolo, le sorgenti multimediali esterne come il sintonizzatore radio devono essere rappresentate da app, che possono gestire la messa a fuoco dell'audio e gli eventi dei tasti multimediali per la sorgente.
Audio e stream di Android
Gli impianti audio per auto gestiscono i seguenti suoni e stream:
Figura 1. Diagramma dell'architettura incentrata sul flusso.
Android gestisce i suoni provenienti dalle app Android, controllando queste app e indirizzando i suoni ai dispositivi di output nell'HAL in base al tipo di suono:
Gli stream logici, noti come sorgenti nella nomenclatura audio di base, sono taggati con attributi audio.
I flussi fisici, noti come dispositivi nella nomenclatura audio di base, non hanno informazioni di contesto dopo il mixaggio.
Per affidabilità, i suoni esterni (provenienti da fonti indipendenti, come i segnali acustici di avviso delle cinture di sicurezza) vengono gestiti al di fuori di Android, al di sotto dell'HAL o anche in hardware separato. Gli implementatori del sistema devono fornire un mixer che accetti uno o più stream di input audio da Android e li combini in modo appropriato con le sorgenti sonore esterne richieste dal veicolo. L'HAL di controllo Android fornisce un meccanismo diverso per i suoni generati al di fuori di Android per comunicare con Android:
- Richiesta di focus audio
- Limitazioni di guadagno o volume
- Modifiche al guadagno e al volume
L'implementazione dell'HAL audio e del mixer esterno sono responsabili di garantire che i suoni esterni di importanza critica per la sicurezza vengano ascoltati e di mixare gli stream forniti da Android e indirizzarli agli altoparlanti adatti.
Suoni di Android
Le app possono avere uno o più player che interagiscono tramite le API Android standard (ad esempio, AudioManager per il controllo della messa a fuoco o MediaPlayer per lo streaming) per emettere uno o più flussi logici di dati audio. Questi dati potrebbero essere mono a un solo canale o surround 7.1, ma vengono instradati e trattati come un'unica origine. Il flusso dell'app è associato a AudioAttributes che forniscono al sistema suggerimenti su come deve essere espresso l'audio.
I flussi logici vengono inviati tramite AudioService e indirizzati a uno (e uno solo) dei flussi di output fisici disponibili, ognuno dei quali è l'output di un mixer all'interno di AudioFlinger. Una volta mixati in uno stream fisico, gli attributi audio non sono più disponibili.
Ogni flusso fisico viene quindi inviato all'HAL audio per il rendering sull'hardware. Nelle app per auto, l'hardware di rendering può essere costituito da codec locali (simili a quelli dei dispositivi mobili) o da un processore remoto nella rete fisica del veicolo. In ogni caso, è compito dell'implementazione di Audio HAL fornire i dati di esempio effettivi e farli diventare udibili.
Stream esterni
I flussi audio che non devono essere instradati tramite Android (per motivi di certificazione o tempistiche) possono essere inviati direttamente al mixer esterno. A partire da Android 11, l'HAL è ora in grado di richiedere la messa a fuoco per questi suoni esterni per informare Android in modo che possa intraprendere azioni appropriate come mettere in pausa i contenuti multimediali o impedire ad altri di ottenere la messa a fuoco.
Se gli stream esterni sono origini multimediali che devono interagire con l'ambiente audio generato da Android (ad esempio, interrompere la riproduzione di MP3 quando viene attivato un sintonizzatore esterno), questi stream esterni devono essere rappresentati da un'app per Android. Questa app richiederebbe l'audio focus per conto dell'origine multimediale anziché dell'HAL e risponderebbe alle notifiche di focus avviando e interrompendo l'origine esterna in base alle necessità per adattarsi alle norme di Android sul focus.
L'app è anche responsabile della gestione degli eventi chiave multimediali come la riproduzione e la
pausa. Un meccanismo suggerito per controllare questi dispositivi esterni è
HwAudioSource. Per saperne di più, vedi
Collegare un dispositivo di input in AAOS.
Dispositivi di output
A livello di HAL audio, il tipo di dispositivo AUDIO_DEVICE_OUT_BUS fornisce un
dispositivo di output generico da utilizzare nei sistemi audio del veicolo. Il dispositivo bus supporta
porte indirizzabili (in cui ogni porta è l'endpoint per un flusso fisico) e
dovrebbe essere l'unico tipo di dispositivo di output supportato in un veicolo.
Un'implementazione di sistema può utilizzare una porta bus per tutti i suoni di Android, nel qual caso Android li mixa e li distribuisce come un unico stream. In alternativa, l'HAL può fornire una porta bus per ogni CarAudioContext per consentire la riproduzione simultanea di qualsiasi tipo di suono. In questo modo, l'implementazione HAL può mixare e abbassare i diversi suoni come desiderato.
L'assegnazione dei contesti audio ai dispositivi di output viene eseguita tramite il
file car_audio_configuration.xml. Per saperne di più, consulta la sezione
Configurazione delle norme audio.