Configurazione dell'audio dell'auto

In Android 10, car_audio_configuration.xml è stato sostituito car_volumes_groups.xml e IAudioControl.getBusForContext. Il criterio relativo all'audio di solito contenuti nella partizione del fornitore, rappresentano l'hardware audio configurazione della lavagna. Tutti i dispositivi a cui viene fatto riferimento in car_audio_configuration.xml deve essere definito in audio_policy_configuration.xml.

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

Panoramica dell'architettura dell'audio dell'auto

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

Inserisci il file di configurazione dell'audio dell'auto in vendor\etc\ oppure system\etc\ sul dispositivo, con vendor\etc\ essere il primo luogo in cui il servizio audio dell'auto cerca il file. L'auto servizi audio legge car_audio_configuration.xml per determinare l'audio configurazione.

Zone audio dell'auto:

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

    • Focus audio
    • Routing dell'audio
    • Attenuazione automatica audio
  • Gruppi volume 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 di un gruppo dovrebbero essere uguali.

    • Mappatura del contesto audio alla mappatura dei dispositivi audio. Usalo per creare un audio che associa gli utilizzi audio a un dispositivo di output.

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

Contesto audio

Per semplificare la configurazione dell'audio AAOS, sono stati raggruppati gli utilizzi simili in CarAudioContexts. Questi contesti audio vengono utilizzati CarAudioService per definire routing, gruppi di volume, messa a fuoco audio e Attenuazione automatica gestione dei dispositivi. I contesti audio statici presenti nel file AAOS sono elencati di seguito.

Questa tabella descrive la mappatura tra i contesti e gli utilizzi audio. In evidenza vengono fornite righe per un nuovo utilizzo da parte del sistema.

Contesto audioauto Attributi associati associati
MUSICA UNKNOWN
GAME
MEDIA
NAVIGAZIONE ASSISTANCE_NAVIGATION_GUIDANCE
COMANDO_VOCE ASSISTANT
ASSISTANCE_ACCESSIBILITY
CHIAMA_RING NOTIFICATION_RINGTONE
CHIAMA VOICE_COMMUNICATION
VOICE_COMMUNICATION_SIGNALING
SVEGLIA ALARM
NOTIFICA NOTIFICATION
NOTIFICATION_*
SYSTEM_AUDIO ASSISTANCE_SONIFICATION
EMERGENZA EMERGENCY
SICUREZZA SAFETY
STATO_VEICOLO VEHICLE_STATUS
ANNUNCIO ANNOUNCEMENT

Attiva 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 è disattivato e il valore AAOS diminuisce al comportamento predefinito di AudioService.

Zona principale

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

Configurazione di esempio (versione 2)

Ad esempio, un veicolo può avere due zone: una principale e un sedile posteriore. un sistema di intrattenimento basato su cloud. 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 su dispositivi diversi. Ciò consente all'HAL di applicare diverse applicazioni di post-elaborazione e mescolare l'output su ciascun dispositivo utilizzando l'hardware del veicolo. I dispositivi sono stati organizzati in diversi gruppi di volumi: contenuti multimediali, navigazione, chiamate, sveglie e suoni di sistema. Se il sistema è configurato useFixedVolume, i livelli di volume di ciascun gruppo vengono trasmessi all'HAL da applicare all'output di questi dispositivi.

Per la zona principale, consigliamo che i suoni dell'impianto siano separati dagli altri i suoni. In questo modo i suoni del veicolo vengono trattati con una priorità più elevata. Il servizio audio dell'auto già distingue i suoni dei veicoli nelle e la gestione dell'attenuazione automatica. Ad esempio, un avviso per i suoni di emergenza ha una priorità maggiore rispetto a un'altra richiesta di impostazione dello stato attivo.

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

Configurazione audio della zona degli occupanti

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

Riesaminare la configurazione audio precedente, ma utilizzare il nuovo campo per ID zona degli occupanti e mappatura ID zona audio, la nuova configurazione senza le definizioni dei gruppi di volume possono essere impostate 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 della zona principale alla zona degli occupanti 0 e da audioZoneId 1 a occupantZoneId 1. In generale, qualsiasi mappatura tra è possibile configurare la zona degli occupanti e la zona audio. Tuttavia, il mapping deve essere uno a uno. Le regole che hanno definito i due nuovi campi sono elencate di seguito.

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

  • I numeri audioZoneId e occupantZoneId non possono essere ripetuti.

  • audioZoneId e occupantZoneId possono avere una sola mappatura one-to-one.

