Configurazione dell'impianto audio dell'auto

In Android 10, car_audio_configuration.xml ha sostituito car_volumes_groups.xml e IAudioControl.getBusForContext. I file delle norme audio, in genere contenuti nella partizione del fornitore, rappresentano la configurazione dell'hardware audio della scheda. Tutti i dispositivi a cui viene fatto riferimento in car_audio_configuration.xml devono essere definiti in audio_policy_configuration.xml.

La figura 1 illustra una panoramica dell'architettura del servizio audio dell'auto in cui il servizio audio dell'auto legge il file di configurazione audio dell'auto per configurare l'audio per il dispositivo.

Panoramica dell'architettura audio dell'auto

Figura 1. Panoramica dell'architettura audio dell'auto.

Posiziona il file di configurazione dell'audio dell'auto in vendor/etc/ o system/etc/ sul dispositivo, con vendor/etc/ come primo percorso di ricerca del file da parte del servizio audio dell'auto. I servizi audio dell'auto leggono car_audio_configuration.xml per determinare la configurazione audio.

Zone audio dell'auto:

  • Ogni zona audio contiene un ID zona audio univoco.
  • Ogni zona audio può essere mappata a una zona occupante.
  • Le azioni audio in ogni zona sono indipendenti l'una dall'altra:

    • Focus audio
    • Routing dell'audio
    • Attenuazione automatica audio
  • Gruppi di volumi dell'auto:

    • Tutti i dispositivi audio che contengono un gruppo di volume vengono controllati insieme con le stesse modifiche del guadagno. La configurazione del guadagno audio per tutti i dispositivi di un gruppo deve essere la stessa.

    • Mappatura del contesto audio sui dispositivi audio. Utilizza questo elemento per creare un mix audio che mappa gli utilizzi audio a un dispositivo di output.

    • Tutti i contesti audio devono essere rappresentati all'interno di una zona. In questo modo il routing audio può essere configurato con precisione per tutti gli utilizzi degli attributi audio.

Contesti audio

Per semplificare la configurazione dell'audio AAOS, gli utilizzi simili sono stati raggruppati in CarAudioContexts. Questi contesti audio vengono utilizzati in CarAudioService per definire il routing, i gruppi di volume, la messa a fuoco audio e la gestione dell'attenuazione. I contesti audio statici in AAOS sono elencati in questa tabella.

Questa tabella descrive la mappatura tra contesti audio e utilizzi. Le righe evidenziate vengono fornite per un nuovo utilizzo del sistema.

CarAudioContext Associated AttributeUsages
MUSIC UNKNOWN
GAME
MEDIA
NAVIGATION ASSISTANCE_NAVIGATION_GUIDANCE
VOICE_COMMAND ASSISTANT
ASSISTANCE_ACCESSIBILITY
CALL_RING NOTIFICATION_RINGTONE
CALL VOICE_COMMUNICATION
VOICE_COMMUNICATION_SIGNALING
ALARM ALARM
NOTIFICATION NOTIFICATION
NOTIFICATION_*
SYSTEM_SOUND ASSISTANCE_SONIFICATION
EMERGENCY EMERGENCY
SAFETY SAFETY
VEHICLE_STATUS VEHICLE_STATUS
ANNOUNCEMENT ANNOUNCEMENT

Attivare il routing AAOS

Per utilizzare il routing basato su AAOS, devi impostare il flag audioUseDynamicRouting su true:

<resources>
    <bool name="audioUseDynamicRouting">true</bool>
</resources>

Quando false, il routing e gran parte di CarAudioService sono disattivati e AAOS torna al comportamento predefinito di AudioService.

Motore di criteri audio configurabile

Per estendere ulteriormente la gestione dell'audio dell'auto in Android 14, AAOS ha introdotto l'utilizzo della gestione dell'audio tramite il motore di policy audio configurabile (CAP). In questo modo, hai maggiore flessibilità per controllare il routing audio e la gestione del volume e puoi definire in modo versatile:

Puoi attivare il motore Configurable audio policy (CAP) utilizzando useCoreAudioVolume e useCoreAudioRouting. Per maggiori dettagli, vedi Motore Configurable audio policy.

Zona principale

Per impostazione predefinita, tutto l'audio viene indirizzato alla zona principale. Esiste una sola zona principale, indicata nella configurazione dall'attributo isPrimary="true". Alla zona principale viene assegnato automaticamente Audiomanager.PRIMARY_AUDIO_ZONE.

