Audiokonfiguration im Auto

In Android 10 ersetzt car_audio_configuration.xml car_volumes_groups.xml und IAudioControl.getBusForContext. Audiorichtlinie Dateien, die in der Regel in der Anbieterpartition enthalten sind, stehen für die Audiohardware Konfiguration des Boards. Alle Geräte, auf die verwiesen wird in car_audio_configuration.xml muss definiert werden in audio_policy_configuration.xml.

Abbildung 1 zeigt eine allgemeine Übersicht über den Audiodienst des Autos. Architektur, in der der Audiodienst des Autos die Audiokonfiguration des Autos liest -Datei, um den Ton für das Gerät einzurichten.

Audioarchitektur des Autos

Abbildung 1: Die Audioarchitektur eines Autos im Überblick.

Legen Sie die Audio-Konfigurationsdatei des Autos in vendor\etc\ ab oder system\etc\ auf dem Gerät mit dem vendor\etc\ dass der Auto-Audiodienst als Erstes nach der Datei gesucht hat. Das Auto Audiodienste lesen car_audio_configuration.xml, um die Audiodaten zu bestimmen Konfiguration.

Auto-Audiobereiche:

  • Jeder Audiobereich enthält eine eindeutige Audiozonen-ID.
  • Jeder Audiobereich kann einer Insassenzone zugeordnet werden.
  • Die Audioaktionen in den einzelnen Zonen sind unabhängig voneinander:

    • Audiofokus
    • Audio routing
    • Audio-Ducking
  • Autovolumengruppen:

    • Alle Audiogeräte mit einer Lautstärkegruppe werden gemeinsam gesteuert mit den gleichen Gewinnänderungen. Konfiguration der Audioverstärkung für alle Geräte in einer Gruppe identisch sein.

    • Zuordnung von Audiokontext zu Audiogeräten. Hiermit können Sie eine Audiodatei erstellen. der Audionutzungen einem Ausgabegerät zuordnet.

    • Alle Audiokontexte sollten innerhalb einer Zone dargestellt werden. Dadurch können Sie damit das Audiorouting für alle Verwendungen von Audioattributen korrekt eingerichtet ist.

Audiokontexte

Um die Konfiguration von AAOS-Audio zu vereinfachen, wurden ähnliche Nutzungen gruppiert in CarAudioContexts. Diese Audiokontexte werden im gesamten CarAudioService zum Definieren von Routing, Lautstärkegruppen, Audiofokus und Ducking zu verstehen. Die statischen Audio-Kontexte in AAOS sind unten aufgeführt.

In dieser Tabelle wird die Zuordnung zwischen Audiokontexten und -verwendungen beschrieben. Hervorgehoben werden Zeilen für eine neue Systemnutzung bereitgestellt.

Kontext für Auto-Audio Zugeordnete Attributverwendungen
MUSIK UNKNOWN
GAME
MEDIA
NAVIGATION ASSISTANCE_NAVIGATION_GUIDANCE
VOICE_BEFEHL ASSISTANT
ASSISTANCE_ACCESSIBILITY
ANRUFERKLÄRUNG NOTIFICATION_RINGTONE
ANRUFEN VOICE_COMMUNICATION
VOICE_COMMUNICATION_SIGNALING
WECKER ALARM
BENACHRICHTIGUNG NOTIFICATION
NOTIFICATION_*
SYSTEM_TON ASSISTANCE_SONIFICATION
NOTFALL EMERGENCY
SICHERHEIT SAFETY
Fahrzeugstatus VEHICLE_STATUS
MITTEILUNG ANNOUNCEMENT

AAOS-Routing aktivieren

Wenn Sie AAOS-basiertes Routing verwenden möchten, müssen Sie das Flag audioUseDynamicRouting auf true:

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

Wenn false, Routing und ein Großteil von CarAudioService deaktiviert sind und AAOS fällt auf das Standardverhalten von AudioService zurücksetzen.

Primäre Zone

Standardmäßig werden alle Audiodaten an die primäre Zone geleitet. Nur eine primäre Zone existiert, was in der Konfiguration durch das Attribut isPrimary="true" Der primären Zone wird automatisch die Audiomanager.PRIMARY_AUDIO_ZONE

Beispielkonfiguration (Version 2)

Ein Fahrzeug kann beispielsweise zwei Zonen haben: eine primäre Zone und einen Rücksitz. Unterhaltungssystem. In diesem Szenario können Sie eine mögliche car_audio_configuration.xml Version 2 wie folgt:

