Volume-Verwaltung

Die Volume-Verwaltung ist in der Datei CarAudioService enthalten, die feste Volumes verwendet mit der Erwartung, dass Volumes von einer Hardware unterhalb des HAL angewendet werden Verstärker statt in der Software. CarAudioService organisiert Ausgabegeräte in Volumengruppen, um dieselben Steigerungen auf alle Geräte in Verbindung Volume-Gruppe.

Feste Volumes

Bei AAOS-Implementierungen wird die Lautstärke über einen Hardwareverstärker reguliert Softwaremixer. Um Nebenwirkungen zu vermeiden, setze das Flag config_useFixedVolume auf true (Overlay bei Bedarf):

<resources>
    <!-- Car uses hardware amplifier for volume. -->
    <bool name="config_useFixedVolume">true</bool>
</resources>

Wenn das Flag config_useFixedVolume nicht festgelegt (oder auf false gesetzt ist) Apps können AudioManager.setStreamVolume() aufrufen, um die Lautstärke nach Stream zu ändern den Softwaremixer ein. Dies ist aufgrund potenzieller Probleme nicht immer erwünscht. Auswirkungen auf andere Apps und die Tatsache, dass die Lautstärkeverringerung im Softwaremixer kann dazu führen, dass weniger signifikante Bits im Signal verfügbar sind, wenn dieses von den Hardwareverstärker.

Volume-Gruppen

Mit Volume-Gruppen werden die Volumes für eine Sammlung von Geräten in einem Audio verwaltet . Die Lautstärke kann für jede Lautstärkegruppe einzeln gesteuert werden. Die Die daraus resultierenden Steigerungen werden auf den verknüpften Geräten so konfiguriert, dass sie von der Verstärker des Fahrzeugs. Lautstärkeeinstellungen sind für den Nutzer dauerhaft und werden geladen wenn sich der Nutzer anmeldet.

Volume-Gruppen definieren

CarAudioService verwendet in car_audio_configuration.xml definierte Lautstärkegruppen:

<audioZoneConfiguration version="2.0">
    <zones>
        <zone name="primary zone" isPrimary="true">
            <volumeGroups>
                <group>
                    <device address="bus0_media_out">
                        <context context="music"/>
                    </device>
                </group>
                <group>
                    <device address="bus1_navigation_out">
                        <context context="navigation"/>
                    </device>
                    <device address="bus2_voice_command_out">
                        <context context="voice_command"/>
                    </device>
                </group>
                ...
            </volumeGroups>
        </zone>
     </zones>
</audioZoneConfiguration>

Jede Volume-Gruppe sollte ein oder mehrere Ausgabegeräte mit zugehörigen Adressen. Die Adressen müssen den in den folgenden Adressen definierten Ausgabegeräten entsprechen: audio_policy_configuration.xml

Verbesserungen für Volumengruppen konfigurieren

Jede Volume-Gruppe hat Mindest-, Höchst- und Standardwerte für die Verstärkung sowie ein Schrittgröße basierend auf den in audio_policy_configuration.xml konfigurierten Werten für die Geräte, die mit der Volume-Gruppe verknüpft sind.

<devicePort tagName="bus0_media_out" role="sink" type="AUDIO_DEVICE_OUT_BUS" address="bus0_media_out">
  <profile name="" format="AUDIO_FORMAT_PCM_16_BIT" samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
  <gains>
    <gain name="" mode="AUDIO_GAIN_MODE_JOINT"
      minValueMB="-3200" maxValueMB="600" defaultValueMB="0" stepValueMB="100"/>
  </gains>
</devicePort>

Während der Initialisierung prüft die Volume-Gruppe die Verstärkungswerte der zugehörigen Geräte und konfiguriert die Gruppe so:

  • Schrittgröße: Muss für alle Geräte gleich sein, die über die Lautstärkegruppe gesteuert werden.
  • Minimale Steigerung Kleinster Mindestgewinn unter den Geräten in der Gruppe.
  • Maximale Verstärkung: Höchster maximaler Gewinn unter den Geräten in der Gruppe.
  • Standardverstärkung: Höchster Standardgewinn aller Geräte in der Gruppe.

Aufgrund der Konfiguration dieser Werte ist es möglich, die Verstärkung Volume-Gruppe, die außerhalb des Bereichs liegt, der für ein Gerät, das mit dem Volume verknüpft ist, unterstützt wird Gruppe. In diesem Fall wird die Verstärkung für dieses Gerät auf den Mindestwert oder Maximale Steigerung, je nachdem, ob der Wert der Volumengruppe unter oder über dem Wert liegt Bereich.

Volume-Gruppen-IDs

