Administración del volumen

La administración de volúmenes está incluida en CarAudioService, que usa volúmenes fijos con la expectativa de que un hardware aplique volúmenes por debajo de la HAL en lugar del software. CarAudioService organiza los dispositivos de salida en grupos de volumen para aplicar las mismas ganancias a todos los dispositivos asociados con un grupo de volúmenes.

Volúmenes fijos

Las implementaciones AAOS usan un amplificador de hardware para controlar el volumen en lugar de un mezclador de software. Para evitar efectos secundarios, establece la marca config_useFixedVolume en true (superposición según sea necesario):

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

Cuando la marca config_useFixedVolume no está configurada (o se establece en false), las apps pueden llamar a AudioManager.setStreamVolume() para cambiar el volumen por transmisión escribir en el mezclador de software. Esto no siempre es conveniente debido a los posibles en otras apps y el hecho de que la atenuación del volumen en el mezclador de software puede producir menos bits significativos disponibles en la señal cuando la recibe el amplificador de hardware.

Grupos de volúmenes

Los grupos de volúmenes administran los volúmenes para una colección de dispositivos dentro de un audio zona. Para cada grupo de volumen, el volumen se puede controlar de forma independiente. El las ganancias resultantes se configuran en los dispositivos asociados para que las aplique el del amplificador del vehículo. La configuración del volumen se mantiene para el usuario y se carga cuando el usuario acceda.

Define grupos de volúmenes

CarAudioService usa grupos de volúmenes definidos en 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>

Cada grupo de volúmenes debe contener uno o más dispositivos de salida con direcciones IP del proveedor. Las direcciones deben corresponder a los dispositivos de salida definidos en audio_policy_configuration.xml

Configura las ganancias del grupo de volumen

Cada grupo de volúmenes tiene valores de ganancia mínimos, máximos y predeterminados, además de un tamaño del paso según los valores configurados en audio_policy_configuration.xml para el dispositivos asociados con el grupo de volúmenes.

<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 la inicialización, el grupo de volúmenes comprueba los valores de ganancia de las propiedades dispositivos y configura el grupo de la siguiente manera:

  • Tamaño del paso. Debe ser el mismo para todos los dispositivos controlados por el grupo de volumen.
  • Ganancia mínima. La menor ganancia mínima entre los dispositivos del grupo.
  • Ganancia máxima. La ganancia máxima más alta entre los dispositivos del grupo.
  • Ganancia predeterminada. Es la ganancia predeterminada más alta entre los dispositivos del grupo.

Dada la forma en que se configuran estos valores, es posible establecer la ganancia de un grupo de volúmenes fuera del rango admitido para un dispositivo asociado con el volumen grupo. En este caso, para ese dispositivo, la ganancia se establece en la valor de ganancia máximo en función de si el valor del grupo de volumen es inferior o superior el rango.

Identificadores de grupos de volúmenes

Los grupos de volúmenes se identifican en el entorno de ejecución en el orden definido en el archivo en formato XML. Los IDs varían de 0 a N-1 en una zona de audio, donde N es el número de grupos de volúmenes en esa zona. De esta manera, los IDs de grupos de volúmenes no son únicos entre zonas. Estos identificadores se usan para las APIs de CarAudioManager asociadas con grupos de volumen. Cualquier API que tome un groupId sin un zoneId de forma predeterminada a la zona de audio principal.

Administración de volúmenes multizona

Se espera que cada zona de audio tenga uno o más grupos de volúmenes, y que cada volumen solo se asocia con una única zona de audio. Esta relación se define como parte de car_audio_configuration.xml. Para obtener más información, consulta el ejemplo anterior. en Definir grupos de volúmenes.

Los niveles de volumen actuales de cada zona se mantienen para el usuario asociado con en esa zona. Estos parámetros de configuración son específicos de una zona, es decir, si un usuario accede a una mostrar asociados con la zona principal y, luego, los letreros en una zona asociados a una zona de audio secundaria, los niveles de volumen cargados y persistentes para las de la primera zona difieren de las de la zona secundaria.

Cómo controlar eventos de teclas de volumen

Android define varios códigos de teclas para el control de volumen, incluidos los siguientes:

  • KEYCODE_VOLUME_UP
  • KEYCODE_VOLUME_DOWN
  • KEYCODE_VOLUME_MUTE