<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 diesem Beispiel trennt die primäre Zone einige Audiokontexte auf unterschiedlichen Geräten. Dadurch kann der HAL verschiedene Nachbearbeitungen und die Ausgabe auf den einzelnen Geräten mit der Hardware des Fahrzeugs zu mischen. Die Geräte sind in verschiedene Lautstärkegruppen unterteilt: Medien, Navigation, Anrufe, Wecker und Systemtöne. Wenn das System so konfiguriert ist, useFixedVolume, werden die Lautstärkepegel für jede Gruppe an den HAL übergeben. die auf die Ausgabe dieser Geräte angewendet werden soll.

Für die Hauptzone empfehlen wir, Systemtöne getrennt von anderen Geräusche. Dadurch können Fahrzeugtöne mit höherer Priorität behandelt werden. Der Auto-Audiodienst unterscheidet diese Unterscheidung bereits bei Fahrzeuggeräuschen in des Fokus und des Ducking-Managements. Ein Notfallgeräusch beispielsweise -Anfrage eine höhere Priorität als eine andere Fokusanfrage.

Der Einfachheit halber sind im Beispiel der sekundären Zone alle Audiokontexte an ein einzelnes Gerät und eine Lautstärkegruppe weitergeleitet.

Audiokonfiguration der Insassenzone

Mit Android 11 wurde car_audio_configuration.xml eingeführt. zwei neue Felder, audioZoneId und occupantZoneId. Du kannst audioZoneId verwenden um die Verwaltung der Audiozone zu steuern. Mit occupantZoneId können Sie auf Nutzer-ID basierende Weiterleitung.

Wir gehen noch einmal auf die obige Audiokonfiguration zurück, aber verwenden das neue Feld für der Belegungszone und der Audiozonen-ID zuordnen, wurde die neue Konfiguration ohne die Volumengruppendefinitionen können so eingerichtet werden.

<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>

Die obige Konfiguration definiert eine Zuordnung von primärer Zone zur Insassenzone 0 und audioZoneId 1 bis occupantZoneId 1. Im Allgemeinen ist jede Zuordnung zwischen Insassenbereich und Audiobereich konfiguriert werden. Die Zuordnung muss jedoch in zwei Gruppen. Die Regeln, durch die die beiden neuen Felder definiert wurden, sind unten aufgeführt.

  • audioZoneId für die primäre Zone ist immer die PRIMARY_AUDIO_ZONE-ID. Wenn isPrimary="true" ist definiert, dann wird audioZoneId nicht benötigt.

  • audioZoneId- und occupantZoneId-Nummern dürfen nicht wiederholt werden.

  • audioZoneId und occupantZoneId können nur eine 1:1-Zuordnung haben.

Android 14-Audiokonfiguration für Autos

Unter Android 14 führte AAOS den OEM-Plug-in-Dienst ein, So kannst du das Audioverhalten des Autos aktiver steuern Audiodienst Neben den neuen Plug-in-Diensten gibt es folgende Änderungen: wurde der Audio-Konfigurationsdatei des Autos hinzugefügt:

  • Vom OEM definierter Audiokontext für Autos
  • Dynamische Konfigurationen von nicht primären Zonen

Vom OEM definierter Audiokontext für Autos

Flexible Audiokonfiguration in Android aktivieren 14. Auto-Audiodienst ermöglicht, Sie sind anders als die oben definierten statischen Audiokontexte. Dieser OEM-definierte Kontext kann in der car_audio_configuration.xml definiert werden. Version 3-Datei zu öffnen.

Stattdessen werden die aktuell definierten statischen Audiokontexte verwendet. Die allgemeine Format des vom OEM definierten Audiokontexts für Autos ist unten dargestellt.

Die OEM-Kontexte erfordern jeweils eine name zusammen mit einer Liste von Audioattributen. Nutzung, die dem Kontext zugeordnet sind. Im obigen Beispiel sind zwei Kontexte definiert:

<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>
...
  • Der media-Kontext enthält AUDIO_USAGE_MEDIA und AUDIO_USAGE_UNKNOWN
  • game-Kontext enthält nur AUDIO_USAGE_GAME