Volume-Gruppen werden zur Laufzeit in der Reihenfolge identifiziert, die in der XML-Datei definiert ist. IDs innerhalb einer Audiozone reichen von 0 bis N-1, wobei N die Anzahl der in dieser Zone erstellen. So sind die IDs der Volume-Gruppen nicht eindeutig. zonenübergreifend. Diese IDs werden für CarAudioManager APIs verwendet, die mit Volume-Gruppen. Jede API, die ein groupId ohne zoneId annimmt ist standardmäßig die primäre Audiozone.

Volume-Verwaltung in mehreren Zonen

Jeder Audiobereich muss mindestens eine Lautstärkegruppe haben und jede Lautstärke sollte Gruppe nur mit einer einzelnen Audiozone verknüpft ist. Diese Beziehung ist definiert als Teil von car_audio_configuration.xml. Weitere Informationen findest du im obigen Beispiel. finden Sie im Abschnitt Volume-Gruppen definieren.

Die aktuellen Lautstärkepegel für jede Zone werden für den Benutzer, der mit in diesem Bereich. Diese Einstellungen sind zonenspezifisch, d. h., wenn sich ein Nutzer auf einem angezeigt, die der primären Zone zugeordnet sind, und melden sich später in einer Zone an. die mit einer sekundären Audiozone verknüpft sind, wurden die Lautstärkepegel geladen und der ersten Zone unterscheiden sich von denen für die sekundäre Zone.

Ereignisse mit Lautstärketasten verarbeiten

Android definiert mehrere Keycodes zur Lautstärkeregelung, darunter:

  • KEYCODE_VOLUME_UP
  • KEYCODE_VOLUME_DOWN
  • KEYCODE_VOLUME_MUTE

Standardmäßig leitet Android die Lautstärke-Schlüsselereignisse an Apps weiter. Automobilindustrie Implementierungen sollten die Verarbeitung dieser Schlüsselereignisse durch CarAudioService, die dann setGroupVolume oder setMasterMute aufruft, wie angemessen sein. Um dieses Verhalten zu erzwingen, legen Sie den Parameter Flag config_handleVolumeKeysInWindowManager in true:

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

Bei Volumen-Schlüsselereignissen kann derzeit nicht unterschieden werden, in welcher Zone Sie sind gedacht und es wird davon ausgegangen, dass sie alle mit dem primären Audiobereich. Wenn ein Lautstärke-Schlüsselereignis eingeht, ermittelt CarAudioService welche Lautstärkegruppe angepasst werden soll, indem die Audiokontexte für den aktiven Player und passen dann die Lautstärkegruppe für das Ausgabegerät an. die mit dem Audiokontext mit der höchsten Priorität verknüpft sind. Die Priorisierung festgelegt auf der Grundlage einer festen Reihenfolge, CarVolume.AUDIO_CONTEXT_VOLUME_PRIORITY

Überblenden und ausbalancieren

Beide Versionen des AudioControl HAL enthalten APIs zum Einstellen von Ein- und Ausblendung im Fahrzeug. Entsprechende System-APIs für „CarAudioManager“-Karten-/Ticketwerte AudioControl-HAL. Diese APIs erfordern android.car.permission.CAR_CONTROL_AUDIO_VOLUME Die AudioControl-APIs sind:

  • setBalanceTowardRight(float value) stellt die Lautstärke des Lautsprechers in Richtung das rechte (+) oder die linke (-) Seite des Autos.

    • 0,0 ist zentriert
    • +1,0 entspricht vollkommen
    • -1,0 ist vollständig links
    • Ein Wert außerhalb des Bereichs von -1 bis 1 ist ein Fehler.
  • setFadeTowardFront(float value) stellt die Lautstärke des Lautsprechers in Richtung vorne (+) oder hinten (-) am Fahrzeug.

    • 0,0 ist zentriert
    • +1,0 bedeutet vollständig nach vorn
    • -1,0 ist vollständig hinten
    • Ein Wert außerhalb des Bereichs von -1 bis 1 ist ein Fehler.

Sie entscheiden, wie diese Werte angewendet werden sollen und wie die Werte Nutzenden. Sie könnten ausschließlich auf Medien oder allgemein auf alle Android-Töne Mit Android 11 zum Anwenden von Audioeffekten auf Ausgabegeräte. Damit ist es möglich, oder über Audioeffekte auf den entsprechenden und nicht über diese APIs.

Audio-Ducking

Audio-Ducking tritt auf, wenn das Fahrzeug die Verstärkung für einen Stream reduziert, sodass ein anderer gleichzeitig abgespielter Stream deutlicher zu hören ist. In AAOS Audio-Ducking wird vom HAL implementiert. Android hat keine Kontrolle über Töne über das Betriebssystem hinaus. In Android 11 sind die wichtigsten Informationen HAL für Ducking-Entscheidungen zur Verfügung steht, ist, ob zwei Ausgaben haben beide aktive Streams.

Wann du dich verstecken solltest