Configurazione di esempio (versione 2)

Ad esempio, un veicolo può avere due zone: una zona principale e un sistema di intrattenimento per i sedili posteriori. In questo scenario, puoi progettare una possibile versione 2 di car_audio_configuration.xml come segue:

<audioZoneConfiguration version="2.0">
       <zone name="primary zone" isPrimary="true">
           <volumeGroups>
               <group>
                   <device address="bus0_media_out">
                       <context context="music"/>
                       <context context="announcement"/>
                   </device>
                   <device address="bus3_call_ring_out">
                       <context context="call_ring"/>
                   </device>
                   <device address="bus6_notification_out">
                       <context context="notification"/>
                   </device>
               </group>
               <group>
                   <device address="bus1_navigation_out">
                       <context context="navigation"/>
                   </device>
                   <device address="bus2_voice_command_out">
                       <context context="voice_command"/>
                   </device>
               </group>
               <group>
                   <device address="bus4_call_out">
                       <context context="call"/>
                   </device>
               </group>
               <group>
                   <device address="bus5_alarm_out">
                       <context context="alarm"/>
                   </device>
               </group>
               <group>
                   <device address="bus7_system_sound_out">
                       <context context="system_sound"/>
                       <context context="emergency"/>
                       <context context="safety"/>
                       <context context="vehicle_status"/>
                   </device>
               </group>
           </volumeGroups>
       </zone>
        <zone name="rear seat zone" audioZoneId="1">
           <volumeGroups>
               <group>
                   <device address="bus100_rear_seat">
                       <context context="music"/>
                       <context context="navigation"/>
                       <context context="voice_command"/>
                       <context context="call_ring"/>
                       <context context="call"/>
                       <context context="alarm"/>
                       <context context="notification"/>
                       <context context="system_sound"/>
                       <context context="emergency"/>
                       <context context="safety"/>
                       <context context="vehicle_status"/>
                       <context context="announcement"/>
                   </device>
               </group>
           </volumeGroups>
    </zones>
</audioZoneConfiguration>

In questo esempio, la zona principale separa alcuni contesti audio su dispositivi diversi. Ciò consente all'HAL di applicare diversi effetti di post-elaborazione e di mixare l'output su ogni dispositivo utilizzando l'hardware del veicolo. I dispositivi sono stati suddivisi in diversi gruppi di volume: contenuti multimediali, navigazione, chiamate, sveglie e suoni di sistema. Se il sistema è configurato per useFixedVolume, i livelli di volume per ogni gruppo vengono passati all'HAL per essere applicati all'output di questi dispositivi.

Per la zona principale, consigliamo di separare i suoni di sistema dagli altri suoni. In questo modo, i suoni del veicolo vengono trattati con una priorità più elevata. Il servizio audio per auto fa già queste distinzioni per i suoni del veicolo in termini di gestione della messa a fuoco e dell'attenuazione. Ad esempio, una richiesta di messa a fuoco di un suono di emergenza ha una priorità maggiore rispetto a un'altra richiesta di messa a fuoco.

Nell'esempio di zona secondaria, tutti i contesti audio vengono indirizzati a un unico dispositivo e a un unico gruppo di volumi.

Definizione del gruppo di volumi per il motore CAP

Per utilizzare la gestione del volume tramite il motore CAP, come indicato in Motore di policy audio configurabile, la definizione del gruppo di volumi deve contenere anche un nome:


<group name="media">
  <device address="bus0_media_out">
    <context context="music"/>
    <context context="announcement"/>
  </device>
  <device address="bus3_call_ring_out">
     <context context="call_ring"/>
  </device>
  <device address="bus6_notification_out">
    <context context="notification"/>
  </device>
</group>
<group name="navigation">
  <device address="bus1_navigation_out">
    <context context="navigation"/>
  </device>
  <device address="bus2_voice_command_out">
    <context context="voice_command"/>
  </device>
</group>

Il nome di questo gruppo di volumi deve corrispondere al nome del volume definito nel motore CAP. Inoltre, useFixedVolume deve essere impostato anche su false. Per maggiori dettagli, consulta Flag di configurazione audio AAOS.

Configurazione audio della zona occupanti

In Android 11, car_audio_configuration.xml ha introdotto due nuovi campi, audioZoneId e occupantZoneId. Puoi utilizzare audioZoneId per controllare la gestione delle zone audio. Puoi utilizzare occupantZoneId per configurare il routing in base all'ID utente.

