En Android 10, car_audio_configuration.xml
reemplazó a car_volumes_groups.xml
y IAudioControl.getBusForContext
. Los archivos de política de audio, que suelen estar contenidos en la partición del proveedor, representan la configuración de hardware de audio de la placa. Todos los dispositivos a los que se hace referencia en car_audio_configuration.xml
deben definirse en audio_policy_configuration.xml
.
En la siguiente Figura 1, se muestra una descripción general de alto nivel de la arquitectura del servicio de audio para automóviles en la que el servicio de audio para automóviles lee el archivo de configuración de audio para configurar el audio del dispositivo.
Figura 1: Descripción general de la arquitectura de audio para automóviles.
Coloca el archivo de configuración de audio para vehículos en vendor\etc\
o system\etc\
en el dispositivo, siendo vendor\etc\
el primer lugar en el que el servicio de audio para vehículos busca el archivo. Los servicios de audio del automóvil leen car_audio_configuration.xml
para determinar la configuración de audio.
Zonas de audio para automóviles:
- Cada zona de audio contiene un ID de zona de audio único.
- Cada zona de audio se puede asignar a una zona de ocupante.
Las acciones de audio de cada zona son independientes entre sí:
- Enfoque de audio
- Enrutamiento de audio
- Autosilenciado de fondo
Grupos de volumen del automóvil:
Todos los dispositivos de audio que contienen un grupo de volumen se controlan juntos con los mismos cambios de ganancia. La configuración de ganancia de audio para todos los dispositivos de un grupo debe ser la misma.
Asignación del contexto de audio a dispositivos de audio. Úsalo para crear una combinación de audio que asigne los usos de audio a un dispositivo de salida.
Todos los contextos de audio deben representarse dentro de una zona. Esto permite que el enrutamiento de audio se configure con precisión para todos los usos de atributos de audio.
Contextos de audio
Para simplificar la configuración del audio de AAOS, los usos similares se agruparon en CarAudioContexts
. Estos contextos de audio se usan en todo CarAudioService
para definir el enrutamiento, los grupos de volumen, el enfoque de audio y la administración de la atenuación. A continuación, se enumeran los contextos de audio estáticos en AAOS.
En esta tabla, se describe la asignación entre contextos y usos de audio. Se proporcionan filas destacadas para un nuevo uso del sistema.
CarAudioContext | Associated AttributeUsages |
---|---|
MÚSICA | UNKNOWN GAME |
NAVIGATION | ASSISTANCE_NAVIGATION_GUIDANCE |
VOICE_COMMAND | ASSISTANT |
CALL_RING | NOTIFICATION_RINGTONE |
CALL | VOICE_COMMUNICATION VOICE_COMMUNICATION_SIGNALING |
ALARMA | ALARM |
NOTIFICACIÓN | NOTIFICATION NOTIFICATION_* |
SYSTEM_SOUND | ASSISTANCE_SONIFICATION |
EMERGENCIA | EMERGENCY |
DE LA MARCA | SAFETY |
VEHICLE_STATUS | VEHICLE_STATUS |
ANUNCIO | ANNOUNCEMENT |
Habilita el enrutamiento de AAOS
Para usar el enrutamiento basado en AAOS, debes establecer la marca audioUseDynamicRouting
en
true
:
<resources>
<bool name="audioUseDynamicRouting">true</bool>
</resources>
Cuando false
, el enrutamiento y gran parte de CarAudioService
están inhabilitados, el AAOS vuelve al comportamiento predeterminado de AudioService
.
Zona principal
De forma predeterminada, todo el audio se enruta a la zona principal. Solo existe una zona principal, que se indica en la configuración con el atributo isPrimary="true"
. La zona principal se asigna automáticamente a Audiomanager.PRIMARY_AUDIO_ZONE
.
Configuración de muestra (versión 2)
Por ejemplo, un vehículo puede tener dos zonas, una principal y un sistema de entretenimiento para asientos traseros. En esta situación, puedes diseñar una posible versión 2 de car_audio_configuration.xml
de la siguiente manera:
<audioZoneConfiguration version="2.0">
<zone name="primary zone" isPrimary="true">
<volumeGroups>
<group>
<device address="bus0_media_out">
<context context="music"/>
<context context="announcement"/>
</device>
<device address="bus3_call_ring_out">
<context context="call_ring"/>
</device>
<device address="bus6_notification_out">
<context context="notification"/>
</device>
</group>
<group>
<device address="bus1_navigation_out">
<context context="navigation"/>
</device>
<device address="bus2_voice_command_out">
<context context="voice_command"/>
</device>
</group>
<group>
<device address="bus4_call_out">
<context context="call"/>
</device>
</group>
<group>
<device address="bus5_alarm_out">
<context context="alarm"/>
</device>
</group>
<group>
<device address="bus7_system_sound_out">
<context context="system_sound"/>
<context context="emergency"/>
<context context="safety"/>
<context context="vehicle_status"/>
</device>
</group>
</volumeGroups>
</zone>
<zone name="rear seat zone" audioZoneId="1">
<volumeGroups>
<group>
<device address="bus100_rear_seat">
<context context="music"/>
<context context="navigation"/>
<context context="voice_command"/>
<context context="call_ring"/>
<context context="call"/>
<context context="alarm"/>
<context context="notification"/>
<context context="system_sound"/>
<context context="emergency"/>
<context context="safety"/>
<context context="vehicle_status"/>
<context context="announcement"/>
</device>
</group>
</volumeGroups>
</zones>
</audioZoneConfiguration>
En este ejemplo, la zona principal separa algunos contextos de audio para diferentes dispositivos. Esto permite que el sistema HAL aplique diferentes efectos de procesamiento posterior y combine la salida en cada dispositivo con el hardware del vehículo.
Los dispositivos se organizaron en varios grupos de volumen: multimedia, navegación, llamadas, alarmas y sonidos del sistema. Si el sistema está configurado en useFixedVolume
, los niveles de volumen de cada grupo se pasan al HAL para que se apliquen a la salida de estos dispositivos.
Para la zona principal, recomendamos que los sonidos del sistema estén separados de los demás. Esto permite que los sonidos del vehículo se traten con una prioridad más alta. El servicio de audio para automóviles ya hace estas distinciones para los sonidos del vehículo en términos de enfoque y administración de atenuación. Por ejemplo, una solicitud de enfoque de sonido de emergencia tiene una prioridad más alta que otra solicitud de enfoque.
Para simplificar, en el ejemplo de la zona secundaria, todos los contextos de audio se dirigen a un solo dispositivo y a un grupo de volumen.
Configuración de audio de la zona para ocupantes
En Android 11, car_audio_configuration.xml
introdujo dos campos nuevos: audioZoneId
y occupantZoneId
. Puedes usar audioZoneId
para controlar la administración de zonas de audio. Puedes usar occupantZoneId
para configurar el enrutamiento en función del ID de usuario.
Si revisamos la configuración de audio anterior, pero usamos el nuevo campo para el ID de zona de ocupante y la asignación de ID de zona de audio, la nueva configuración sin las definiciones de grupo de volumen se puede configurar de la siguiente manera.
<audioZoneConfiguration version="2.0">
<zone name="primary zone" isPrimary="true" occupantZoneId="0">
...
</zone>
<zone name="rear seat zone" audioZoneId="1" occupantZoneId="1">
...
</zone>
</zones>
</audioZoneConfiguration>
La configuración anterior define una asignación de la zona principal a la zona de ocupante 0 y de audioZoneId
1 a occupantZoneId
1. En general, se puede configurar cualquier asignación entre la zona de ocupante y la zona de audio. Sin embargo, la asignación debe ser
uno a uno. A continuación, se enumeran las reglas que definieron los dos campos nuevos.
audioZoneId
para la zona principal siempre es el IDPRIMARY_AUDIO_ZONE
. Si se defineisPrimary="true"
, no se necesitaaudioZoneId
.No se pueden repetir los números
audioZoneId
yoccupantZoneId
.audioZoneId
yoccupantZoneId
solo pueden tener una asignación uno a uno.
Configuración de audio para vehículos de Android 14
En Android 14, AAOS introdujo el servicio de complementos OEM, que te permite administrar de forma más activa el comportamiento de audio supervisado por el servicio de audio del automóvil. Junto con los nuevos servicios de complementos, se agregan los siguientes cambios al archivo de configuración de audio para vehículos:
- Contexto de audio del automóvil definido por el OEM
- Parámetros de configuración dinámicos de zonas no principales
Contexto de audio del automóvil definido por el OEM
Para habilitar una configuración de audio flexible, en Android 14, el servicio de audio para vehículos permite que los usos de audio se agrupen de manera diferente a los contextos de audio estáticos definidos anteriormente.
Este contexto definido por el OEM se puede definir en el archivo car_audio_configuration.xml
de la versión 3.
En su lugar, se usan los contextos de audio estáticos definidos actualmente. A continuación, se muestra el formato general del contexto de audio para automóviles definido por el OEM.
Cada contexto de OEM requiere un name
junto con una lista de uso de atributos de audio que se asignan al contexto. En el ejemplo anterior, se definen dos contextos:
<carAudioConfiguration version="3">
<oemContexts>
<oemContext name="media">
<audioAttributes>
<usage value="AUDIO_USAGE_MEDIA" />
<usage value="AUDIO_USAGE_UNKNOWN"/>
</audioAttributes>
</oemContext>
<oemContext name="game">
<audioAttributes>
<usage value="AUDIO_USAGE_GAME" />
</audioAttributes>
</oemContext>
...
- El contexto
media
contieneAUDIO_USAGE_MEDIA
yAUDIO_USAGE_UNKNOWN
. - El contexto de
game
contiene soloAUDIO_USAGE_GAME
.
El contexto se debe definir en la parte superior del archivo car_audio_configuration.xml
. Cuando se definen los contextos de OEM, el resto de la configuración de audio del automóvil puede continuar como antes. Se aplican las siguientes reglas al contexto de audio para vehículos:
Las definiciones de contexto del OEM son opcionales. En su lugar, se usa el Contexto de audio estático.
No repitas los nombres de los contextos.
No asignes el uso del atributo de audio a varios contextos.
Se deben usar todos los usos de audio definidos en
AudioAttributes
para construir el contexto.
Estrictamente hablando, se debe usar la representación de cadena android.audio.policy.configuration.V7_0.AudioUsage
del uso de audio para la definición del contexto de audio del OEM. En el futuro, los usos más recientes de los atributos de audio se asignarán al contexto más apropiado para reducir los errores durante la migración de una versión de Android a otra.
Si bien se introdujo el contexto definido por el OEM para expandir aún más el servicio de audio del complemento OEM, se puede usar sin el servicio del complemento OEM. El comportamiento del audio se asemeja al del servicio de audio estático:
Interacciones con el foco de audio El atributo de audio se usa para determinar el mejor comportamiento de coincidencia según lo establecido por la matriz de interacción de enfoque de audio. Para obtener más detalles, consulta Enfoque de audio.
El atributo de audio de control de volumen de audio se usa para determinar la mejor coincidencia:
- Grupo de volumen basado en el contexto definido por el OEM.
- Prioridad de la lista de volumen estático configurada.
Comportamiento de autosilenciado de fondo:
El uso del atributo de audio para el enfoque de audio actual se usa para asignar la información del dispositivo de audio de salida como se define en el archivo de configuración de audio del automóvil.
El atributo de audio se usa para asignar el contexto estático correspondiente a la atenuación, según la matriz de atenuación de audio estática.
Configuraciones de zonas de audio dinámicas
En Android 14, para admitir una configuración dinámica de zonas de audio, el esquema de configuración de audio para vehículos para definir zonas de audio también se actualiza a la versión 3. El nuevo esquema requiere que se configure una configuración para cada zona.
<carAudioConfiguration version="3">
<!-- optional OEM context -->
<oemContexts>
<oemContext name="media">
<audioAttributes>
<usage value="AUDIO_USAGE_MEDIA" />
<usage value="AUDIO_USAGE_UNKNOWN"/>
</audioAttributes>
</oemContext>
<oemContext name="game">
<audioAttributes>
<usage value="AUDIO_USAGE_GAME" />
</audioAttributes>
</oemContext>
...
</oemContexts>
<zones>
<zone name="primary zone" isPrimary="true" occupantZoneId="0">
<zoneConfigs>
<zoneConfig name="primary zone config 0" isDefault="true">
<volumeGroups>
<group>
<device address="bus0_media_out">
<context context="media"/>
<context context="game"/>
<context context="announcement"/>
</device>
<device address="bus6_notification_out">
<context context="notification"/>
</device>
</group>
...
</zoneConfigs>
</zone
</zones>
Para obtener más información, consulta el archivo de la versión 3 definido en device/generic/car/emulator/audio/car_audio_configuration.xml
. A partir de Android 14, la zona principal solo puede tener una (1) configuración. Las zonas que no son primarias pueden tener varias configuraciones. Las siguientes reglas se aplican a las configuraciones de audio para automóviles:
La zona de audio principal puede tener solo una configuración.
Las zonas de audio no principales pueden tener varias configuraciones.
El nombre debe ser único para cada zona de audio y configuración de zona de audio.
Dentro de una zona de audio, las configuraciones de audio pueden diferir:
- No es necesario que la configuración de los grupos de volumen sea la misma.
- No es necesario que la asignación de contexto de audio sea la misma.
Los nombres de los dispositivos de salida de audio deben ser únicos en todas las zonas o configuraciones. El nombre del dispositivo debe aparecer solo una vez en una configuración de audio o en las zonas.
Los dispositivos de audio que pertenecen al mismo grupo de volumen deben tener la misma configuración de ganancia de audio.
Se deben asignar todos los contextos de audio (OEM o estáticos) para cada configuración de audio.
Compatibilidad con versiones posteriores
Aunque las versiones nuevas de car_audio_configuration.xml
presentan funciones nuevas en cada actualización, puedes usar archivos más antiguos en versiones más recientes de AAOS. Los OEMs que actualizan a versiones nuevas de Android pueden volver a usar el archivo car_audio_configuration.xml
.
Para usar una función nueva que requiera información nueva contenida en car_audio_configuration.xml
, se debe actualizar la versión. Si intentas usar una versión anterior de un archivo con información que no es compatible con esa versión, se genera un IllegalStateException
cuando se inicia el servicio del automóvil. El mensaje de excepción
contiene la información relevante sobre qué información se usa y
qué versión mínima se requiere.