Configurazione dell'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 seguente illustra una panoramica di alto livello dell'architettura del servizio audio per auto in cui il servizio legge il file di configurazione dell'impianto audio per configurare l'audio del dispositivo.

Panoramica dell'architettura dell'impianto audio dell'auto

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

Posiziona il file di configurazione dell'impianto audio dell'auto in vendor\etc\ o system\etc\ sul dispositivo, dove vendor\etc\ è la prima posizione in cui il servizio di impianto audio dell'auto cerca il file. 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 volume dell'auto:

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

    • Mappatura del contesto audio ai dispositivi audio. Utilizzalo per creare un mix audio che mappa gli utilizzi audio a un dispositivo di uscita.

    • 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 dell'attributo audio.

Contesti audio

Per semplificare la configurazione dell'audio di AAOS, gli utilizzi simili sono stati raggruppati in CarAudioContexts. Questi contesti audio vengono utilizzati in tutto CarAudioService per definire il routing, i gruppi di volume, l'attenzione audio e la gestione del ducking. Di seguito sono elencati i contesti audio statici in AAOS.

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

CarAudioContext AttributeUsages associati
MUSICA UNKNOWN
GAME
MEDIA
NAVIGAZIONE ASSISTANCE_NAVIGATION_GUIDANCE
VOICE_COMMAND ASSISTANT
ASSISTANCE_ACCESSIBILITY
CALL_RING NOTIFICATION_RINGTONE
CHIAMA VOICE_COMMUNICATION
VOICE_COMMUNICATION_SIGNALING
SVEGLIA ALARM
NOTIFICA NOTIFICATION
NOTIFICATION_*
SYSTEM_SOUND ASSISTANCE_SONIFICATION
EMERGENZA EMERGENCY
SICUREZZA SAFETY
VEHICLE_STATUS VEHICLE_STATUS
ANNUNCIO 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, AAOS torna al comportamento predefinito del AudioService.

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 il valore Audiomanager.PRIMARY_AUDIO_ZONE.

Configurazione di esempio (versione 2)

Ad esempio, un veicolo potrebbe avere due zone, una principale e un sistema di intrattenimento per i sedili posteriori. In questo scenario, puoi progettare una possibile car_audio_configuration.xml versione 2 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 in diversi dispositivi. In questo modo, l'HAL può applicare diversi effetti di post-elaborazione e combinare l'output su ciascun dispositivo utilizzando l'hardware del veicolo. I dispositivi sono stati organizzati in diversi gruppi di volume: contenuti multimediali, navigazione, chiamate, sveglie e suoni di sistema. Se il sistema è configurato su useFixedVolume, i livelli di volume per ciascun gruppo vengono trasmessi all'HAL per essere applicati all'uscita di questi dispositivi.

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

Per semplicità, nell'esempio della zona secondaria tutti i contesti audio vengono indirizzati a un singolo dispositivo e a un gruppo di volumi.

Configurazione audio della zona passeggeri

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 esaminiamo di nuovo la configurazione audio riportata sopra, ma utilizziamo il nuovo campo per la mappatura dell'ID zona occupante e dell'ID zona audio, la nuova configurazione senza le definizioni dei gruppi di volume può essere impostata come segue.

<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 riportata sopra definisce una mappatura della zona principale alla zona occupante 0 e di audioZoneId 1 a occupantZoneId 1. In generale, è possibile configurare qualsiasi mappatura tra la zona occupanti e la zona audio. Tuttavia, la mappatura deve essere uno a uno. Le regole che hanno definito i due nuovi campi sono elencate di seguito.

  • 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 dell'impianto audio dell'auto con Android 14

In Android 14, AAOS ha introdotto il servizio plug-in OEM, che consente di gestire in modo più attivo il comportamento audio supervisionato dal servizio audio dell'auto. Oltre ai nuovi servizi plug-in, al file di configurazione dell'impianto 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 consentire una configurazione audio flessibile, in Android 14 il servizio audio per auto consente di raggruppare gli utilizzi audio in modo diverso rispetto ai contesti audio statici definiti sopra. Questo contesto definito dall'OEM può essere definito nel file car_audio_configuration.xml della versione 3.

Vengono utilizzati invece i contesti audio statici attualmente definiti. Il formato generale del contesto audio dell'auto definito dall'OEM è mostrato di seguito.

I contesti OEM richiedono ciascuno un name insieme a un elenco di utilizzo degli attributi audio 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'impianto audio dell'auto può procedere come prima. Al contesto audio per 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.

  • Per costruire il contesto devono essere utilizzati tutti gli utilizzi audio definiti in AudioAttributes.

Per la definizione del contesto audio OEM deve essere utilizzata la rappresentazione di stringa android.audio.policy.configuration.V7_0.AudioUsage dell'utilizzo dell'audio. In futuro, gli utilizzi degli attributi audio più recenti verranno assegnati al contesto più appropriato per ridurre gli errori durante la migrazione da una versione di Android all'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 del 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, come impostato dalla matrice di interazione dell'attenzione audio. Per maggiori dettagli, consulta Audio focus.

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

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

    • L'utilizzo dell'attributo audio per l'audio attualmente attivo viene utilizzato per mappare le informazioni sul dispositivo audio in uscita come definito nel file di configurazione dell'impianto audio dell'auto.

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

Configurazioni delle zone audio dinamiche

In Android 14, per supportare una configurazione dinamica delle zone audio, anche lo schema di configurazione dell'impianto audio dell'auto per la definizione delle zone audio viene aggiornato alla versione 3. Il nuovo schema richiede la configurazione di una 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 configurazione. Le zone non principali possono avere più configurazioni. Le seguenti regole si applicano alle configurazioni dell'impianto audio dell'auto:

  • La zona audio principale può avere una sola 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 uscita audio devono essere univoci nelle zone o nelle configurazioni. Il nome di un dispositivo deve apparire una sola 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à con le versioni successive

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 alle nuove versioni di Android possono riutilizzare il filecar_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 del file genera un errore IllegalStateException all'avvio del servizio auto. Il messaggio di eccezione contiene le informazioni pertinenti sulle informazioni utilizzate e sulla versione minima richiesta.