Configurazione dell'audio dell'auto Android 14

In Android 14, AAOS ha introdotto il servizio di plug-in OEM, che ti consente di gestire più attivamente il comportamento audio controllato dall'auto servizio audio. Insieme ai nuovi servizi plug-in, vengono apportate le seguenti modifiche aggiunto al file di configurazione dell'audio dell'auto:

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

Contesto per audio dell'auto definito dall'OEM

Per attivare una configurazione audio flessibile, in Android 14, il servizio audio per auto consente di utilizzare l'audio raggruppati in modo diverso rispetto ai contesti audio statici definiti sopra. Questo contesto definito dall'OEM può essere definito nel car_audio_configuration.xml alla versione 3 del file.

Vengono invece utilizzati i contesti audio statici attualmente definiti. Informazioni generali del contesto audio per auto definito dall'OEM è mostrato di seguito.

Ciascun contesto OEM richiede un name e un elenco di attributi audio di utilizzo assegnate al contesto. Nell'esempio precedente, due contesti sono definita:

<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 di car_audio_configuration.xml . Quando sono definiti i contesti OEM, il resto della configurazione dell'audio dell'auto può procedere come prima. Al contesto dell'audio dell'auto si applicano le seguenti regole:

  • Le definizioni del contesto dell'OEM sono facoltative. Il contesto audio statico al suo posto.

  • 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 usati per creare contesto.

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

Il contesto definito dall'OEM è stato introdotto per espandere ulteriormente il plug-in OEM servizio audio, può essere utilizzato anche senza il servizio di plug-in OEM. L'audio è simile a quello del servizio audio statico:

  • Interazioni con focus audio. L'attributo audio viene utilizzato per determinare la migliore comportamento corrispondente impostato dalla matrice di interazione del focus audio. Per per i dettagli, consulta Audio focus.

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

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

    • L'utilizzo degli attributi audio per l'elemento attivo audio corrente viene usato per la mappatura al le informazioni del dispositivo audio in uscita come definito nella configurazione dell'audio dell'auto .

    • L'attributo audio viene utilizzato per mappare il contesto statico corrispondente a Anatra, in base alla matrice statica di attenuazione automatica audio.

Configurazioni dinamiche delle zone audio

In Android 14, per adattare le zone audio dinamiche configurazione, lo schema di configurazione dell'audio dell'auto per definire le zone audio è aggiornato alla versione 3. Il nuovo schema richiede l'impostazione 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 di versione 3 definito in device/generic/car/emulator/audio/car_audio_configuration.xml. A partire da Android 14, la zona principale può avere un solo (1) configurazione. Le zone non principali possono avere più configurazioni. Le seguenti alle configurazioni dell'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 e configurazione di 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 tra le zone o le configurazioni. R il nome del dispositivo deve apparire solo una volta in una configurazione audio o in una zona.

  • I dispositivi audio appartenenti allo stesso gruppo di volume devono avere lo stesso audio configurazioni del guadagno.

  • Devi assegnare tutti i contesti audio (OEM o statici) per ogni audio configurazione.

di Gemini Advanced.

Compatibilità con l'inoltro

Anche se le nuove versioni di car_audio_configuration.xml introducono nuove in ogni aggiornamento, puoi continuare a usare i file meno recenti nelle versioni più recenti Sistema operativo Android Automotive. Gli OEM che eseguono l'aggiornamento alle nuove versioni di Android possono riutilizzare gli car_audio_configuration.xml.

Per utilizzare una nuova funzione che richiede nuove informazioni contenute nel car_audio_configuration.xml, la versione deve essere aggiornata. Stai tentando di utilizzare Una versione precedente di un file con informazioni non supportate in quella versione del file genera un IllegalStateException quando viene avviato il servizio auto. L'eccezione contiene le informazioni pertinenti su quali informazioni vengono utilizzate la versione minima richiesta.