De forma predeterminada, Android enruta los eventos clave de volumen a las apps. Automotriz implementaciones deben forzar el procesamiento de estos eventos clave CarAudioService, que luego llama a setGroupVolume o setMasterMute, como lo que sea apropiado. Para forzar este comportamiento, establece la Marca config_handleVolumeKeysInWindowManager para true:

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

Actualmente, los eventos de teclas de volumen no tienen forma de distinguir qué zona están destinados y se supone que están asociados con la principal zona de audio. Cuando se recibe un evento de tecla de volumen, CarAudioService determina qué grupo de volumen se ajustará recuperando los contextos de audio para el reproductores y, luego, ajustar el grupo de volumen con el dispositivo de salida asociada con el contexto de audio de mayor prioridad. La priorización es determinada en función de un orden fijo definido en CarVolume.AUDIO_CONTEXT_VOLUME_PRIORITY

Atenuación y equilibrio

Ambas versiones de la HAL de AudioControl incluyen APIs para configurar la atenuación y el equilibrio en el vehículo. APIs del sistema correspondientes para los valores de pase de CarAudioManager a la HAL de AudioControl. Estas APIs requieren android.car.permission.CAR_CONTROL_AUDIO_VOLUME Las APIs de AudioControl son las siguientes:

  • setBalanceTowardRight(float value) cambia el volumen de la bocina hacia el lado derecho (+) o izquierdo (-) del automóvil.

    • 0.0 está centrado
    • +1.0 está completamente bien
    • -1.0 queda por completo.
    • Un valor fuera del rango de -1 a 1 es un error
  • setFadeTowardFront(float value) cambia el volumen de la bocina hacia el al frente (+) o atrás (-) del automóvil.

    • 0.0 está centrado
    • +1.0 está completamente desviado.
    • -1.0 se ubica por completo en la parte posterior.
    • Un valor fuera del rango de -1 a 1 es un error

Tú decides cómo se deben aplicar estos valores y cómo mostrarlos a usuarios. Pueden aplicarse estrictamente a los medios de comunicación o de forma generalizada para todos. Sonidos de Android. Android 11 también introdujo compatibilidad para aplicar efectos de audio a dispositivos de salida. Con esto, es posible puedes administrar la atenuación y el equilibrio a través de efectos de audio en el de salida en lugar de hacerlo a través de estas APIs.

Autosilenciado de fondo

El autosilenciado de fondo se produce cuando el vehículo reduce la ganancia de una transmisión para que otra transmisión que se reproduce simultáneamente se puede escuchar con mayor claridad. En AAOS, la HAL implementa el autosilenciado de fondo. Android no puede controlar los sonidos. más allá del SO. En Android 11, la información principal disponibles para la HAL a fin de tomar decisiones de autosilenciado es si dos valores dispositivos tienen transmisiones activas.

Cuándo agacharte

Si bien depende del OEM individual determinar cómo se maneja el autosilenciado de fondo Para la HAL, recomendamos seguir estos lineamientos.

  • Por lo general, las transmisiones múltiples que se reproducen en Android ocurren cuando dos apps o servicios mantener al mismo tiempo el foco de audio. Para saber cuándo Android puede otorgar permisos consulta la matriz de interacción en Tipos de restricciones. Gracias al complemento de audio para vehículos, esto también depende de tu Administración de AudioFocus.

  • Cualquier transmisión mezclada por Android se realiza antes de que se obtengan las ganancias. se aplicó. Por lo tanto, cualquier transmisión que se deba atenuar cuando se reproduzca de forma simultánea con otro debería enrutarse a dispositivos de salida separados, de manera que la HAL pueda aplica el autosilenciado antes de mezclarlos.

A continuación, se muestra cómo se recomienda el autosilenciado de fondo de interacciones simultáneas potenciales.

Interacción Acción
EMERGENCY Apaga o silencia todo, excepto SAFETY
SAFETY Apaga todo, excepto EMERGENCY
NAVIGATION Arroja todo, excepto SAFETY y EMERGENCY
CALL Arroja todo, excepto SAFETY, EMERGENCY y NAVIGATION
VOICE Patos CALL_RING
VEHICLE_SOUNDS Determinas la importancia del sonido activo y si es evita otros sonidos.
MUSIC y ANNOUNCEMENT Agachado por todo. Las excepciones son los tonos de interacción táctil que se reproducen como SYSTEM_SOUND