Se rivisiti la configurazione audio, ma utilizzi il nuovo campo per la mappatura dell'ID zona occupante e dell'ID zona audio, la nuova configurazione senza le definizioni del gruppo di volume può essere impostata nel seguente modo:

<audioZoneConfiguration version="2.0">
       <zone name="primary zone" isPrimary="true" occupantZoneId="0">
         ...
       </zone>
       <zone name="rear seat zone" audioZoneId="1" occupantZoneId="1">
         ...
       </zone>
    </zones>
</audioZoneConfiguration>

La configurazione definisce una mappatura per la zona principale alla zona occupante 0 e audioZoneId 1 a occupantZoneId 1. È possibile configurare qualsiasi mapping tra la zona occupante e la zona audio. Tuttavia, la mappatura deve essere one-to-one. Le regole che hanno definito i due nuovi campi sono:

  • audioZoneId per la zona principale è sempre l'ID PRIMARY_AUDIO_ZONE. Se isPrimary="true" è definito, audioZoneId non è necessario.

  • I numeri audioZoneId e occupantZoneId non possono essere ripetuti.

  • audioZoneId e occupantZoneId possono avere solo una mappatura uno a uno.

Configurazione audio dell'auto per Android 14

In Android 14, AAOS ha introdotto il servizio di plug-in OEM, che ti consente di gestire il comportamento audio supervisionato dal servizio audio dell'auto. Oltre ai nuovi servizi di plug-in, al file di configurazione dell'audio dell'auto vengono aggiunte le seguenti modifiche:

  • Contesto audio dell'auto definito dall'OEM
  • Configurazioni dinamiche delle zone non principali

Contesto audio dell'auto definito dall'OEM

Per attivare una configurazione audio flessibile, in Android 14 il servizio audio dell'auto consente di raggruppare gli utilizzi audio in modo diverso rispetto ai contesti audio statici definiti. Questo contesto definito dall'OEM può essere definito nel file car_audio_configuration.xml versione 3.

Vengono invece utilizzati i contesti audio statici predefiniti. Il formato generale del contesto audio dell'auto definito dal produttore OEM viene mostrato più avanti.

Ogni contesto OEM richiede un name e un elenco di attributi audio di utilizzo assegnati al contesto. Nell'esempio precedente, sono definiti due contesti:

<carAudioConfiguration version="3">
    <oemContexts>
        <oemContext name="media">
            <audioAttributes>
                <usage value="AUDIO_USAGE_MEDIA" />
    <usage value="AUDIO_USAGE_UNKNOWN"/>
            </audioAttributes>
        </oemContext>
        <oemContext name="game">
            <audioAttributes>
                <usage value="AUDIO_USAGE_GAME" />
            </audioAttributes>
        </oemContext>
...
  • Il contesto media contiene AUDIO_USAGE_MEDIA e AUDIO_USAGE_UNKNOWN
  • Il contesto game contiene solo AUDIO_USAGE_GAME

Il contesto deve essere definito nella parte superiore del file car_audio_configuration.xml. Una volta definiti i contesti OEM, il resto della configurazione dell'audio dell'auto può procedere come prima. Al contesto audio dell'auto si applicano le seguenti regole:

  • Le definizioni del contesto OEM sono facoltative. Viene utilizzato invece il contesto audio statico.

  • Non ripetere i nomi dei contesti.

  • Non assegnare l'utilizzo dell'attributo audio a più contesti.

  • Tutti gli utilizzi audio definiti in AudioAttributes devono essere utilizzati per costruire il contesto.

A rigor di termini, per la definizione del contesto audio OEM deve essere utilizzata la rappresentazione della stringa android.audio.policy.configuration.V7_0.AudioUsage dell'utilizzo dell'audio. In futuro, gli utilizzi più recenti degli attributi audio verranno assegnati al contesto più appropriato per ridurre gli errori durante la migrazione da una versione di Android a un'altra.