Es ist zwar Aufgabe des jeweiligen OEMs, zu bestimmen, wie der Ducking-Vorgang vom HAL, empfehlen wir die folgenden Richtlinien.

  • Mehrere Streams werden unter Android häufig abgespielt, wenn zwei Apps oder Dienste Audiofokus gleichzeitig. Um zu erfahren, wann Android gleichzeitige finden Sie in der Interaktionsmatrix unter Einschränkungstypen. Mit der Einführung des Auto-Audio-Plug-ins ist dies auch Audiofokus-Verwaltung

  • Alle Streams, die von Android vermischt werden, werden vor der Nutzung angewendet. Bei jedem Stream, der bei gleichzeitiger Wiedergabe dackt werden soll, mit einem anderen an separate Ausgabegeräte geleitet werden, damit der HAL vor dem Mischen eine Ducking-Methode angewendet.

Wir empfehlen, das Ducking der folgenden potenziellen gleichzeitigen Interaktionen vorzunehmen.

Interaktion Aktion
EMERGENCY Alle außer SAFETY werden ausgeblendet oder stummgeschaltet
SAFETY Entpackt alles außer EMERGENCY
NAVIGATION Entpackt alles außer SAFETY und EMERGENCY
CALL Wir entfernen alles außer SAFETY, EMERGENCY, und NAVIGATION
VOICE Enten CALL_RING
VEHICLE_SOUNDS Du entscheidest, wie wichtig der aktive Ton ist und ob er entwirft.
MUSIC und ANNOUNCEMENT Von allem verdorben. Ausnahmen sind Töne für die Touchbedienung, die SYSTEM_SOUND

Überlegungen beim Entziehen

Einige Apps und Dienste, wie die Navigation oder ein Assistent, verwenden möglicherweise mehrere Aktionen ausführen können. Aggressives Entucken vermeiden, wenn ein Stream von Daten läuft fließt nicht mehr durch die Ausgabegeräte, um sicherzustellen, dass die Medien nicht wieder voll zurückkehren. vor der nächsten Wiedergabe aus der Navigation Assistant-App gestartet.

Bei Fahrzeugen mit mehreren Geräuschphasen und ausreichend Isolation: Audio in verschiedene Bereiche des Autos zu leiten, anstatt es zu verdauen. Beispiel: Navigationsanweisungen können an die Kopfstützenlautsprecher des Fahrers geleitet werden, während er die Musik im gesamten Innenraum mit normaler Lautstärke weiter abzuspielen.

Sicherheitskritische Geräusche

Einführung von Android 11 HAL-Audio-Fokus-APIs Der HAL stellt sicher, sicherheitsrelevante Geräusche haben Vorrang vor anderen Geräuschen. Wenn der HAL Audio enthält sich auf USAGE_EMERGENCY konzentrieren, können wir nicht garantieren, dass Apps und Dienste Android spielt keine Töne ab. Der HAL legt fest, welche Streams von Android gemischt oder stummgeschaltet, um sicherheitskritische Geräusche abzuspielen.

Benutzeroberfläche für Lautstärkeeinstellungen konfigurieren

AAOS entkoppelt die UI für Volume-Einstellungen von der Konfiguration der Volume-Gruppe. Diese können wie in Konfigurieren Sie die Steigerung der Volumengruppen. Durch diese Trennung dass keine Änderungen erforderlich sind, wenn sich die Konfiguration von Volume-Gruppen ändert.

In der Benutzeroberfläche der Autoeinstellungen: packages/apps/Car/Settings/res/xml/car_volume_items.xml enthält die UI-Elemente (Titel- und Symbolressourcen), die mit den einzelnen „AudioAttributes.USAGE“ definiert. Diese Datei bietet ein angemessenes Rendering. des definierten VolumeGroups unter Verwendung von Ressourcen, die mit der ersten erkannte Nutzung, die in jeder VolumeGroup enthalten ist.

Im folgenden Beispiel wird ein VolumeGroup so definiert, dass es Folgendes beinhaltet: voice_communication und voice_communication_signalling. Standardeinstellung Durch die Implementierung der Benutzeroberfläche für Autoeinstellungen wird das VolumeGroup mithilfe der Methode Ressourcen, die mit voice_communication verknüpft sind, da dies die erste Matc ist in der Datei.

