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.
Comportamiento recomendado de autosilenciado de fondo
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()
ygetGroupMaxVolume()
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:
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.
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.
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 eventoCarVolumeGroupInfo
actualizado (qué cambió) y también información adicional (por qué cambió).
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.
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
yOUT_DEVICE
- Conexión.
BUS
- Dirección. Se define en la definición de la HAL de audio.
- Modo de ganancia.
JOINT
- Puerto del dispositivo.
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.