La gestione del volume è contenuta in CarAudioService
, che utilizza volumi fissi
con l'aspettativo che i volumi vengano applicati al di sotto dell'HAL da un hardware
invece che nel software. CarAudioService
organizza i dispositivi di output
in gruppi di volumi per applicare gli stessi guadagni a tutti i dispositivi associati a un
gruppo di volumi.
Volumi fissi
Le implementazioni AAOS utilizzano un amplificatore hardware per controllare il volume anziché un
il software mixer. Per evitare effetti collaterali, imposta il flag config_useFixedVolume
su
true
(sovrapposizione in base alle esigenze):
<resources>
<!-- Car uses hardware amplifier for volume. -->
<bool name="config_useFixedVolume">true</bool>
</resources>
Se il flag config_useFixedVolume
non è impostato (o è impostato su false
),
le app possono chiamare AudioManager.setStreamVolume()
per regolare il volume tramite lo stream
digita nel software mixer. Questo potrebbe non essere sempre desiderabile per via delle potenziali
effetti su altre app e il fatto che l'attenuazione del volume nel software mixer
può comportare un minor numero di bit significativi disponibili nel segnale quando ricevuto
l'amplificatore hardware.
Gruppi di volumi
I gruppi di volumi gestiscono i volumi di una raccolta di dispositivi all'interno di un zona di destinazione. Per ogni gruppo di volumi, il volume può essere controllato in modo indipendente. La i guadagni risultanti vengono configurati sui dispositivi associati per essere applicati l'amplificatore del veicolo. Le impostazioni del volume sono rese persistenti per l'utente e vengono caricate quando l'utente accede.
Definisci gruppi di volumi
CarAudioService utilizza gruppi di volumi definiti in car_audio_configuration.xml
:
<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>
Ogni gruppo di volumi deve contenere uno o più dispositivi di output con
indirizzi IP esterni. Gli indirizzi devono corrispondere ai dispositivi di output definiti in
audio_policy_configuration.xml
.
Configura i guadagni del gruppo di volume
Ogni gruppo di volumi ha valori di guadagno minimo, massimo e predefinito, nonché un
dimensione del passo in base ai valori configurati in audio_policy_configuration.xml
per
dispositivi associati al gruppo di volumi.
<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>
Durante l'inizializzazione, il gruppo di volumi controlla i valori di guadagno dei componenti associati dispositivi e configura il gruppo nel seguente modo:
- Dimensione dei passaggi. Deve essere uguale per tutti i dispositivi controllati dal gruppo di volumi.
- Guadagno minimo. Guadagno minimo minimo tra i dispositivi del gruppo.
- Massimo guadagno. Guadagno massimo massimo tra i dispositivi del gruppo.
- Guadagno predefinito. Guadagno predefinito massimo tra i dispositivi del gruppo.
Dato il modo in cui questi valori sono configurati, è possibile impostare il guadagno di un gruppo di volume al di fuori dell'intervallo supportato per un dispositivo associato al volume gruppo. In questo caso, per quel dispositivo il guadagno è impostato sul valore minimo o valore di guadagno massimo in base al fatto che il valore del gruppo di volume sia inferiore o superiore a l'intervallo.
Identificatori di gruppi di volumi
I gruppi di volumi vengono identificati in fase di runtime nell'ordine definito nel file XML.
Gli ID sono compresi tra 0
e N-1
all'interno di una zona audio, dove N
è il numero di
gruppi di volume in quella zona. In questo modo, gli ID gruppo di volume non sono univoci
tra zone diverse. Questi identificatori vengono utilizzati per CarAudioManager
API associate
con gruppi di volumi. Qualsiasi API che accetta un groupId
senza zoneId
il valore predefinito è la zona audio principale.
Gestione del volume multizona
Ogni zona audio deve avere uno o più gruppi di volume e ogni volume
è associato a una sola zona audio. Questa relazione è definita
nell'ambito di car_audio_configuration.xml
. Per saperne di più, guarda l'esempio riportato sopra
in Definire i gruppi di volumi.
I livelli di volume attuali per ciascuna zona sono persistenti per l'utente associato a quella zona. Queste impostazioni sono specifiche per ogni zona, ovvero se un utente accede su il display associato alla zona principale e successivamente accede a una zona associati a una zona audio secondaria, i livelli di volume sono stati caricati e mantenuti la prima zona è diversa da quelle della zona secondaria.
Gestire gli eventi dei tasti del volume
Android definisce diversi codici chiave per il controllo del volume, tra cui:
KEYCODE_VOLUME_UP
KEYCODE_VOLUME_DOWN
KEYCODE_VOLUME_MUTE
Per impostazione predefinita, Android instrada gli eventi dei tasti del volume alle app. Auto e motori
le implementazioni devono forzare l'elaborazione di questi eventi chiave
CarAudioService
, che poi chiama setGroupVolume
o setMasterMute
, come
appropriato. Per forzare questo comportamento, imposta il valore
config_handleVolumeKeysInWindowManager
flag per true
:
<resources>
<bool name="config_handleVolumeKeysInWindowManager">true</bool>
</resources>
Al momento gli eventi chiave del volume non consentono di distinguere quale zona
a cui sono destinati e si presume che siano tutti associati
zona audio. Quando viene ricevuto un evento tasto del volume, CarAudioService
determina
quale gruppo di volume regolare recuperando i contesti audio per l'audio attivo
player e regolando il gruppo di volume che contiene il dispositivo di output
associati al contesto audio
con priorità più elevata. L'assegnazione delle priorità
determinato in base a un ordine fisso definito in
CarVolume.AUDIO_CONTEXT_VOLUME_PRIORITY
.
Dissolvenza e bilancia
Entrambe le versioni dell'AudioControl HAL includono API per impostare dissolvenza e bilanciamento
nel veicolo. API di sistema corrispondenti per i valori di passaggio di CarAudioManager
all'AudioControl HAL. Queste API richiedono
android.car.permission.CAR_CONTROL_AUDIO_VOLUME
. Le API AudioControl sono:
setBalanceTowardRight(float value)
sposta il volume dello speaker verso a destra (+) o a sinistra (-) dell'auto.- 0,0 è centrato
- +1,0 è perfettamente corretta
- -1,0 è completamente a sinistra
- Un valore al di fuori dell'intervallo da -1 a 1 è un errore
setFadeTowardFront(float value)
sposta il volume dello speaker verso anteriore (+) o posteriore (-) dell'auto.- 0,0 è centrato
- +1,0 è completamente avanti
- -1,0 è completamente all'indietro
- Un valore al di fuori dell'intervallo da -1 a 1 è un errore
Sei tu a decidere come applicare questi valori e come visualizzarli utenti. Possono essere applicate rigorosamente ai media o a tutti Suoni Android. Anche Android 11 ha introdotto il supporto per applicare effetti audio ai dispositivi di output. In questo modo, è possibile gestire in alternativa la dissolvenza e il bilanciamento tra effetti audio sul dispositivi di output invece che tramite queste API.
Attenuazione automatica audio
Attenuazione automatica audio quando il veicolo riduce il guadagno di uno stream, in modo che di un altro stream riprodotto contemporaneamente in modo più chiaro. In AAOS, l'attenuazione automatica audio è implementata dall'HAL. Android non ha alcun controllo sui suoni che vanno oltre il sistema operativo. In Android 11, le informazioni principali disponibile per l'HAL per prendere decisioni in merito all'attenuazione automatica è la scelta tra due su entrambi i dispositivi hanno stream attivi.
Quando anatra
Anche se spetta al singolo OEM stabilire la modalità di gestione dell'attenuazione automatica da parte del HAL, consigliamo le seguenti linee guida.
Stream multipli in riproduzione su Android di solito quando due app o servizi tieni contemporaneamente il focus audio. Per sapere quando Android può concedere simultanei seleziona la matrice dell'interazione in Tipi di limitazioni. Con l'introduzione del plug-in per l'audio dell'auto, questo dipende anche dalle Gestione di AudioFocus.
Tutti gli stream combinati da Android vengono effettuati prima che vengano applicati. Pertanto, tutti gli stream che devono essere oscurati quando riprodotti contemporaneamente con un'altra devono essere indirizzati a dispositivi di uscita separati in modo che l'HAL possa applicare l'attenuazione automatica prima di mischiarli.
Comportamento consigliato per diminuire il tasso di attenuazione
Di seguito sono riportate le potenziali interazioni simultanee che si consiglia di ignorare.
Interazione | Azione |
---|---|
EMERGENCY
| Attenua o disattiva l'audio di tutti i contenuti tranne di SAFETY
|
SAFETY |
Attenua tutto tranne EMERGENCY |
NAVIGATION |
Annulla tutti i dati tranne SAFETY e EMERGENCY |
CALL |
Annulla tutti i dati tranne SAFETY , EMERGENCY ,
e NAVIGATION |
VOICE |
Anatre CALL_RING |
VEHICLE_SOUNDS |
Sei tu a decidere l'importanza del suono attivo e se attenua gli altri suoni. |
MUSIC e ANNOUNCEMENT |
Faccina oscurata da tutto. Le eccezioni sono i toni di interazione tocco riprodotti come
SYSTEM_SOUND .
|
Considerazioni sull'attenuazione automatica
Alcuni servizi e app, come la navigazione o un assistente, potrebbero utilizzare più ai giocatori di compiere azioni. Evita l'aggressione del ducking durante un flusso di dati smette di passare attraverso i dispositivi di uscita per garantire che il supporto non torni a pieno volume prima che venga abbassato prima3 alla riproduzione successiva dalla navigazione o l'app dell'assistente.
Per i veicoli con più stadi sonori e un isolamento sufficiente, puoi: indirizzare l'audio a diverse aree dell'auto anziché ridurre il rumore. Ad esempio: le istruzioni di navigazione possono essere indirizzate agli altoparlanti del poggiatesta del conducente mentre continuando a riprodurre musica per l'intera cabina a un volume normale.
Suoni critici per la sicurezza
Introduzione ad Android 11
API HAL audio focus. L'HAL garantisce
i suoni critici per la sicurezza hanno la priorità su altri. Se l'HAL contiene audio
per USAGE_EMERGENCY
, non è garantito che le app e i servizi
Android non riprodurrà i suoni. L'HAL stabilisce quali stream da Android devono
mixare o disattivare l'audio per riprodurre suoni critici per la sicurezza.
Configura l'interfaccia utente delle impostazioni del volume
AAOS disaccoppia l'interfaccia utente delle impostazioni del volume dalla configurazione del gruppo di volumi. Possono essere sovrapposti come descritto in Configura i guadagni del gruppo di volume. Questa separazione garantisce che non sono necessarie modifiche in caso di modifica della configurazione dei gruppi di volume.
Nell'interfaccia utente delle impostazioni dell'auto, packages/apps/Car/Settings/res/xml/car_volume_items.xml
contiene gli elementi dell'interfaccia utente (risorse titolo e icona) associati a ogni
definito AudioAttributes.USAGE
. Questo file fornisce un rendering ragionevole
di VolumeGroups
definiti utilizzando le risorse associate alla prima
utilizzo riconosciuto contenuto in ogni VolumeGroup
.
Ad esempio, nell'esempio seguente viene definito VolumeGroup
che include
voice_communication
e voice_communication_signalling
. Il valore predefinito
dell'implementazione dell'interfaccia utente delle impostazioni dell'auto esegue il rendering di VolumeGroup
utilizzando
risorse associate a voice_communication
poiché questo è il primo matc
nel file.
<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>
Gli attributi e i valori utilizzati nella configurazione precedente sono dichiarati in
packages/apps/Car/Settings/res/values/attrs.xml
. L'interfaccia utente delle impostazioni del volume utilizza
le seguenti API CarAudioManager basate su VolumeGroup
:
getVolumeGroupCount()
per scoprire quanti controlli devono essere tracciati.getGroupMinVolume()
egetGroupMaxVolume()
per ottenere i limiti inferiore e superiore.getGroupVolume()
per regolare il volume attuale.registerVolumeChangeObserver()
per ricevere notifiche sulle variazioni di volume.
Evento gruppo volume auto
I casi d'uso relativi al settore auto e motori dell'aggiornamento del volume e dell'opzione di attivazione/disattivazione dell'audio hanno contenuti contestuali elementi di base che possono definire le azioni di determinate app, ad esempio il volume impostazioni. Il volume attuale e il callback di disattivazione dell'audio dallo stack audio dell'auto forniscono informazioni contestuali limitate. Per servire meglio i casi d'uso e il futuro del settore automobilistico di scalabilità automatica, CarVolumeGroupEvent viene aggiunto ad Android 14. Ogni evento comporta tre tipi critici di informazioni:
- Elenco di
CarVolumeGroupInfo
EventTypes
(mappata a bit)- Elenco di
ExtraInfos
Info gruppo volume auto
Il destinatario del callback dell'evento ha accesso all'elenco delle auto interessate
e informazioni sui gruppi di volume. Ciò significa che l'app non richiede
chiamate aggiuntive al framework audio dell'auto per ottenere lo stato più recente. Può
è sufficiente utilizzare l'oggetto CarVolumeGroupInfos
ricevuto per aggiornare l'interfaccia utente
stati. Per semplificare le app, gli aspetti che sono cambiati nel volume di un'auto
sono forniti anche in EventTypes
, come spiegato di seguito.
EventType
Definisce quale aspetto di CarVolumeGroupInfo
è stato modificato. Le app possono usare questa funzionalità
identificare le modifiche e intraprendere le azioni necessarie. Ad esempio:
EVENT_TYPE_VOLUME_MAX_INDEX_CHANGED
indica che le rispettive
L'indice di guadagno massimo del volume CarVolumeGroups
è cambiato e l'esecuzione di query può essere eseguita in base a
CarVolumeGroupInfo.getMaxVolumeGainIndex()
.
La tabella seguente mostra la relazione tra EventType
e
CarVolumeGroupInfo
.
Tipo di evento | Info gruppo volume auto |
---|---|
EVENT_TYPE_VOLUME_GAIN_INDEX_CHANGED | CarVolumeGroupInfo.getVolumeGainIndex() |
EVENT_TYPE_VOLUME_MIN_INDEX_CHANGED | CarVolumeGroupInfo.getMinVolumeGainIndex() |
EVENT_TYPE_VOLUME_MAX_INDEX_CHANGED | CarVolumeGroupInfo.getMaxVolumeGainIndex() |
EVENT_TYPE_MUTE_CHANGED | CarVolumeGroupInfo.isSilentd() |
EVENT_TYPE_VOLUME_BLOCKED_CHANGED | CarVolumeGroupInfo.isBlock() |
EVENT_TYPE_ATTENUATION_CHANGED | InfoGruppoCarVolume.èAttenuato() |
EVENT_TYPE_ZONE_CONFIGURATION_CHANGED | CarVolumeGroupInfo.getAudioAttributes() |
Ulteriori informazioni
Fornisce ulteriori informazioni sul motivo per cui CarVolumeGroup
è cambiato. App
puoi usare queste informazioni per fornire ulteriore contesto e avvisare l'utente
di agire o di inviare una notifica. Ad esempio, EXTRA_INFO_TRANSIENT_ATTENUATION_THERMAL
indica un'attenuazione attiva dei transitori dovuta a un sovraccarico termico. L'app
possono informare l'utente se tentano di aumentare il volume.
Non applichiamo alcuna procedura per ExtraInfos
. È a tua discrezione
per determinare il processo in base a ExtraInfos
. Ad esempio, se l'attenuazione
è attivo per EXTRA_INFO_TRANSIENT_ATTENUATION_DUCKED
, puoi anche attivare
elimina inizialmente la dissolvenza nell'interfaccia utente della barra del volume per impedire all'utente di modificare il volume.
Altre potrebbero scegliere di mostrare un toast che indica che l'attenuazione automatica è attiva e che l'utente possa
per regolare il volume.
Il framework dell'audio dell'auto dipende dall'AudioControl HAL IAudioGainCallback
per
fornisce il ExtraInfos
suggerito. Per saperne di più, vedi
Callback guadagno audio.
CarVolumeGroupEvent
si adatta alle esigenze future del framework audio dell'auto. Me
intendono supportare nuove funzionalità solo tramite CarVolumeGroupEvent
. Me
Consigliamo vivamente agli sviluppatori di app di utilizzare CarVolumeGroupEvent
per gestire
volume del gruppo e silenziare le modifiche.
Callback dell'evento del gruppo del volume dell'auto
Android 14, fornisce un nuovo callback per le API
applicazioni della piattaforma per registrarsi e ricevere notifiche relative a CarVolumeGroupEvents
.
Per registrarti al servizio di richiamata, utilizza
CarAudioManager#registerCarVolumeGroupEventCallback()
Per annullare la registrazione del callback, utilizza
CarAudioManager#unregisterCarVolumeGroupEventCallback()
Se un'app si registra con la nuova versione CarVolumeGroupEventCallback
e quella precedente
CarVolumeCallback
, l'evento CarVolumeGroupEventCallbacks
ha la priorità.
Lo stack dell'audio dell'auto non attiva più CarVolumeCallback
. In questo modo
trigger duplicati nella stessa app per lo stesso evento.
Ti consigliamo vivamente di utilizzare CarVolumeGroupEventCallback
per gestire
volume del gruppo e silenziare le modifiche.
Callback guadagno audio
Da Android 13, AudioControl HAL può attivare un il callback asincrono per gestire gli aggiornamenti a livello di volume dovuti a modifiche alla sistema audio dell'auto.
API HAL
AudioControl @2.0 AIDL
La versione 2.0 di AudioControl AIDL HAL aggiunge la seguente API:
API | Finalità |
---|---|
IAudioControl#registerGainCallback |
Registra un'istanza di IAudioGainCallback con AudioControl HAL. |
IAudioGainCallback#onAudioDeviceGainsChanged |
Callback asincrono per notificare le modifiche alla configurazione del guadagno audio. |
Il callback AudioControl HAL include elenchi di motivi e le relative
AudioGainConfigInfo
, che consiste in:
- ID zona
- Indirizzo della porta del dispositivo
- Indice volume > indice può essere un indice limitato o un indice di aggiornamento.
I motivi possono essere a grandi linee:
- Motivi delle limitazioni. Modifica temporanea del comportamento del volume e dell'audio disattivato.
- Motivi dell'aggiornamento. Modifica permanente del comportamento del volume.
Tipi di restrizioni
A partire dal giorno AudioControl
HAL AIDL
V3
, di seguito sono riportati i tipi di supporti supportati
restrizioni:
- Disattiva audio
- Blocco
- Limitazione
- Attenuazione
Limitazione attiva | Variazione del volume attivata dall'utente | Pulsante di attivazione/disattivazione della disattivazione dell'audio attivato dall'utente |
---|---|---|
Disattiva audio | ❌ | ❌ (attivato) ✔ (audio disattivato) |
Blocco | ❌ | ✔ |
Limitazione | ❌ (oltre il limite) ✔ (sotto il limite) |
✔ |
Attenuazione | ✔ | ✔ |
La priorità tra le limitazioni è Disattiva audio > Blocco > Limitazione > Attenuazione.
Limitazioni per la disattivazione dell'audio
Le limitazioni per la disattivazione dell'audio sono:
Reasons.TCU_MUTE
Reasons.REMOTE_MUTE
Il framework audio dell'auto mantiene internamente due stati di disattivazione audio:
Disattivazione dell'utente. Attivata/disattivata in base alla richiesta dell'utente, tramite
CarAudioManager
o eventi chiave.Disattiva audio HAL. Attivata/disattivata in base alle limitazioni di disattivazione dell'audio ricevute tramite
AudioGain
di Google.
Per gli ascoltatori come l'app Impostazioni, la disattivazione dell'audio generale del gruppo di volume
(CarVolumeGroupInfo.isMuted()
) si baserà sul fatto che sia una delle due
sopra le disattivazioni audio.
Quando è attiva la disattivazione dell'audio dell'HAL, cambia il volume di tutto il volume in entrata e riattiva l'audio del gruppo vengono ignorate per la durata della limitazione.
Caso di interazione: la disattivazione dell'audio dell'HAL è attiva e l'utente richiede l'opzione di attivazione/disattivazione
Quando è attiva la disattivazione dell'audio dell'HAL e quella dell'utente è disattivata:
- Lo stato di disattivazione generale del gruppo di volume è stato impostato su
true
. - Le richieste dell'utente per l'attivazione dell'audio verranno elaborate.
- Motivo: le richieste di disattivazione dell'audio degli utenti devono essere sempre rispettate per tutelare la loro privacy.
Quando è attiva la disattivazione dell'audio dell'HAL e quella dell'utente è attivata:
Lo stato di disattivazione generale del gruppo di volume è stato impostato su
true
.Le richieste dell'utente per la disattivazione dell'audio verranno
NOT
elaborate. Utente memorizzato nella cache lo stato di disattivazione dell'audio rimane attivo.Motivo: le richieste di riattivazione dell'audio dell'utente verranno soddisfatte solo se non sono presenti limitazioni attive.
Motivo: la riattivazione dell'audio dell'audio memorizzato nella cache può provocare un'esplosione involontaria del suono e mettere in pericolo la sicurezza degli utenti. Ciò è particolarmente vero se l'audio disattivato è abilitato attraverso i cicli di accensione, il che riduce consapevolezza del livello sonoro percepita.
Caso di interazione: la disattivazione dell'audio dell'HAL è attivata e disattivata mentre la disattivazione dell'audio dell'utente non ha modifiche
L'attivazione/disattivazione dell'audio dell'HAL modificherà lo stato generale di disattivazione del gruppo di volume. Tuttavia, non aggiornare direttamente lo stato di disattivazione dell'audio dell'utente. Quando la disattivazione dell'audio dell'utente è disattivata e quella dell'HAL viene ricevuto il callback da attivare:
- Lo stato di disattivazione generale del gruppo di volume è stato impostato su
true
. Le richieste dell'utente di modificare il volume verranno
NOT
elaborate durante l'audio dell'HAL sia abilitato.Motivo: l'utente non riesce a percepire il suono mentre la disattivazione dell'audio è attiva. Autorizzato la variazione del volume può provocare un'esplosione sonora e mettere a rischio la sicurezza degli utenti.
Motivo: le app di volume possono registrarsi per i callback e attivare la riattivazione dell'audio (CarAudioManager.setVolumeGroupmuto(...,/* mute=*/ true,..)) automaticamente senza l'intervento dell'utente, se questo è il comportamento previsto dall'OEM.
Quando l'audio dell'HAL è disattivato e l'audio dell'utente è disattivato:
Lo stato di disattivazione audio del gruppo di volume è stato impostato su
false
.Motivo: impostare come permanente lo stato di disattivazione dell'audio e richiedere all'utente di riattivarlo potrebbe interrompere inutilmente l'utente quando gli stati di disattivazione dell'audio vengono attivati frequentemente.
Le richieste di modifica del volume degli utenti verranno elaborate normalmente.
Blocco
Le limitazioni di blocco sono:
Reasons.FORCED_MASTER_MUTE
Reasons.REMOTE_MUTE
Reasons.TCU_MUTE
.
Quando le limitazioni di blocco sono attive, le richieste degli utenti a:
- Le variazioni di volume non vengono elaborate.
- L'opzione Attiva/disattiva audio viene elaborata.
Limitazione
I limiti alle limitazioni sono:
Reasons.THERMAL_LIMITATION
Reasons.SUSPEND_EXIT_VOL_LIMITATION
Quando le limitazioni delle limitazioni sono attive, le richieste degli utenti a:
Per regolare il volume:
- Entro la limitazione vengono elaborati
- Oltre i limiti non vengono elaborati
L'opzione Attiva/disattiva audio viene elaborata.
Attenuazione
I limiti di attenuazione sono:
Reasons.ADAS_DUCKING
Reasons.NAV_DUCKING
Reasons.PROJECTION_DUCKING
Quando le limitazioni di attenuazione sono attive, le richieste degli utenti a:
Le variazioni di volume vengono elaborate. Il nuovo livello di volume corrente è impostato su attenuato (anziché il volume precedente). Variazioni di volume future vengono effettuate a partire da questo livello.
L'opzione Attiva/disattiva audio è stata elaborata.
Aggiorna all'indice
Quanto segue è considerato l'aggiornamento dell'indice del volume asincrono:
Reasons.EXTERNAL_AMP_VOL_FEEDBACK
.
Per questo motivo, AudioControl HAL può aggiornare l'indice attuale del gruppo di volume
all'indice specificato. Viene usato principalmente come feedback dal sistema audio
per la richiesta di modifica del volume dal framework audio dell'auto. L'aggiornamento dell'indice è
comunicava anche con Google Apps come callback CarVolumeGroupEvent
da sincronizzare
dell'indice.
Esempi
Caso d'uso: l'utente aggiorna l'indice del volume a 30
L'utente usa l'app Volume per impostare l'indice del volume su 30.
Questo indice viene convertito in guadagno di volume e inviato ad Audio HAL.
Le implementazioni dei fornitori di
Audio HAL
ricevono il nuovo guadagno e l'aggiornamento del volume il sistema audio (come un amplificatore esterno).Il sistema audio risponde che il livello del volume viene aggiornato solo all'indice 15 (per motivi sconosciuti ad Android).
Implementazioni da parte dei fornitori degli attivatori
AudioControl HAL
:IAudioGainCallback.onAudioDeviceGainsChanged(EXTERNAL_AMP_VOL_FEEDBACK, {..., 15 /* New index */})
Il servizio audio dell'auto utilizza il nuovo indice del callback usato per per la persistenza e i callback all'app del volume. L'indice richiesto dall'utente è 30. Tuttavia, il feedback asincrono del sistema audio aggiorna l'indice impostandolo su 15.
Caso d'uso: prima riproduzione audio dopo l'uscita dalla sospensione
L'indice di volume prima della sospensione è impostato su un livello alto di 95 (intervallo: [0-99]).
Android entra in modalità di sospensione.
Dopo l'esistenza della sospensione di Android (ad esempio, ripristina):
Il fornitore
Audio HAL/AudioControl HAL
applica un indice di sicurezza pari a 30 alla in locale.Il fornitore
AudioControl HAL
attiva anche il callback per l'indice sicuro:
IAudioGainCallback.onAudioDeviceGainsChanged(SUSPEND_EXIT_VOL_LIMITATION, {..., 30 /* safe index */})
Il servizio audio dell'auto utilizza il nuovo indice del callback usato per la persistenza e i suoi callback all'app del volume con la sincronizzazione dell'indice. L'indice del volume prima della sospensione è 95. Tuttavia, dopo la ripresa, questo indice viene impostato su un livello di volume di sicurezza pari a 30 dall'implementatore
AudioControl HAL
.
Configurazione volume dinamico
Per questa funzionalità prendiamo in considerazione i seguenti casi d'uso principali:
Configurazione di fine linea (EOL) del veicolo.
Le case automobilistiche preferiscono aggiornare le configurazioni del volume alla fine del ciclo di vita in base al veicolo configurazione del sistema audio. In genere, si tratta di un sideload che non aggiorna Immagine SW Android.
Le case automobilistiche potrebbero dover aggiornare la configurazione del volume durante dalla pianificazione del servizio.
Configurazione di runtime. I sistemi audio per auto e motori supportano sorgenti esterne configurazioni degli amplificatori e queste ECU possono ospitare la gamma a cui viene inviata una query durante l'avvio.
Configurazione on demand. Offerta per sostenere la crescente necessità di funzionalità audio basate sulla domanda con cui gli utenti si abbonano a indicatori avanzati per un determinato periodo di tempo. Le nuove configurazioni dell'intervallo di volume e sono validi per tutta la durata dell'abbonamento.
Design
La configurazione del volume dinamico viene eseguita in tre fasi:
Scoperta. L'implementazione dell'HAL AudioControl del fornitore scopre nuovi volumi degli aggiornamenti degli intervalli tramite un meccanismo IPC personalizzato di proprietà del fornitore.
Una volta individuato, viene generato un callback
AudioControl::IModuleChangeCallback
.Aggiorna. Lo stack audio dell'auto aggiorna gli stati del gruppo di volume con la nuova intervalli di volume specifici.
Facciamo il possibile per mantenere lo stesso livello di volume dopo l'aggiornamento dell'intervallo di volume. Tuttavia, se l'indice supera i limiti, l'indice di volume attuale viene impostato su un valore sicuro. Ad esempio, il livello predefinito fornito dal fornitore durante il callback.
Richiama.
Dopo l'aggiornamento dell'intervallo del gruppo di volume, lo stack audio dell'auto attiva un callback per app registrate tramite
CarVolumeGroupEventCallback
.CarVolumeGroupEvent
trasporta il tipo di eventoCarVolumeGroupInfo
aggiornato (cosa è cambiato) ed Extra-info (perché è cambiato).
Figura 1. Configurazione del volume dinamico.
API HAL
AudioControl 3.0 AIDL
La versione 3.0 di AudioControl AIDL HAL introduce le seguenti API:
API | |
---|---|
ControlloIAudio#setModuleChangeCallback | Imposta un'istanza di IModuleChangeCallback con AudioControl HAL. |
Controllo IAudio#clearModuleChangeCallback | Cancella l'istanza di IModuleChangeCallback precedentemente impostata con il valore Controllo audio HAL. |
IModuleChangeCallback#onAudioPortsChanged | Callback per notifica delle modifiche a AudioPorts |
Sequenza
Di seguito è riportato il diagramma di sequenza della configurazione del volume dinamico.
Figura 2. Diagramma di sequenza per la configurazione del volume dinamico.
Aspetti principali
Per ottimizzare questa funzionalità, considera quanto segue.
Le porte Audio Port fornite con la funzione di callback devono corrispondere alle impostazioni di Automotive Definizione di BUS:
- Porta del dispositivo.
IN_DEVICE
eOUT_DEVICE
- Connessione.
BUS
- Indirizzo. Definite nella definizione di Audio HAL
- Modalità Guadagno.
JOINT
- Porta del dispositivo.
I fornitori devono definire un soprainsieme di definizioni degli intervalli di volume nella sezione Il criterio HAL e utilizza il callback per personalizzarlo per le varianti del veicolo. Consulta le
IModuleChangeCallbac
Definizione di AIDL per ulteriori informazioni.Quando più di un BUS audio appartiene allo stesso gruppo di volume, ciascuno deve hanno definizioni identiche di intervalli di volume. Se non lo fai, l'auto framework audio che rifiuterà la nuova definizione dell'intervallo di volume.