Der Kontext muss oben in car_audio_configuration.xml definiert werden -Datei. Wenn die OEM-Kontexte definiert sind, wird die restliche Audiokonfiguration des Autos definiert. wie zuvor ausgeführt werden kann. Für den Audiokontext eines Autos gelten die folgenden Regeln:

  • OEM-Kontextdefinitionen sind optional. Der statische Audiokontext ist verwendet werden.

  • Wiederholen Sie Kontextnamen nicht.

  • Die Nutzung des Audioattributs sollte nicht mehreren Kontexten zugewiesen werden.

  • Alle in AudioAttributes definierten Audionutzungen sollten zur Erstellung von Kontext zu verstehen.

Genau genommen, die android.audio.policy.configuration.V7_0.AudioUsage Für den OEM-Audiokontext muss die Audionutzung als String dargestellt werden. Definition. Künftig werden neuere Verwendungszwecke für Audioattribute dem Kontext zur Fehlerreduzierung bei der Migration von einem Android-Gerät in eine andere Version.

Während der vom OEM definierte Kontext eingeführt wurde, um das OEM-Plug-in Audiodienst verwenden, kann er auch ohne den OEM-Plug-in-Dienst verwendet werden. Das Audio Verhalten ähnlich wie beim statischen Audiodienst:

  • Interaktionen mit Audiofokus: Audioattribut wird verwendet, um die beste von der Audiofokus-Interaktionsmatrix festgelegt wurde. Für Weitere Informationen

  • Mithilfe des Audioattributs zur Lautstärkeregelung für die Audioausgabe wird die beste Übereinstimmung ermittelt:

    • Volumengruppe basierend auf dem vom OEM definierten Kontext.
    • Priorität aus der Liste der statischen Volumes, die konfiguriert ist.
  • Audio-Ducking-Verhalten:

    • Die Verwendung des Audioattributs für den aktuellen Audiofokus wird für die Zuordnung zu Informationen zur Ausgabe von Audiogeräten gemäß Definition in der Audiokonfiguration des Autos -Datei.

    • Audioattribut wird verwendet, um den entsprechenden statischen Kontext Duck zuzuordnen. basierend auf der Static Audio-Ducking-Matrix.

Konfigurationen für dynamische Audiozonen

In Android 14 für dynamische Audiozonen wird das Audio-Konfigurationsschema des Autos zum Definieren von Audiobereichen ebenfalls auf Version 3 aktualisiert. Für das neue Schema muss eine Konfiguration eingerichtet werden für jede Zone.

<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>

Weitere Informationen finden Sie in der Datei Version 3, die in device/generic/car/emulator/audio/car_audio_configuration.xml Beginnt in Unter Android 14 kann die primäre Zone nur eine (1) Konfiguration. Nicht primäre Zonen können mehrere Konfigurationen haben. Die folgenden gelten die folgenden Regeln für Audiokonfigurationen von Autos:

  • Die primäre Audiozone kann nur eine Konfiguration haben.

  • Nicht primäre Audiozonen können mehrere Konfigurationen haben.

  • Der Name muss für jede Audiozone und -zonenkonfiguration eindeutig sein.

  • Innerhalb einer Audiozone können sich die Audiokonfigurationen unterscheiden:

    • Die Einrichtung von Volume-Gruppen muss nicht identisch sein.
    • Die Zuordnung des Audiokontexts muss nicht identisch sein.
  • Namen von Audioausgabegeräten sollten in verschiedenen Zonen oder Konfigurationen eindeutig sein. A Gerätenamen dürfen in Audiokonfigurationen oder -bereichen nur einmal vorkommen.

  • Audiogeräte, die zur selben Lautstärkegruppe gehören, sollten denselben Ton haben Konfigurationen vornehmen.

  • Für jedes Audio müssen alle Audiokontexte (OEM oder statisch) zugewiesen werden. Konfiguration.

Aufwärtskompatibilität

Auch wenn mit den neuen Versionen von car_audio_configuration.xml neue können Sie ältere Dateien auch in neueren Versionen der AAOS. OEMs, die auf neue Android-Versionen aktualisieren, können die car_audio_configuration.xml-Datei.

Um eine neue Funktion zu verwenden, für die neue Informationen im car_audio_configuration.xml, die Version muss aktualisiert werden. Es wird versucht, eine ältere Version einer Datei mit Informationen, die in dieser Version nicht unterstützt werden gibt IllegalStateException aus, wenn der Autodienst gestartet wird. Ausnahme enthält, welche Informationen verwendet werden und welche Mindestversion erforderlich ist.