Consideraciones para el atenuación

Algunas apps y servicios, como la navegación o un asistente, podrían usar varias que los jugadores realicen acciones. Evita quitar el volumen agresivo durante una transmisión de datos deja de fluir a través de los dispositivos de salida para asegurarse de que el contenido no vuelva a estar completo. antes de que se agache3 antes3 de la próxima reproducción desde la navegación o una se inicia la app de Asistente.

En el caso de los vehículos con varias etapas de sonido con un aislamiento suficientemente bueno, puedes enrutar el audio a diferentes áreas del vehículo en lugar de atenuar los medios. Por ejemplo: las instrucciones de navegación pueden enviarse a las bocinas del reposacabezas del conductor mientras seguir reproduciendo música en toda la cabina a un volumen normal.

Sonidos críticos de seguridad

Se presentó Android 11 APIs de foco de audio de HAL: La HAL garantiza los sonidos críticos para la seguridad tienen prioridad sobre otros sonidos. Si la HAL retiene audio enfoque para USAGE_EMERGENCY, no se garantiza que las apps y los servicios de Android no reproducirá sonidos. La HAL determina qué transmisiones de Android mezclar o silenciar para reproducir sonidos críticos para la seguridad.

Cómo establecer la IU de la configuración del volumen

AAOS separa la IU de configuración de volumen de la configuración del grupo de volúmenes. Estos se pueden superponer como se describe en Configura las ganancias de grupos de volúmenes. Esta separación garantiza que no se requieran cambios en caso de que cambie la configuración de los grupos de volúmenes.

En la IU de la configuración del vehículo, packages/apps/Car/Settings/res/xml/car_volume_items.xml Contiene los elementos de la IU (recursos de íconos y títulos) asociados con cada Definió AudioAttributes.USAGE. Este archivo proporciona una renderización razonable de la VolumeGroups definida mediante el uso de recursos asociados con la primera de uso reconocido que se incluye en cada VolumeGroup.

En el siguiente ejemplo, se define que un elemento VolumeGroup incluye voice_communication y voice_communication_signalling. Predeterminado de la IU de la configuración del vehículo renderiza el VolumeGroup con el recursos asociados con voice_communication, ya que es el primer matc en el archivo.

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

Los atributos y valores usados en la configuración anterior se declaran en packages/apps/Car/Settings/res/values/attrs.xml La IU de configuración de volumen usa las siguientes APIs de CarAudioManager basadas en VolumeGroup:

  • getVolumeGroupCount() para saber cuántos controles se deben dibujar.
  • getGroupMinVolume() y getGroupMaxVolume() para obtener los límites inferior y superior.
  • getGroupVolume() para obtener el volumen actual.
  • registerVolumeChangeObserver() para recibir notificaciones sobre los cambios de volumen.

Evento del grupo de volumen del vehículo

Los casos de uso de Automotive con el botón de activación para silenciar y actualizar el volumen tienen información fundamentos que pueden definir las acciones de ciertas aplicaciones, como el volumen configuración. La devolución de llamada actual de volumen y silencio de la pila de audio del vehículo proporciona información contextual limitada. Para brindar un mejor servicio a los casos de uso de la industria automotriz y al futuro escalabilidad, CarVolumeGroupEvent se agrega a Android 14. Cada evento lleva tres tipos fundamentales de información:

  • Lista de CarVolumeGroupInfo
  • EventTypes (asignado de bits)
  • Lista de ExtraInfos

InformaciónDeGrupoDeCarVolumen

El receptor de la devolución de llamada de eventos tiene acceso listo a la lista de automóviles afectados. información del grupo de volúmenes. Esto significa que la app no necesita hacer llamadas adicionales al framework de Car Audio para obtener el estado más reciente. Puede simplemente usa el CarVolumeGroupInfos recibido para actualizar la IU o estados. Para que sea más fácil para las apps, los aspectos que cambiaron en el volumen del vehículo también se proporcionan como parte de EventTypes, como se explica a continuación.