<carVolumeItems xmlns:car="http://schemas.android.com/apk/res-auto">
    <item car:usage="voice_communication"
          car:title="@*android:string/volume_call"
          car:icon="@*android:drawable/ic_audio_ring_notif"/>
    <item car:usage="voice_communication_signalling"
          car:title="@*android:string/volume_call"
          car:icon="@*android:drawable/ic_audio_ring_notif"/>
    <item car:usage="media"
          car:title="@*android:string/volume_music"
          car:icon="@*android:drawable/ic_audio_media"/>
    <item car:usage="game"
          car:title="@*android:string/volume_music"
          car:icon="@*android:drawable/ic_audio_media"/>
    <item car:usage="alarm"
          car:title="@*android:string/volume_alarm"
          car:icon="@*android:drawable/ic_audio_alarm"/>
    <item car:usage="assistance_navigation_guidance"
          car:title="@string/navi_volume_title"
          car:icon="@drawable/ic_audio_navi"/>
    <item car:usage="notification_ringtone"
          car:title="@*android:string/volume_ringtone"
          car:icon="@*android:drawable/ic_audio_ring_notif"/>
    <item car:usage="assistant"
          car:title="@*android:string/volume_unknown"
          car:icon="@*android:drawable/ic_audio_vol"/>
    <item car:usage="notification"
          car:title="@*android:string/volume_notification"
          car:icon="@*android:drawable/ic_audio_ring_notif"/>
    <item car:usage="notification_communication_request"
          car:title="@*android:string/volume_notification"
          car:icon="@*android:drawable/ic_audio_ring_notif"/>
    <item car:usage="notification_communication_instant"
          car:title="@*android:string/volume_notification"
          car:icon="@*android:drawable/ic_audio_ring_notif"/>
    <item car:usage="notification_communication_delayed"
          car:title="@*android:string/volume_notification"
          car:icon="@*android:drawable/ic_audio_ring_notif"/>
    <item car:usage="notification_event"
          car:title="@*android:string/volume_notification"
          car:icon="@*android:drawable/ic_audio_ring_notif"/>
    <item car:usage="assistance_accessibility"
          car:title="@*android:string/volume_notification"
          car:icon="@*android:drawable/ic_audio_ring_notif"/>
    <item car:usage="assistance_sonification"
          car:title="@*android:string/volume_unknown"
          car:icon="@*android:drawable/ic_audio_vol"/>
    <item car:usage="unknown"
          car:title="@*android:string/volume_unknown"
          car:icon="@*android:drawable/ic_audio_vol"/>
</carVolumeItems>

Die in der obigen Konfiguration verwendeten Attribute und Werte werden in deklariert. packages/apps/Car/Settings/res/values/attrs.xml Die Benutzeroberfläche für die Lautstärkeeinstellungen die folgenden VolumeGroup-basierten CarAudioManager APIs:

  • getVolumeGroupCount(), um zu erfahren, wie viele Steuerelemente gezeichnet werden sollen.
  • getGroupMinVolume() und getGroupMaxVolume(), um die Unter- und Obergrenze zu erhalten.
  • getGroupVolume(), um die aktuelle Lautstärke abzurufen.
  • registerVolumeChangeObserver(), um über Änderungen der Lautstärke informiert zu werden.

Ereignis für Autovolumengruppe

In der Automobilbranche ist die Ein/Aus-Schaltfläche für die Lautstärkeregelung und die Stummschaltung kontextabhängig. Grundlagen, die die Aktionen bestimmter Apps definieren können, z. B. die Lautstärke Einstellungen. Die aktuelle Lautstärke und Stummschaltung des Callbacks vom Auto-Audio-Stack nur wenige Kontextinformationen haben. Für Anwendungsfälle der Automobilbranche und für die Zukunft wurde „CarVolumeGroupEvent“ zu Android 14 hinzugefügt. Jedes Ereignis enthält drei wichtige Arten von Informationen:

  • Liste mit CarVolumeGroupInfo
  • EventTypes (Bitzuordnung)
  • Liste mit ExtraInfos

AutoVolumengruppeninfo

Der Empfänger des Ereignis-Callbacks kann sofort auf die Liste der betroffenen Autos zugreifen Informationen zur Volume-Gruppe. Das bedeutet, die App muss keine zusätzliche Aufrufe an das Auto-Audio-Framework, um den neuesten Status zu erhalten. Es kann verwenden Sie einfach den empfangenen CarVolumeGroupInfos, um die UI oder interne Bundesländer. Um Apps besser unterstützen zu können, haben sich die Änderungen bei der Lautstärke im Auto geändert. -Gruppen werden auch als Teil von EventTypes bereitgestellt, wie unten erläutert.

Ereignistypen

Definiert, welcher Aspekt von CarVolumeGroupInfo geändert wurde. Apps können damit Folgendes tun: um Änderungen zu identifizieren und die erforderlichen Maßnahmen zu ergreifen. Beispiel: EVENT_TYPE_VOLUME_MAX_INDEX_CHANGED gibt an, dass die entsprechenden CarVolumeGroups Der Index für die Verstärkung des maximalen Volumens hat sich geändert und kann abgefragt werden über CarVolumeGroupInfo.getMaxVolumeGainIndex()

Die folgende Tabelle zeigt die Beziehung zwischen EventType und CarVolumeGroupInfo.

