Configurazione audio per auto

In Android 10, car_audio_configuration.xml ha sostituito car_volumes_groups.xml e IAudioControl.getBusForContext . I file delle policy audio, tipicamente contenuti nella partizione del fornitore, rappresentano la configurazione hardware audio della scheda. Tutti i dispositivi a cui si fa riferimento in car_audio_configuration.xml devono essere definiti in audio_policy_configuration.xml .

La Figura 1 di seguito illustra una panoramica di alto livello dell'architettura del servizio audio per auto in cui il servizio audio per auto legge il file di configurazione audio per auto per impostare l'audio per il dispositivo.

Panoramica dell'architettura dell'audio per auto

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

Posizionare il file di configurazione dell'audio dell'auto in vendor\etc\ o system\etc\ sul dispositivo, con vendor\etc\ al primo posto in cui il file viene cercato dal servizio audio dell'auto. I servizi audio dell'auto leggono car_audio_configuration.xml per determinare la configurazione audio.

Zone audio per auto:

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

    • Messa a fuoco audio
    • Instradamento dell'audio
    • Ducking dell'audio
  • Gruppi di volume dell'auto:

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

    • Mappatura del contesto audio e dei dispositivi audio. Usalo per costruire un mix audio che associa gli utilizzi audio a un dispositivo di output.

    • Tutti i contesti audio dovrebbero essere rappresentati all'interno di una zona. Ciò consente di impostare accuratamente il routing audio per tutti gli utilizzi degli attributi audio.

Contesti audio

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

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

CarAudioContext Utilizzi degli attributi associati
MUSICA UNKNOWN
GAME
MEDIA
NAVIGAZIONE ASSISTANCE_NAVIGATION_GUIDANCE
COMANDO VOCALE ASSISTANT
ASSISTANCE_ACCESSIBILITY
CHIAMA_RING NOTIFICATION_RINGTONE
CHIAMATA VOICE_COMMUNICATION
VOICE_COMMUNICATION_SIGNALING
ALLARME ALARM
NOTIFICA NOTIFICATION
NOTIFICATION_*
SISTEMA_SUONO ASSISTANCE_SONIFICATION
EMERGENZA EMERGENCY
SICUREZZA SAFETY
STATO_VEICOLO VEHICLE_STATUS
ANNUNCIO ANNOUNCEMENT

Abilita il routing AAOS

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

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

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

Zona primaria

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

Configurazione di esempio (versione 2)

Ad esempio, un veicolo può avere due zone, una zona primaria e un sistema di intrattenimento per i sedili posteriori. In questo scenario, puoi progettare un 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 primaria separa alcuni contesti audio su dispositivi diversi. Ciò consente all'HAL di applicare diversi effetti di post-elaborazione e di mixare l'output su ciascun dispositivo utilizzando l'hardware del veicolo. I dispositivi sono stati organizzati in diversi gruppi di volume: media, navigazione, chiamate, allarmi e suoni di sistema. Se il sistema è configurato per useFixedVolume , i livelli di volume per ciascun gruppo vengono passati all'HAL per essere applicati all'output di questi dispositivi.

Per la zona primaria, consigliamo che i suoni del sistema siano separati dagli altri suoni. Ciò consente di trattare i suoni del veicolo con una priorità più alta. Il servizio car audio effettua già queste distinzioni per i suoni del veicolo in termini di messa a fuoco e gestione del ducking. Ad esempio, una richiesta di focus sonoro di emergenza ha una priorità più alta rispetto a un'altra richiesta di focus.

Per semplificare le cose, nell'esempio della zona secondaria tutti i contesti audio vengono instradati a un singolo dispositivo e un gruppo di volumi.

Configurazione audio 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. È possibile utilizzare occupantZoneId per configurare il routing in base all'ID utente.

Rivisitando la configurazione audio di cui sopra, ma utilizzando il nuovo campo per l'ID della zona occupante e la mappatura dell'ID della zona audio, la nuova configurazione senza le definizioni del gruppo di volumi 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 precedente definisce una mappatura per la zona primaria sulla zona dell'occupante 0 e audioZoneId 1 su occupantZoneId 1. In generale, è possibile configurare qualsiasi mappatura tra la zona dell'occupante e la zona audio. Tuttavia, la mappatura deve essere uno a uno. Di seguito sono elencate le regole che hanno definito i due nuovi campi.

  • audioZoneId per la zona primaria è 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 per auto 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. Insieme ai nuovi servizi plugin, vengono aggiunte le seguenti modifiche al file di configurazione dell'audio dell'auto:

  • Contesto audio per auto definito dall'OEM
  • Configurazioni dinamiche della zona non primaria

Contesto audio per auto definito dall'OEM

Per abilitare 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 versione 3.

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

Ciascun contesto OEM richiede un name insieme a un elenco di utilizzo degli attributi audio assegnati al contesto. Nell'esempio sopra, 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 car audio si applicano le seguenti regole:

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

  • Non ripetere i nomi dei contesti.

  • Non assegnare l'utilizzo degli attributi audio a più contesti.

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

A rigor di termini, la rappresentazione della stringa android.audio.policy.configuration.V7_0.AudioUsage dell'utilizzo dell'audio deve essere utilizzata per la definizione del contesto audio OEM. In futuro, i nuovi utilizzi degli attributi audio verranno assegnati al contesto più appropriato per ridurre gli errori durante la migrazione da una versione 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 del plug-in OEM. Il comportamento audio è simile a quello del servizio audio statico:

  • Interazioni focalizzate sull'audio. L'attributo audio viene utilizzato per determinare il miglior comportamento di corrispondenza impostato dalla matrice di interazione del focus audio. Per i dettagli, vedere Messa a fuoco audio .

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

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

    • L'utilizzo degli attributi audio per il focus audio corrente viene utilizzato per mappare le informazioni sul dispositivo audio di output come definito nel file di configurazione dell'audio dell'auto.

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

Configurazioni di zone audio dinamiche

In Android 14, per accogliere una configurazione di zone audio dinamiche, anche lo schema di configurazione dell'audio dell'auto per definire le zone audio viene aggiornato alla versione 3. Il nuovo schema richiede l'impostazione di una configurazione per ciascuna 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 ulteriori informazioni, vedere il file della versione 3 definito in device/generic/car/emulator/audio/car_audio_configuration.xml . A partire da Android 14, la zona primaria può avere solo una (1) configurazione. Le zone non primarie possono avere più configurazioni. Per le configurazioni audio dell'auto valgono le seguenti regole:

  • La zona audio primaria può avere una sola configurazione.

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

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

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

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

  • 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 ciascuna configurazione audio.

Compatibilità futura

Sebbene le nuove versioni di car_audio_configuration.xml introducono nuove funzionalità in ogni aggiornamento, puoi comunque utilizzare i file più vecchi nelle versioni più recenti di AAOS. Gli OEM che aggiornano alle 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 del file genera un'eccezione IllegalStateException quando viene avviato il servizio auto. Il messaggio di eccezione contiene le informazioni rilevanti su quali informazioni vengono utilizzate e quale versione minima è richiesta.