Routing audio multizona

Il servizio audio per auto utilizza i criteri audio dinamici di Core Audio per semplificare i casi d'uso nelle auto.

  • Riproduzione audio separata per ogni passeggero, nota come audio multizona, in cui ogni zona consente la riproduzione simultanea dell'audio.

  • Configurazione delle zone audio dinamiche.

  • Trasmissione audio nella zona principale del passeggero.

  • Mirroring dell'audio del passeggero.

In ogni caso d'uso, il servizio audio per auto utilizza il criterio audio dinamico per indirizzare automaticamente l'audio al dispositivo di uscita designato.

Audio multizona

L'audio multizona consente a più utenti di interagire con AAOS contemporaneamente. A ogni zona è associato un insieme di dispositivi di output e ogni zona mantiene l'attenzione audio e il livello del volume. I passeggeri possono ascoltare i propri contenuti audio mentre il conducente ascolta un'altra sorgente nella zona principale (in genere la cabina principale).

Architettura audio multizona

Architettura del servizio audio per auto

Figura 1. Architettura del servizio audio per auto.

Le zone audio dell'auto sono un'astrazione di output audio, audio focus e altre impostazioni audio, che possono essere gestite in modo indipendente. Ai fini del routing, ogni zona è definita come un insieme di dispositivi di bus di output audio disposti nella configurazione dei criteri audio. I dispositivi sono diversi per ogni definizione di zona audio. Nella Figura 1, i dispositivi bus da 1 a 5 appartengono alla zona zero, i dispositivi bus da 6 a 8 appartengono alla zona 1 e i dispositivi bus da 9 a 11 appartengono alla zona 2.

Configurazione dell'impianto audio dell'auto

In genere, i dispositivi di output vengono assegnati a una zona audio. Ogni zona audio è definita in car_audio_configuration.xml. Il seguente snippet di codice mostra una configurazione audio per auto per la Figura 1:

<carAudioConfiguration version="3">
    <zones>
        <zone name="Zone0" audioZneId="0" occupantZoneId="0">
            <zoneConfigs>
                <zoneConfig name="config0" isDefault="true">
                   <volumeGoups>
                        <group>
                            <device address="bus_1">
                                <context context="music"/>
                            </device>
                        </group>
                        <group>
                            <device address="bus_2">
                                <context context="navigation"/>
                            </device>
                        </group>
                        ...
                    </volumeGroups>
                </zoneConfig>
            </zoneConfigs>
        </zone>
        <zone name="Zone1" audioZoneId="1" occupantZoneId="1">
            <zoneConfigs>
                <zoneConfig name="config0" isDefault="true">
                    <volumeGroups>
                        <group>
                            <device address="bus_6">
                                <context context="music"/>
                            </device>
                        </group>
                        <group>
                            <device address="bus_7">
                                <context context="navigation"/>
                           </device>
                       </group>
                       ...
                    </volumeGroups>
                </zoneConfig>
            </zoneConfigs>
        </zone>
        ...
    ...
   </zones>
</carAudioConfiguration>

occupantZoneId è una definizione di servizio per auto gestita da CarOccupantZoneManager. Viene utilizzato nelle auto per definire una mappatura di un utente all'interno dell'auto a una posizione specifica del sedile. CarOccupantZoneService definisce anche la mappatura dalla zona occupante ai display, ad altre periferiche e all'utente quando l'utente accede a un display. Una zona audio ha:

  • Un ID zona audio e un ID zona occupanti.

    • Mappa la zona audio alla zona degli occupanti (sedile, display e altre periferiche)
    • Mappa l'ID utente assegnato a una zona audio al momento dell'accesso
  • Un elenco di configurazioni audio. Ogni configurazione audio ha un insieme di gruppi di volume. Ogni gruppo di volumi ha un insieme di dispositivi di bus audio.

    • Quando il volume viene modificato, tutti i dispositivi audio di un gruppo vengono controllati allo stesso modo.

    • A ogni dispositivo audio viene assegnato un elenco di attributi audio. Queste informazioni vengono utilizzate per creare le combinazioni di norme audio con attributi audio assegnati in modo diverso.

Questa configurazione consente di instradare diversi utilizzi degli attributi audio a diversi dispositivi di output in ogni zona. A seconda del caso d'uso, è possibile riprodurre contemporaneamente diversi suoni. Ad esempio, puoi scegliere di configurare l'abitacolo principale (zona principale) per riprodurre i suoni dei contenuti multimediali su tutti gli altoparlanti, ma i suoni di navigazione solo su quelli più vicini al conducente. Con la riproduzione simultanea dell'audio, chi si trova nell'abitacolo principale può continuare ad ascoltare contenuti multimediali mentre il conducente riceve le indicazioni stradali.

Flusso di lavoro di accesso dei passeggeri con audio multizona