Tipos de eventos

Define qué aspecto de CarVolumeGroupInfo cambió. Las apps pueden usar esto para para identificar los cambios y tomar las medidas necesarias. Por ejemplo: EVENT_TYPE_VOLUME_MAX_INDEX_CHANGED indica que el respectivo El índice de aumento de volumen máximo de CarVolumeGroups cambió y puede ser consultado por CarVolumeGroupInfo.getMaxVolumeGainIndex()

En la siguiente tabla, se muestra la relación entre EventType y CarVolumeGroupInfo

Tipo de evento InformaciónDeGrupoDeCarVolumen
EVENT_TYPE_VOLUME_GAIN_INDEX_CHANGED CarVolumeGroupInfo.getVolumeGainIndex()
EVENT_TYPE_VOLUME_MIN_INDEX_CHANGED CarVolumeGroupInfo.getMinVolumeGainIndex()
EVENT_TYPE_VOLUME_MAX_INDEX_CHANGED CarVolumeGroupInfo.getMaxVolumeGainIndex()
TIPO_DE_EVENTO_MUTE_CHANGED CarVolumeGroupInfo.isSilenciad()
EVENT_TYPE_VOLUME_BLOCKED_CHANGED CarVolumeGroupInfo.isBlocked()
EVENT_TYPE_ATTENUATION_CHANGED CarVolumeGroupInfo.isAttenuated()
EVENT_TYPE_ZONE_CONFIGURATION_CHANGED CarVolumeGroupInfo.getAudioAttributes()

Información adicional

Proporciona información adicional sobre por qué cambió CarVolumeGroup. Aplicaciones puede usar esta información con el fin de proporcionar contexto adicional para alertar al usuario actuar o notificar. Por ejemplo, EXTRA_INFO_TRANSIENT_ATTENUATION_THERMAL. indica una atenuación transitoria activa debido a una sobrecarga térmica. La app puede informar al usuario si intenta aumentar el volumen.

No aplicamos ningún proceso para ExtraInfos. Esto queda a tu discreción para determinar el proceso según ExtraInfos. Por ejemplo, si la atenuación está activo debido a EXTRA_INFO_TRANSIENT_ATTENUATION_DUCKED, también puedes habilitar atenuar la IU de la barra de volumen inicialmente para evitar que el usuario cambie el volumen Otros pueden optar por mostrar un aviso de que el autosilenciado está activo y permitir que el usuario para cambiar el volumen.

El framework de audio del vehículo depende de la HAL de AudioControl IAudioGainCallback para proporciona el ExtraInfos sugerido. Para obtener más información, consulta Devolución de llamada de obtención de audio.

CarVolumeGroupEvent escala para satisfacer las necesidades futuras del framework de audio del vehículo. Mié pretende admitir nuevas funciones CarVolumeGroupEvent únicamente. Mié recomienda que los desarrolladores de apps usen CarVolumeGroupEvent para controlar cambiar el volumen y silenciar del grupo.

Devolución de llamada de evento de grupo de volumen del vehículo

Android 14 proporciona una nueva devolución de llamada para usuarios con privilegios que se registren y reciban notificaciones de CarVolumeGroupEvents.

  • Si quieres registrarte para la devolución de llamada, usa CarAudioManager#registerCarVolumeGroupEventCallback()

  • Para cancelar el registro de la devolución de llamada, usa CarAudioManager#unregisterCarVolumeGroupEventCallback()

Si una app se registra con la CarVolumeGroupEventCallback nueva y la heredada CarVolumeCallback, se prioriza el evento CarVolumeGroupEventCallbacks. La pila de audio del vehículo ya no activa CarVolumeCallback. Esto evita activadores duplicados en la misma app para el mismo evento.

Te recomendamos que uses CarVolumeGroupEventCallback para administrar cambiar el volumen y silenciar del grupo.

Devolución de llamada de ganancia de audio

A partir de Android 13, la HAL de AudioControl puede activar una de devolución de llamada asíncrona para administrar las actualizaciones en el nivel del volumen debido a los cambios en el sistema de audio del auto.

API de HAL

AudioControl @2.0 AIDL

La versión 2.0 de la HAL del AIDL de AudioControl agrega la siguiente API:

