Gestione del volume

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.

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() e getGroupMaxVolume() 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.

di Gemini Advanced.

Configurazione volume dinamico

Per questa funzionalità prendiamo in considerazione i seguenti casi d'uso principali:

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

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

  3. 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 evento CarVolumeGroupInfo aggiornato (cosa è cambiato) ed Extra-info (perché è cambiato).

immagine

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.

immagine

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 e OUT_DEVICE
    • Connessione. BUS
    • Indirizzo. Definite nella definizione di Audio HAL
    • Modalità Guadagno. JOINT
  • 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.