Ereignistyp AutoVolumengruppeninfo
EVENT_TYPE_VOLUME_GAIN_INDEX_GEÄNDERT CarVolumeGroupInfo.getVolumeGainIndex()
EVENT_TYPE_VOLUME_MIN_INDEX_GEÄNDERT CarVolumeGroupInfo.getMinVolumeGainIndex().
EVENT_TYPE_VOLUME_MAX_INDEX_GEÄNDERT CarVolumeGroupInfo.getMaxVolumeGainIndex()
EVENT_TYPE_MUTE_CHANGED CarVolumeGroupInfo.isMuted()
EVENT_TYPE_VOLUME_BLOCKED_CHANGED CarVolumeGroupInfo.isBlocking()
VERANSTALTUNGSTYP_ATTENUATION_GEÄNDERT CarVolumeGroupInfo.isAttenuated()
EVENT_TYPE_ZONE_CONFIGURATION_GEÄNDERT CarVolumeGroupInfo.getAudioAttributes()

Zusätzliche Informationen

Liefert zusätzliche Informationen darüber, warum sich CarVolumeGroup geändert hat. Apps kann anhand dieser Informationen zusätzlichen Kontext liefern, um den Nutzer zu handeln oder zu benachrichtigen. Beispiel: EXTRA_INFO_TRANSIENT_ATTENUATION_THERMAL zeigt eine aktive vorübergehende Abschwächung aufgrund einer thermischen Überlastung an. Die App kann den Nutzer informieren, wenn er versucht, die Lautstärke zu erhöhen.

Wir setzen keine Vorgehensweise für ExtraInfos durch. Es bleibt Ihnen überlassen, um den Prozess anhand von ExtraInfos zu bestimmen. Wenn beispielsweise die Dämpfung aufgrund von EXTRA_INFO_TRANSIENT_ATTENUATION_DUCKED aktiv ist, können Sie sich auch für Blenden Sie die Benutzeroberfläche der Lautstärkeleiste anfangs ein, um zu verhindern, dass der Nutzer die Lautstärke ändert. Andere können einen Toast zeigen, dass das Enten aktiv ist, und dem Nutzer um die Lautstärke zu ändern.

Das Audio-Framework des Autos hängt vom AudioControl-HAL-IAudioGainCallback ab, um geben Sie den vorgeschlagenen ExtraInfos an. Weitere Informationen finden Sie unter Rückruf bei Audioverstärkung:

CarVolumeGroupEvent lässt sich skalieren, um zukünftige Anforderungen des Audio-Frameworks von Autos zu erfüllen. Mi. die neue Funktionen nur über CarVolumeGroupEvent unterstützen möchten. Mi. App-Entwicklern wird dringend empfohlen, CarVolumeGroupEvent zur Gruppenlautstärke und Stummschaltung ändern.

Rückruf für Auto-Lautstärkegruppen-Ereignis

Android 14 bietet einen neuen Callback für privilegierte und Plattform-Apps registrieren und über CarVolumeGroupEvents benachrichtigt werden.

  • Registriere dich für den Rückruf mithilfe von CarAudioManager#registerCarVolumeGroupEventCallback()

  • Um die Registrierung des Callbacks aufzuheben, verwende CarAudioManager#unregisterCarVolumeGroupEventCallback()

Wenn sich eine Anwendung mit der neuen CarVolumeGroupEventCallback und der alten CarVolumeCallback, wird das Ereignis CarVolumeGroupEventCallbacks priorisiert. Der Audio-Stack des Autos löst CarVolumeCallback nicht mehr aus. Dadurch wird verhindert, doppelte Trigger in derselben App für dasselbe Ereignis.

Wir empfehlen Ihnen dringend, CarVolumeGroupEventCallback zur Verwaltung von Gruppenlautstärke und Stummschaltung ändern.

Callback für Audioverstärkung

Seit Android 13 kann AudioControl HAL asynchroner Callback zur Verwaltung von Aktualisierungen des Lautstärkepegels aufgrund von Audiosystem des Autos.

HAL API

AudioControl @2.0 AIDL

In Version 2.0 von AudioControl AIDL HAL wird die folgende API hinzugefügt:

API Zweck
IAudioControl#registerGainCallback Registriert eine Instanz von IAudioGainCallback beim AudioControl-HAL.
IAudioGainCallback#onAudioDeviceGainsChanged Asynchroner Callback, um über Änderungen an der Konfiguration der Audioverstärkung zu informieren.

Der AudioControl-HAL-Callback enthält Listen mit Gründen und den entsprechenden AudioGainConfigInfo mit:

  • Zonen-ID
  • Adresse des Geräteports
  • Volumenindex > Index kann entweder ein eingeschränkter Index oder ein Aktualisierungsindex sein.

Die Gründe können grob kategorisiert werden als:

  • Einschränkungen. Vorübergehende Änderung des Verhaltens für Lautstärke und Stummschaltung.
  • Gründe aktualisieren: Dauerhafte Änderung des Lautstärkeverhaltens.