API Propósito
IAudioControl#registerGainCallback Registra una instancia de IAudioGainCallback con la HAL de AudioControl.
IAudioGainCallback#onAudioDeviceGainsChanged Es la devolución de llamada asíncrona para notificar cambios en la configuración de ganancia de audio.

La devolución de llamada de la HAL de AudioControl incluye listas de motivos y las respectivas AudioGainConfigInfo, que consiste en lo siguiente:

  • ID de zona
  • Dirección del puerto del dispositivo
  • Índice de volumen > puede ser un índice restringido o uno de actualización.

A grandes rasgos, los motivos se pueden clasificar de la siguiente manera:

  • Motivos de restricción. Cambio transitorio en comportamiento de volumen y silencio.
  • Motivos de actualización. Cambio permanente en el comportamiento del volumen.

Tipos de restricciones

A partir del AudioControl HAL AIDL V3, se admiten los siguientes tipos de restricciones:

  • Silenciar
  • Bloqueo
  • Limitaciones
  • Atenuación
Restricción activa Cambio de volumen activado por el usuario Botón de activación para silenciar activado por el usuario
Silenciar ❌ (activar el sonido)

✔ (silenciar)
Bloqueo
Limitaciones ❌ (superar el límite)

✔ (no superar el límite)
Atenuación

La prioridad entre las restricciones es Silenciar > Bloqueo > Limitación > Atenuación

Restricción de elementos silenciados

Las restricciones de elementos silenciados son las siguientes:

  • Reasons.TCU_MUTE
  • Reasons.REMOTE_MUTE

El framework del audio del vehículo mantiene internamente estos dos estados de silencio:

  • Silencio del usuario. Se activa o desactiva en función de la solicitud del usuario, ya sea mediante CarAudioManager o eventos clave.

  • Silencio del HAL Se activa en función de las restricciones de silencio recibidas hasta el AudioGain devolución de llamada.

Para los objetos de escucha, como la app de Configuración, el grupo de volúmenes permite silenciar (CarVolumeGroupInfo.isMuted()) se basará en si cualquiera de los las opciones de silencio anteriores están habilitadas.

Cuando se habilita el sonido de HAL, se cambia el volumen entrante y se activa el sonido del grupo solicitudes se ignoran mientras dure la restricción.

Caso de interacción: La HAL está activa y el usuario solicita el botón de activación de Silenciamiento

Cuando se habilita el sonido de HAL y se inhabilita el sonido del usuario, ocurre lo siguiente:

  • El estado de silencio general del grupo de volúmenes cambió a true.
  • Se procesarán las solicitudes del usuario para habilitar el silencio.
    • Motivo: Las solicitudes de elementos silenciados deben respetarse en todo momento para preservar la privacidad de los usuarios.

Cuando se habilita el sonido de HAL y se habilita el sonido del usuario, ocurre lo siguiente:

  • El estado de silencio general del grupo de volúmenes cambió a true.

  • Se procesarán las solicitudes del usuario para inhabilitar el sonido NOT. Usuario almacenado en caché permanecerá habilitado.

    • Motivo: Las solicitudes para activar el sonido del usuario solo se respetarán si no hay restricciones activas.

    • Motivo: Activar el sonido de la caché del usuario para silenciar puede provocar una explosión de sonido no deseada ponen en peligro la seguridad del usuario. Esto es especialmente cierto si el estado de silencio está habilitado en los ciclos de encendido, lo que reduce reconocimiento del nivel de sonido de tu organización.

Caso de interacción: Silenciamiento de HAL habilitado e inhabilitado mientras Silenciamiento de usuario no tiene cambios

Activar o desactivar la función para silenciar el HAL cambiará el estado general de silencio del grupo de volumen. Sin embargo, sí no actualizar directamente el estado de silenciamiento del usuario. Cuando se inhabilita la función Silenciar al usuario y se silencia la HAL para habilitar la devolución de llamada:

  • El estado de silencio general del grupo de volúmenes cambió a true.
  • Mientras el HAL esté silenciado, se NOT procesarán las solicitudes del usuario para cambiar el volumen esté habilitado.

    • Motivo: El usuario no puede percibir el sonido mientras la función de silencio está habilitada. Permitiendo un cambio en el volumen puede provocar una explosión de sonido y poner en peligro la seguridad de los usuarios.

    • Motivo: Las apps de volumen pueden registrarse para devoluciones de llamada y activar un sonido (CarAudioManager.setVolumeGroupSilenciar(...,/* mutable=*/ true,..)) automáticamente sin intervención del usuario, si este es el comportamiento esperado por el OEM.