Il diagramma di sequenza seguente mostra il flusso per attivare il routing audio quando un passeggero accede al proprio display:

immagine

Figura 2.

In questa sequenza, l'accesso dell'utente viene propagato al servizio audio dell'auto tramite il servizio di zona occupanti.

  1. Il servizio audio per auto (per una zona audio specifica) utilizza l'API AudioPolicy#removeUserIdDeviceAffinity per rimuovere le affinità del dispositivo dell'utente. Questa API accetta un ID utente. In questo caso, l'utente della zona precedente.

  2. L'API AudioPolicy#setUserIdDeviceAffinity assegna il nuovo utente a una zona, che acquisisce l'ID utente e tutti i dispositivi per una configurazione della zona specifica.

Configurazioni delle zone dinamiche

In Android 14 vengono introdotte le configurazioni delle zone dinamiche per consentire agli OEM di configurare insiemi diversi di dispositivi per i passeggeri. Il caso d'uso consente ai passeggeri seduti nel sedile posteriore di passare da uno altoparlante del poggiatesta posteriore a una periferica con cuffie per il sedile posteriore.

In questo caso, sono necessarie due configurazioni. Uno per il poggiatesta del sedile posteriore e uno per la periferica per cuffie. L'audio di un utente specifico viene indirizzato solo a una configurazione alla volta.

Flusso di lavoro per la configurazione delle zone dinamiche

Figura 3. Flusso di lavoro per la configurazione delle zone dinamiche.

La Figura 3 mostra l'architettura per il flusso di lavoro di configurazione delle zone dinamiche. La zona audio 1 contiene due configurazioni, Config 0 e Config 1, associate rispettivamente allo speaker e al poggiatesta del dispositivo di output.

Al momento dell'accesso, all'utente viene assegnata automaticamente la configurazione predefinita. Quando l'utente sceglie di modificare le configurazioni, in genere tramite un'interfaccia utente di sistema, il servizio audio dell'auto esegue il passaggio tra le due configurazioni. In questo modo, il dispositivo di output passa dall'altoparlante Z1 al poggiatesta Z1.

Lo snippet di codice seguente mostra la configurazione di questa zona dinamica.

<carAudioConfiguration version="3">
    <zones>
        <zone name="Zone1" audioZoneId="1" occupantZoneId="1">
            <zoneConfigs>
                <zoneConfig name="Zone 1 Config 0" isDefault="true">
                    <volumeGroups>
                        <group>
                            <device address="bus_100">
                                <context context="music"/>
                                    ***
                            </device>
                        </group>
                    </volumeGroups>
                </zoneConfig>
                <zoneConfig name="Zone 1 Config 1">
                    <volumeGroups>
                        <group>
                            <device address="bus_101">
                                <context context="music"/>
                                    ***
                            </device>
                        </group>
                    </volumeGroups>
                </zoneConfig>
            </zoneConfigs>
        </zone>
    </zones>

Per facilitare la gestione delle configurazioni audio, il gestore dell'impianto audio dell'auto espone le API per gestire le configurazioni:

  • Esegui query sulle configurazioni disponibili per una zona.
  • Esegui una query sulla configurazione attualmente impostata per una zona.
  • Passa a un'altra configurazione.

Un'app o un servizio dell'interfaccia utente di sistema può utilizzare queste API per gestire la configurazione della zona audio, come mostrato in Figura 4. L'API Query li espone al passeggero. L'utente può selezionare una configurazione diversa toccando un comando per la configurazione desiderata.

Flusso di lavoro per la configurazione delle zone dinamiche

Figura 4. Flusso di lavoro per la configurazione delle zone dinamiche.

Trasmissione audio per i passeggeri della zona principale

La trasmissione audio per i passeggeri nella zona principale è una funzionalità introdotta in Android 14 per consentire ai passeggeri di trasmettere l'audio dei contenuti multimediali nella zona principale. In questo modo, il passeggero può trasmettere l'audio dei contenuti multimediali alla cabina principale, mentre il conducente mantiene il pieno controllo.

La figura seguente mostra una versione semplificata dell'architettura per la trasmissione audio dei contenuti multimediali per i passeggeri della zona principale.

Flusso di lavoro per la configurazione delle zone dinamiche

Figura 5. Flusso di lavoro per la configurazione delle zone dinamiche.

L'immagine mostra che il dispositivo di output multimediale del conducente è condiviso con il passeggero. Questo accade solo quando il passeggero è in modalità di trasmissione alla zona principale. Il criterio audio dinamico viene utilizzato anche per gestire il routing audio per il driver, ma non vengono applicate modifiche alle affinità del dispositivo per il driver. Per il passeggero, l'elenco dei dispositivi di output viene modificato come segue:

  • Il dispositivo di output multimediale per il passeggero viene rimosso dall'elenco dei dispositivi
  • Il dispositivo di output multimediale per il driver viene aggiunto all'elenco dei dispositivi
  • I dispositivi di uscita rimanenti per le zone audio dei passeggeri rimangono nell'elenco dei dispositivi