Einschränkungstypen

Ab dem AudioControl HAL AIDL V3 werden folgende Typen unterstützt: Einschränkungen:

  • Stummschalten
  • Blockierungen
  • Einschränkung
  • Dämpfung
Aktive Einschränkung Vom Nutzer ausgelöste Lautstärkeänderung Ein/Aus-Schaltfläche für vom Nutzer ausgelöste Stummschaltung
Stummschalten ❌ Vorstellung ❌ (Stummschaltung aufheben)

✔ (Stummschalten)
Blockierungen ❌ Vorstellung
Einschränkung ❌ (über Limit)

✔ (unter dem Limit)
Dämpfung

Die Priorität zwischen den Einschränkungen ist „Stummschalten“ > Blockierung > Einschränkung > Attenuierung.

Einschränkungen beim Stummschalten

Für das Stummschalten gelten folgende Einschränkungen:

  • Reasons.TCU_MUTE
  • Reasons.REMOTE_MUTE

Das Audio-Framework des Autos behält intern diese beiden Stummschaltungsstatus bei:

  • Nutzer ignorieren: Wird je nach Nutzeranfrage umgeschaltet, entweder über CarAudioManager oder Schlüsselereignisse.

  • HAL-Stummschaltung. Aufgrund von Einschränkungen beim Stummschalten über AudioGain umgeschaltet Callback des Nutzers an.

Bei Hörern wie der App „Einstellungen“ wird die Stummschaltung der Lautstärkegruppe für die gesamte Stummschaltung (CarVolumeGroupInfo.isMuted()) basiert darauf, ob einer der sind Stummschaltungen aktiviert.

Wenn die HAL-Stummschaltung aktiviert ist, werden alle eingehenden Lautstärken geändert und die Stummschaltung der Gruppe wird aufgehoben -Anfragen werden für die Dauer der Einschränkung ignoriert.

Interaktionsfall: HAL-Stummschaltung ist aktiv und Nutzeranfragen zur Stummschaltung

Wenn die HAL-Stummschaltung aktiviert und die Nutzerstummschaltung deaktiviert ist:

  • Stummschaltung der Lautstärkegruppe insgesamt zu „true“ geändert.
  • Anfragen vom Nutzer zur Aktivierung der Stummschaltung werden verarbeitet.
    • Grund: Anfragen zur Stummschaltung von Nutzern sollten immer berücksichtigt werden, um die Privatsphäre der Nutzer zu schützen.

Wenn die HAL-Stummschaltung aktiviert und die Nutzerstummschaltung aktiviert ist:

  • Stummschaltung der Lautstärkegruppe insgesamt zu „true“ geändert.

  • Anfragen vom Nutzer zur Deaktivierung der Stummschaltung werden NOT verarbeitet. Im Cache gespeicherter Nutzer bleibt die Stummschaltung aktiviert.

    • Grund: Anfragen zum Aufheben der Stummschaltung werden nur dann berücksichtigt, wenn keine aktiven Einschränkungen vorhanden sind.

    • Ursache: Wenn Sie die Stummschaltung im Cache aufheben, kann dies zu einer ungewollten Geräuschexplosion und die Sicherheit der Nutzenden gefährden. Dies gilt insbesondere, wenn die Stummschaltung aktiviert ist. über alle Zündungszyklen hinweg, was die Wahrnehmung des Schallpegels Wahrnehmung.

Interaktionsfall: HAL-Stummschaltung aktiviert und deaktiviert, solange die Nutzerstummschaltung nicht geändert wurde

Durch Ein-/Ausschalten der HAL-Stummschaltung wird der Status der Stummschaltung der Lautstärkegruppe insgesamt geändert. Es funktioniert jedoch nicht direkt aktualisieren. Wenn die Stummschaltung durch Nutzer und die HAL-Stummschaltung deaktiviert sind -Rückruf zur Aktivierung geht ein:

  • Stummschaltung der Lautstärkegruppe insgesamt zu „true“ geändert.
  • Anfragen vom Nutzer zum Ändern der Lautstärke werden NOT bearbeitet, während die HAL-Stummschaltung aktiviert ist aktiviert ist.

    • Ursache: Der Nutzer kann den Ton nicht wahrnehmen, wenn die Stummschaltung aktiviert ist. Erlaubt Lautstärkeänderungen können zu einer Geräuschexplosion führen und die Sicherheit des Nutzers gefährden.

    • Ursache: Lautstärke-Apps können für Rückrufe registriert und eine Aufhebung der Stummschaltung auslösen. (CarAudioManager.setVolumeGroupMute(...,/* mute=*/ true,..)) automatisch ohne Eingriff des Nutzers, wenn dies das erwartete Verhalten ist. durch den OEM.

