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.
Empfohlenes Ducking-Verhalten
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()
undgetGroupMaxVolume()
, 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:
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.
Laufzeitkonfiguration: Automobil-Audiosysteme unterstützen externe Verstärkerkonfigurationen und diese ECUs können den Lautstärkebereich hosten. Konfigurationen, die beim Booten abgefragt werden.
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 EreignistypCarVolumeGroupInfo
(Ereignistyp) (was sich geändert hat) und zusätzliche Informationen (warum dies geändert wurde).
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.
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
- Geräteport.
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.