Questo nuovo elenco di dispositivi viene assegnato al passeggero dall'APIAudioPolicy#setUserIdDeviceAffinity. I parametri passati all'API sono l'elenco dei dispositivi e l'ID utente del passeggero. Quando il servizio di criteri audio dell'impianto audio chiede quale mix audio deve essere selezionato per una traccia multimediale associata al passeggero, viene selezionato il mix audio multimediale associato alla zona principale.

Un requisito fondamentale per la trasmissione audio della zona principale è che il dispositivo di output multimediale della zona principale sia isolato da altri utilizzi dell'attributo audio. In caso contrario, durante la composizione dei mix audio, vengono aggiunti altri attributi audio. Quando la selezione del mix viene eseguita dall'impianto audio, tutti i suoni associati al mix vengono selezionati per la riproduzione nella cabina principale.

Mirroring audio della zona passeggeri

La funzionalità di mirroring audio consente ai passeggeri di condividere l'audio. La funzionalità di mirroring duplica i dati audio in ogni zona audio in modo che tutti i passeggeri possano ascoltare lo stesso audio. In questo caso, l'audio in primo piano viene condiviso con i passeggeri coinvolti nel mirroring audio.

Routing audio con mirroring

Per attivare il mirroring audio sono necessari almeno due passeggeri. Di conseguenza, una configurazione audio con solo due zone audio per i passeggeri richiederebbe un dispositivo di uscita con mirroring. Con la definizione riportata sopra, è possibile avviare due sessioni di mirroring contemporaneamente.

La figura seguente mostra un diagramma semplificato per lo mirroring audio multizona tra due passeggeri. L'audio di entrambi i passeggeri viene instradato a un dispositivo di mirroring audio, bus_1000. L'HAL Audio duplica il segnale nelle zone di origine.

Flusso di lavoro per la configurazione delle zone dinamiche

Figura 6. Flusso di lavoro per la configurazione delle zone dinamiche.

Questo routing è attivo solo quando i passeggeri sono in modalità di mirroring. In caso contrario, i dispositivi corrispondenti alla zona audio vengono assegnati ai passeggeri. Quando il mirroring viene attivato per la prima volta per un passeggero, l'API AudioPolicy#setUserIdDeviceAffinity modifica il routing:

  • Il dispositivo di uscita multimediale per il passeggero viene rimosso dall'elenco dei dispositivi.
  • Dispositivo di output mirror aggiunto all'elenco dei dispositivi.
  • I dispositivi di uscita rimanenti per la zona audio del passeggero rimangono nell'elenco dei dispositivi.

Con l'elenco dei dispositivi, l'API viene chiamata con l'elenco aggiornato dei dispositivi e con l'ID utente del passeggero. L'immagine seguente mostra un diagramma di sequenza del flusso di lavoro di mirroring audio.

Flusso di lavoro di mirroring audio

Figura 7. Flusso di lavoro di mirroring audio.

Nella Figura 7, le API di gestione dell'audio dell'auto per la gestione del mirroring audio vengono richiamate dal Media System Service. Nello specifico, l'API per attivare il mirroring audio per l'utente 1 e l'utente 2, CarAudioManager#enableMirrorForAudioZones.

Il servizio audio per auto configura il routing audio per i passeggeri dell'utente come descritto sopra. Il servizio audio per auto invia anche un segnale all'HAL audio per configurare e duplicare l'audio dal dispositivo di mirroring alle zone corrispondenti.

Nell'immagine sopra, il servizio audio per auto invia mirroring_src=bus_1000;mirroring_dest=bus_10,bus_20

dove,

bus_1000 è il bus di origine e bus_10 e bus_20 sono i bus di destinazione.

Nel diagramma di sequenza non è mostrato il segnale inviato tramite l'APIAudioManager#setParameters, che raggiunge l'HAL tramite il servizio audio.

Quando viene disattivato il mirroring audio, viene inviato il seguente indicatore:mirroring_src=bus_1000;mirroring=off. Questo segnale può essere utilizzato dall'HAL per disattivare la duplicazione dell'audio quando il mirroring audio non è attivo. Per definire i dispositivi di mirroring audio, il file di configurazione dell'impianto audio dell'auto contiene una sezione denominata mirroringDevices, come mostrato nello snippet di seguito.

In questo snippet sono definiti due dispositivi di mirroring, bus_1000 e bus_2000, in modo che quattro passeggeri possano utilizzare il mirroring audio.

<carAudioConfiguration version="3">
   <mirroringDevices>
       <mirroringDevice address="bus_1000"/>
       <mirroringDevice address="bus_2000"/>
   </mirroringDevices>
  <zones>
    ....
  </zones>
</carAudioConfiguration>