Wenn die HAL-Stummschaltung deaktiviert ist und die Nutzerstummschaltung deaktiviert ist:

  • Stummschaltung der Lautstärkegruppe wird zu „false“ geändert.

    Grund: Wenn die Stummschaltung fixiert wird und der Nutzer aufgefordert wird, die Stummschaltung aufzuheben, den Nutzer unnötigerweise unterbrechen, wenn die Stummschaltung häufig gewechselt wird.

  • Anfragen von Nutzern zur Änderung des Volumens werden normal verarbeitet.

Blockierungen

Folgende Einschränkungen gelten für die Blockierung:

  • Reasons.FORCED_MASTER_MUTE
  • Reasons.REMOTE_MUTE
  • Reasons.TCU_MUTE.

Wenn Blockierungseinschränkungen aktiv sind, werden Anfragen von Nutzern an Folgendes gesendet:

  • Änderungsvolumen werden nicht verarbeitet.
  • Die Ein/Aus-Schaltfläche wurde stummgeschaltet.

Einschränkung

Es gelten die folgenden Einschränkungen:

  • Reasons.THERMAL_LIMITATION
  • Reasons.SUSPEND_EXIT_VOL_LIMITATION

Wenn die Beschränkungsbeschränkungen aktiv sind, werden Anfragen von Nutzern an Folgendes gesendet:

  • Lautstärke ändern:

    • Innerhalb der Begrenzung werden verarbeitet
    • Über dem Limit überschrittene Einschränkungen werden nicht verarbeitet.
  • Die Ein/Aus-Schaltfläche wurde stummgeschaltet.

Dämpfung

Mögliche Einschränkungen für die Dämpfung:

  • Reasons.ADAS_DUCKING
  • Reasons.NAV_DUCKING
  • Reasons.PROJECTION_DUCKING

Wenn Einschränkungen der Dämpfung aktiv sind, werden Anfragen von Nutzern an Folgendes gesendet:

  • Die Änderung der Lautstärke wird verarbeitet. Die neue aktuelle Lautstärke ist auf die gedämpfter Lautstärke statt auf die bisherige Lautstärke). Zukünftige Volumenänderungen auf dieser Stufe erstellt werden.

  • Die Ein/Aus-Schaltfläche wurde stummgeschaltet.

Auf Index aktualisieren

Folgendes wird als asynchrone Volumenindexaktualisierung berücksichtigt: Reasons.EXTERNAL_AMP_VOL_FEEDBACK

Aus diesem Grund kann AudioControl HAL den aktuellen Index der Lautstärkegruppe aktualisieren. mit dem angegebenen Index. Sie wird hauptsächlich als Feedback vom Audiosystem verwendet. für die Anfrage zur Lautstärkeänderung vom Auto-Audiosystem. Die Indexaktualisierung ist kommunizierten auch als CarVolumeGroupEvent-Callback zur Synchronisierung mit Apps. auf den Index.

Beispiele

Anwendungsfall: Der Nutzer aktualisiert den Lautstärkeindex auf 30

  • Der Nutzer verwendet die Lautstärke-App, um den Lautstärkeindex auf 30 zu ändern.

  • Dieser Index wird in Lautstärkeverstärkung umgewandelt und an Audio HAL gesendet.

  • Anbieterimplementierungen von Audio HAL erhalten die neue Volumenzunahme und -aktualisierung (z. B. ein externer Verstärker).

  • Das Audiosystem reagiert, dass der Lautstärkepegel nur auf Index 15 aktualisiert wird. aus Gründen, die Android nicht bekannt sind.

  • Anbieterimplementierungen von AudioControl HAL-Triggern:

    IAudioGainCallback.onAudioDeviceGainsChanged(EXTERNAL_AMP_VOL_FEEDBACK, {...,  15 /* New index */})
    
  • Der Audiodienst des Autos verwendet den neuen Index aus dem Rückruf, der für Persistenz und Rückrufe an die Lautstärke-App. Der vom Nutzer angeforderte Index ist 30. Das asynchrone Feedback des Audiosystems aktualisiert den Index jedoch auf 15.

Anwendungsfall: Erste Audiowiedergabe nach Beenden des Ruhemodus

  • Der Lautstärkeindex vor dem Sperren ist auf einen hohen Wert von 95 (Bereich: [0–99]) eingestellt.

  • Android gerät in den Ruhemodus.

  • Sobald Android gesperrt ist (z. B. fortsetzen):

    • Der Anbieter Audio HAL/AudioControl HAL wendet einen sicheren Index von 30 auf den Audiosystem lokal übertragen.

    • Der Anbieter AudioControl HAL löst außerdem den Callback für den sicheren Index aus:

    IAudioGainCallback.onAudioDeviceGainsChanged(SUSPEND_EXIT_VOL_LIMITATION, {...,  30 /* safe index */})
    
  • Der Audiodienst des Autos verwendet den neuen Index aus dem Rückruf, der für Persistenz und eigene Callbacks an die Volume-Anwendung, die den Index synchronisiert. Der Volume-Index vor dem Sperren beträgt 95. Nach dem Fortsetzen wird dieser Index jedoch vom AudioControl HAL-Implementierer auf eine sichere Lautstärke von 30 eingestellt.