Sebbene il contesto definito dall'OEM sia stato introdotto per espandere ulteriormente il servizio audio del plug-in OEM, può comunque essere utilizzato senza il servizio plug-in OEM. Il comportamento dell'audio è simile a quello del servizio audio statico:

  • Interazioni con il focus audio. L'attributo Audio viene utilizzato per determinare il comportamento di corrispondenza migliore in base alla matrice di interazione della messa a fuoco audio. Per i dettagli, consulta Focus audio.

  • L'attributo audio Controllo del volume audio viene utilizzato per determinare la corrispondenza migliore:

    • Gruppo di volumi basato sul contesto definito dall'OEM.
    • Priorità dall'elenco statico dei volumi configurato.
  • Comportamento dell'attenuazione automatica audio:

    • L'utilizzo dell'attributo audio per lo stato attivo audio corrente viene utilizzato per mappare le informazioni sul dispositivo audio di output definite nel file di configurazione dell'audio dell'auto.

    • L'attributo audio viene utilizzato per mappare il contesto statico corrispondente all'abbassamento, in base alla matrice di abbassamento audio statico.

Strategie di prodotto del motore CAP

Quando un dispositivo deve utilizzare il motore CAP per la gestione del volume o del routing, il contesto definito dall'OEM deve corrispondere alla definizione della strategia di prodotto del motore CAP. In caso contrario, puoi utilizzare il contesto definito dal produttore OEM senza il motore CAP.

Per saperne di più, consulta la strategia di prodotto del motore CAP in AAOS.

Configurazioni delle zone audio dinamiche

In Android 14, per adattarsi a una configurazione dinamica delle zone audio, anche lo schema di configurazione dell'audio dell'auto per definire le zone audio è aggiornato alla versione 3. Il nuovo schema richiede la configurazione per ogni zona.

<carAudioConfiguration version="3">
    <!-- optional OEM context -->
    <oemContexts>
      <oemContext name="media">
        <audioAttributes>
          <usage value="AUDIO_USAGE_MEDIA" />
          <usage value="AUDIO_USAGE_UNKNOWN"/>
        </audioAttributes>
      </oemContext>
      <oemContext name="game">
        <audioAttributes>
          <usage value="AUDIO_USAGE_GAME" />
        </audioAttributes>
      </oemContext>
...
    </oemContexts>
  <zones>
    <zone name="primary zone" isPrimary="true" occupantZoneId="0">
      <zoneConfigs>
        <zoneConfig name="primary zone config 0" isDefault="true">
          <volumeGroups>
            <group>
              <device address="bus0_media_out">
                <context context="media"/>
            <context context="game"/>
                <context context="announcement"/>
              </device>
              <device address="bus6_notification_out">
                <context context="notification"/>
              </device>
            </group>
  ...
      </zoneConfigs>
    </zone
  </zones>

Per saperne di più, consulta il file della versione 3 definito in device/generic/car/emulator/audio/car_audio_configuration.xml. A partire da Android 14, la zona principale può avere una sola (1) configurazione. Le zone non principali possono avere più configurazioni. Le seguenti regole si applicano alle configurazioni audio dell'auto:

  • La zona audio principale può avere solo una configurazione.

  • Le zone audio non principali possono avere più configurazioni.

  • Il nome deve essere univoco per ogni zona audio e configurazione della zona audio.

  • All'interno di una zona audio, le configurazioni audio possono variare:

    • La configurazione dei gruppi di volumi non deve essere la stessa.
    • L'assegnazione del contesto audio non deve essere la stessa.
  • I nomi dei dispositivi di output audio devono essere univoci in tutte le zone o configurazioni. Il nome di un dispositivo deve essere visualizzato solo una volta in una configurazione audio o nelle zone.

  • I dispositivi audio appartenenti allo stesso gruppo di volume devono avere le stesse configurazioni di guadagno audio.

  • Tutti i contesti audio (OEM o statici) devono essere assegnati per ogni configurazione audio.

Compatibilità futura

Sebbene le nuove versioni di car_audio_configuration.xml introducano nuove funzionalità in ogni aggiornamento, puoi comunque utilizzare i file precedenti nelle versioni più recenti di AAOS. Gli OEM che eseguono l'aggiornamento a nuove versioni di Android possono riutilizzare il file car_audio_configuration.xml.

Per utilizzare una nuova funzionalità che richiede nuove informazioni contenute in car_audio_configuration.xml, la versione deve essere aggiornata. Il tentativo di utilizzare una versione precedente di un file con informazioni non supportate in quella versione genera un errore IllegalStateException all'avvio del servizio auto. Il messaggio di eccezione contiene le informazioni pertinenti su quali informazioni vengono utilizzate e quale versione minima è richiesta.