Cuando se inhabilita la función para silenciar de HAL y está inhabilitada la opción para silenciar usuarios, ocurre lo siguiente:

  • El estado de silencio del grupo de volúmenes se cambió a false.

    Motivo: Establecer el estado de silencio como permanente y solicitar al usuario que active el sonido interrumpir innecesariamente al usuario cuando los estados de silencio se activan con frecuencia.

  • Las solicitudes de los usuarios para cambiar el volumen se procesarán normalmente.

Bloqueo

Las restricciones de bloqueo son las siguientes:

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

Cuando las restricciones de bloqueo están activas, las solicitudes de los usuarios pueden hacer lo siguiente:

  • No se procesarán los cambios de volumen.
  • Se procesaron los elementos para activar o desactivar la función de silencio.

Limitaciones

Las restricciones de limitación son las siguientes:

  • Reasons.THERMAL_LIMITATION
  • Reasons.SUSPEND_EXIT_VOL_LIMITATION

Cuando las restricciones de limitación están activas, las solicitudes de los usuarios a lo siguiente:

  • Cambiar el volumen:

    • Se procesan dentro de la limitación
    • No se procesan los límites anteriores.
  • Se procesaron los elementos para activar o desactivar la función de silencio.

Atenuación

Las restricciones de atenuación son las siguientes:

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

Cuando las restricciones de atenuación están activas, las solicitudes de los usuarios a:

  • Se procesaron los cambios de volumen. El nuevo nivel de volumen actual se establece en volumen atenuado (en lugar del volumen anterior). Cambios futuros en el volumen en este nivel.

  • Se procesó la activación de la función para silenciar.

Actualizar al índice

Lo siguiente se considera como la actualización asíncrona del índice de volumen: Reasons.EXTERNAL_AMP_VOL_FEEDBACK

Por este motivo, la HAL de AudioControl puede actualizar el índice actual del grupo de volumen al índice especificado. Se usa principalmente como retroalimentación del sistema de audio para la solicitud de cambio de volumen del framework de Car Audio. La actualización del índice es también se comunicó con Apps como una devolución de llamada CarVolumeGroupEvent para sincronizar. el índice.

Ejemplos

Caso de uso: Un usuario actualiza el índice de volumen a 30.

  • El usuario usa la app de Volumen para cambiar el índice de volumen a 30.

  • Este índice se convierte en aumento de volumen y se envía a la HAL de audio.

  • Las implementaciones de proveedores de Audio HAL reciben el nuevo aumento de volumen y la actualización el sistema de audio (como un amplificador externo).

  • El sistema de audio responde que el nivel de volumen solo se actualiza al índice 15. (por motivos desconocidos para Android).

  • Implementaciones de proveedores de activadores AudioControl HAL:

    IAudioGainCallback.onAudioDeviceGainsChanged(EXTERNAL_AMP_VOL_FEEDBACK, {...,  15 /* New index */})
    
  • El servicio de audio del automóvil consume el índice nuevo de la devolución de llamada que se usa para la persistencia y las devoluciones de llamada a la app de Volume. El índice solicitado por el usuario es 30. Sin embargo, la respuesta asíncrona del sistema de audio actualiza el índice a 15.

Caso de uso: Primera reproducción de audio después de salir de la suspensión

  • El índice de volumen antes de la suspensión se establece en un nivel alto de 95 (rango: [0-99]).

  • Android entra en suspensión.

  • Una vez que Android exista la suspensión (por ejemplo, reanudar):

    • El proveedor Audio HAL/AudioControl HAL aplica un índice seguro de 30 al sistema de audio de forma local.

    • El proveedor AudioControl HAL también activa la devolución de llamada para el índice seguro:

    IAudioGainCallback.onAudioDeviceGainsChanged(SUSPEND_EXIT_VOL_LIMITATION, {...,  30 /* safe index */})
    
  • El servicio de audio del automóvil consume el índice nuevo de la devolución de llamada que se usa para la persistencia y sus propias devoluciones de llamada a la app de volumen que sincroniza el índice. El índice de volumen antes de la suspensión es 95. Sin embargo, después de la reanudación, este índice se El implementador AudioControl HAL establece un nivel de volumen seguro de 30.