Konfiguration des dynamischen Volumes

Für diese Funktion berücksichtigen wir die folgenden primären Anwendungsfälle:

  1. Konfiguration des Fahrzeugendes (Vehicle End of Line, EOL).

    • Die Autohersteller aktualisieren die Lautstärkekonfigurationen am Ende der Produktlebensdauer bevorzugt je nach Fahrzeug. Einrichtung des Audiosystems. In der Regel ist dies ein Sideload ohne Aktualisierung des Bild der Android-Software.

    • Autohersteller müssen die Lautstärkekonfiguration möglicherweise Fahrplan.

  2. Laufzeitkonfiguration: Automobil-Audiosysteme unterstützen externe Verstärkerkonfigurationen und diese ECUs können den Lautstärkebereich hosten. Konfigurationen, die beim Booten abgefragt werden.

  3. On-Demand-Konfiguration: Bietet Unterstützung für die wachsende Nachfrage nach Nachfragebasierte Audiofunktionen, bei denen Nutzer erweiterte Signale abonnieren über einen bestimmten Zeitraum verarbeitet werden. Die neuen Konfigurationen für den Volumenbereich sind gültig für die Dauer eines Abonnements.

Design

Die Konfiguration des dynamischen Volumes erfolgt in drei Phasen:

  • Auffindbarkeit: Die HAL-Implementierung des Anbieters AudioControl erkennt neue Lautstärken über einen benutzerdefinierten IPC-Mechanismus des Anbieters aktualisieren.

    Nach der Erkennung wird ein Callback generiert durch AudioControl::IModuleChangeCallback

  • Aktualisieren Der Audio-Stack des Autos aktualisiert den Status der Lautstärkegruppe mit der neuen Lautstärkebereichen.

    Es wird versucht, nach der Aktualisierung des Volumenbereichs das gleiche Volumen beizubehalten. Wenn der Index jedoch außerhalb des gültigen Bereichs liegt, wird der aktuelle Volumenindex auf einen sicheren Wert. Zum Beispiel die Standardstufe, die vom Anbieter während den Callback.

  • Callback:

    • Nach der Aktualisierung des Lautstärkegruppenbereichs löst der Auto-Audio-Stack einen Rückruf an Apps, die über CarVolumeGroupEventCallback registriert wurden.

    • CarVolumeGroupEvent überträgt den aktualisierten Ereignistyp CarVolumeGroupInfo (Ereignistyp) (was sich geändert hat) und zusätzliche Informationen (warum dies geändert wurde).

Bild

Abbildung 1: Konfiguration des dynamischen Volumes.

HAL API

AudioControl @ 3.0 AIDL

In Version 3.0 von AudioControl AIDL HAL wurden die folgenden APIs eingeführt:

API
IAudioControl#setModuleChangeCallback Legt eine Instanz von IModuleChangeCallback mit AudioControl HAL fest.
IAudioControl#clearModuleChangeCallback Löscht die Instanz von IModuleChangeCallback, die zuvor mit dem AudioControl HAL.
IModuleChangeCallback#onAudioPortsChanged Rückruf zur Benachrichtigung über Änderungen an AudioPorts

Sequenz

Das Sequenzdiagramm der Konfiguration von dynamischen Volumes wird unten angezeigt.

Bild

Abbildung 2: Sequenzdiagramm für die Konfiguration dynamischer Volumes.

Wichtige Aspekte

Berücksichtigen Sie bei der Optimierung dieser Funktion Folgendes:

  • AudioPorts, die als Teil des Callbacks bereitgestellt werden, müssen mit dem Automotive-Symbol BUS-Definition:

    • Geräteport. IN_DEVICE, OUT_DEVICE
    • Verbindung. BUS
    • Adresse. Wird in der Audio-HAL-Definition definiert
    • Verstärkungsmodus: JOINT
  • Anbieter müssen eine Obermenge von Volumenbereichdefinitionen in den Audioinhalten definieren. HAL-Richtlinie und verwenden Sie den Callback, um sie für Fahrzeugvarianten anzupassen. Weitere Informationen finden Sie in der IModuleChangeCallbac AIDL-Definition für weitere Informationen.

  • Gehört mehr als ein Audio-BUS zur selben Lautstärkegruppe, muss identische Volumenbereichdefinitionen haben. Andernfalls hat das Fahrzeug Audio-Framework die neue Definition des Lautstärkebereichs ablehnt.