Configuración de volumen dinámico

Para esta función, consideramos los siguientes casos de uso principales:

  1. Configuración de final de línea (EOL) del vehículo.

    • Los fabricantes de automóviles prefieren actualizar los parámetros de configuración del volumen en el EOL según el vehículo configuración del sistema de audio. Por lo general, se trata de una transferencia sin actualizar Imagen del SO de Android.

    • Es posible que los fabricantes de automóviles deban actualizar la configuración del volumen durante un horario del servicio.

  2. Configuración del entorno de ejecución. Compatibilidad externa con los sistemas de audio de Automotive las configuraciones del amplificador y estas ECU pueden alojar el rango de configuración que se consultan durante el tiempo de inicio.

  3. Configuración a pedido. Se ofrece para respaldar la creciente necesidad de Funciones de audio basadas en la demanda en las que los usuarios se suscriben a una señal mejorada el procesamiento de los datos durante un período determinado. Las nuevas configuraciones del rango de volumen son válido durante toda la suscripción.

Diseño

La configuración del volumen dinámico se logra en tres etapas:

  • Descubrimiento. La implementación de la HAL de AudioControl del proveedor descubre un volumen nuevo. actualizaciones de rangos a través de un mecanismo de IPC personalizado del proveedor.

    Una vez detectada, se genera una devolución de llamada con AudioControl::IModuleChangeCallback

  • Actualizar. La pila de audio del vehículo actualiza los estados de los grupos de volúmenes con el nuevo o rangos de volumen.

    Se esfuerzan por mantener el mismo nivel de volumen después de la actualización del rango de volumen. Sin embargo, si el índice se encuentra fuera de los límites, el índice de volumen actual se establece en un valor seguro. Por ejemplo, el nivel predeterminado proporcionado por el proveedor durante la devolución de llamada.

  • Devolución de llamada.

    • Publica actualizaciones de la autonomía del grupo de volumen, la pila de audio del automóvil activa una devolución de llamada para Apps registradas hasta CarVolumeGroupEventCallback.

    • CarVolumeGroupEvent lleva el tipo de evento CarVolumeGroupInfo actualizado (qué cambió) y también información adicional (por qué cambió).

imagen

Figura 1: Configuración de volumen dinámico.

API de HAL

AudioControl con AIDL 3.0

La versión 3.0 de la HAL del AIDL de AudioControl incluye las siguientes APIs:

API
IAudioControl#setModuleChangeCallback Establece una instancia de IModuleChangeCallback con la HAL de AudioControl.
IAudioControl#clearModuleChangeCallback Borra la instancia de IModuleChangeCallback que se estableció previamente con el HAL de AudioControl
IModuleChangeCallback#onAudioPortsChanged. Devolución de llamada para notificar cambios en AudioPorts

Secuencia

A continuación, se muestra el diagrama de secuencias de la configuración del volumen dinámico.

imagen

Figura 2: Diagrama de secuencias para la configuración de volumen dinámico.

Aspectos clave

Para optimizar esta función, ten en cuenta lo siguiente.

  • Los AudioPorts proporcionados como parte de la devolución de llamada deben coincidir con Automotive Definición de BUS:

    • Puerto del dispositivo. IN_DEVICE y OUT_DEVICE
    • Conexión. BUS
    • Dirección. Se define en la definición de la HAL de audio.
    • Modo de ganancia. JOINT
  • Los proveedores deben definir un superconjunto de definiciones de rango de volumen en la interfaz de audio. Política de HAL y usar la devolución de llamada para personalizarla para variantes de vehículos. Consulta la IModuleChangeCallbac Definición de AIDL para obtener más información.

  • Cuando más de un BUS de audio pertenece al mismo grupo de volumen, cada uno debe tienen definiciones idénticas de los rangos de volumen. De lo contrario, el vehículo podría de audio y rechaza la definición nueva del rango de volumen.