El servicio de audio para automóviles usa la política de audio dinámico de Core Audio para facilitar los casos de uso en automóviles.
Reproducción de audio independiente para cada pasajero, conocida como audio multizona, en la que cada zona permite la reproducción simultánea de sonido.
Configuración dinámica de la zona de audio
Transmisión de audio de la zona principal para pasajeros
Reflejo de audio del pasajero.
En cada caso de uso, el servicio de audio para automóviles usa la política de audio dinámico para enrutar automáticamente el audio al dispositivo de salida designado.
Audio multizona
El audio multizona permite que varios usuarios interactúen simultáneamente con el AAOS. Un conjunto de dispositivos de salida está asociado con una zona, y cada zona mantiene el enfoque de audio y el nivel de volumen. Los pasajeros pueden escuchar su audio mientras el conductor escucha otra fuente en la zona principal (por lo general, la cabina principal).
Arquitectura de audio multizona
Figura 1: Arquitectura del servicio de audio para automóviles.
Las zonas de audio para vehículos son una abstracción de las salidas de audio, el enfoque de audio y otros parámetros de configuración de audio, que se pueden administrar de forma independiente. A los efectos del enrutamiento, cada zona se define como un conjunto de dispositivos de bus de salida de audio tal como se organiza en la configuración de la política de audio. Los dispositivos difieren según la definición de cada zona de audio. En la Figura 1, los dispositivos de bus del 1 al 5 pertenecen a la zona cero, los dispositivos de bus del 6 al 8 pertenecen a la zona uno y los dispositivos de bus del 9 al 11 pertenecen a la zona dos.
Configuración del audio del auto
Por lo general, los dispositivos de salida se asignan a una zona de audio. Cada zona de audio se define en car_audio_configuration.xml
. En el siguiente fragmento de código, se muestra una configuración de audio para automóviles de la Figura 1:
<carAudioConfiguration version="3">
<zones>
<zone name="Zone0" audioZneId="0" occupantZoneId="0">
<zoneConfigs>
<zoneConfig name="config0" isDefault="true">
<volumeGoups>
<group>
<device address="bus_1">
<context context="music"/>
</device>
</group>
<group>
<device address="bus_2">
<context context="navigation"/>
</device>
</group>
...
</volumeGroups>
</zoneConfig>
</zoneConfigs>
</zone>
<zone name="Zone1" audioZoneId="1" occupantZoneId="1">
<zoneConfigs>
<zoneConfig name="config0" isDefault="true">
<volumeGroups>
<group>
<device address="bus_6">
<context context="music"/>
</device>
</group>
<group>
<device address="bus_7">
<context context="navigation"/>
</device>
</group>
...
</volumeGroups>
</zoneConfig>
</zoneConfigs>
</zone>
...
...
</zones>
</carAudioConfiguration>
occupantZoneId
es una definición de servicio de automóviles que administra CarOccupantZoneManager
. Se usa en automóviles para definir una asignación de un usuario en el automóvil a una ubicación de asiento específica. CarOccupantZoneService
también define la asignación de la zona de ocupante a las pantallas, otros periféricos y el usuario una vez que este accede a una pantalla. Una zona de audio tiene las siguientes características:
Un ID de zona de audio y un ID de zona de ocupantes.
- Asigna la zona de audio a la zona del ocupante (asiento, pantallas y otros periféricos)
- Asigna qué ID de usuario se asigna a una zona de audio cuando se accede
Una lista de configuraciones de audio. Cada configuración de audio tiene un conjunto de grupos de volumen. Cada grupo de volumen tiene un conjunto de dispositivos de bus de audio.
Cuando se cambia el volumen, todos los dispositivos de audio de un grupo se controlan de la misma manera.
A cada dispositivo de audio se le asigna una lista de atributos de audio. Esta información se usa para construir las combinaciones de políticas de audio con atributos de audio asignados de manera diferente.
Esta configuración permite que diferentes usos de atributos de audio se enruten a diferentes dispositivos de salida en cada zona. Según el caso de uso, se pueden reproducir diferentes sonidos de forma simultánea. Por ejemplo, puedes configurar la cabina principal (zona principal) para que reproduzca sonidos multimedia en todas las bocinas, pero los sonidos de navegación solo en las bocinas más cercanas al conductor. Con la reproducción simultánea de sonido, la cabina principal sigue escuchando contenido multimedia mientras se entrega la navegación al conductor.
Flujo de trabajo de acceso de pasajeros con audio multizona
En el siguiente diagrama de secuencias, se muestra el flujo para habilitar la enrutación de audio cuando un pasajero accede a su respectiva pantalla:
Figura 2:
En esta secuencia, el acceso del usuario se propaga al servicio de audio del automóvil a través del servicio de zona de ocupantes.
El servicio de audio para vehículos (para una zona de audio específica) usa la API de
AudioPolicy#removeUserIdDeviceAffinity
para quitar las afinidades del dispositivo del usuario. Esta API toma un ID de usuario. En este caso, el usuario de la zona anterior.La API de
AudioPolicy#setUserIdDeviceAffinity
asigna al usuario nuevo a una zona, que recibe el ID del usuario y todos los dispositivos para una configuración de zona específica.
Configuraciones de zonas dinámicas
En Android 14, se introducen configuraciones de zonas dinámicas para permitir que los OEM configuren diferentes conjuntos de dispositivos para los pasajeros. El caso de uso permite que los pasajeros del asiento trasero cambien entre una bocina del reposacabezas trasero y un periférico de auriculares trasero.
En este caso, se requieren dos configuraciones. Uno para el reposacabezas del asiento trasero y otro para el periférico de auriculares. El audio de un usuario específico se enruta solo a una configuración a la vez.
Figura 3: Flujo de trabajo de configuración de zona dinámica.
En la Figura 3, se ilustra la arquitectura del flujo de trabajo de configuración de zonas dinámicas. La zona de audio 1 contiene dos configuraciones, Config 0
y Config 1
, que están asociadas con la bocina del dispositivo de salida y el reposacabezas, respectivamente.
Cuando accede, se le asigna automáticamente la configuración predeterminada. Cuando el usuario elige cambiar la configuración, por lo general, a través de una IU del sistema, el servicio de audio para automóviles ejecuta el cambio entre las dos configuraciones. De esta manera, el dispositivo de salida se cambia entre la bocina Z1 y el reposacabezas Z1.
En el siguiente fragmento de código, se muestra la configuración de esta zona dinámica.
<carAudioConfiguration version="3">
<zones>
<zone name="Zone1" audioZoneId="1" occupantZoneId="1">
<zoneConfigs>
<zoneConfig name="Zone 1 Config 0" isDefault="true">
<volumeGroups>
<group>
<device address="bus_100">
<context context="music"/>
***
</device>
</group>
</volumeGroups>
</zoneConfig>
<zoneConfig name="Zone 1 Config 1">
<volumeGroups>
<group>
<device address="bus_101">
<context context="music"/>
***
</device>
</group>
</volumeGroups>
</zoneConfig>
</zoneConfigs>
</zone>
</zones>
Para facilitar la administración de las configuraciones de audio, el administrador de audio del automóvil expone las siguientes APIs:
- Consulta las configuraciones disponibles para una zona.
- Consulta la configuración establecida actualmente para una zona.
- Cambia a otra configuración.
Una app o un servicio de la IU del sistema pueden usar estas APIs para administrar la configuración de la zona de audio, como se muestra en la Figura 4. La API de Query expone ambos al pasajero. El usuario puede seleccionar una configuración diferente presionando un comando para la configuración deseada.
Figura 4: Flujo de trabajo de configuración de zona dinámica.
Transmisión de audio para pasajeros de la zona principal
La transmisión de audio para pasajeros de la zona principal es una función que se introdujo en Android 14 para permitir que los pasajeros transmitan su audio multimedia en la zona principal. De esta manera, el audio multimedia del pasajero se puede transmitir a la cabina principal mientras el conductor mantiene el control total.
En la siguiente imagen, se muestra una versión simplificada de la arquitectura para la transmisión de audio multimedia para pasajeros de la zona principal.
Figura 5: Flujo de trabajo de configuración de zona dinámica.
En la imagen, se muestra que el dispositivo de salida de contenido multimedia del conductor se comparte con el pasajero. Esto solo ocurre mientras el pasajero está en el modo de transmisión a la zona principal. La política de audio dinámico también se usa para administrar el enrutamiento de audio del controlador, pero no se aplican cambios a las afinidades del dispositivo para el controlador. Para el pasajero, la lista de dispositivos de salida cambia de la siguiente manera:
- Se quita el dispositivo de salida de contenido multimedia para el pasajero de la lista de dispositivos
- Se agregó el dispositivo de salida de contenido multimedia para el conductor a la lista de dispositivos.
- Los dispositivos de salida restantes para las zonas de audio para pasajeros permanecen en la lista de dispositivos.
La API de AudioPolicy#setUserIdDeviceAffinity
asigna esta nueva lista de dispositivos al pasajero. Los parámetros que se pasan a la API son la lista de dispositivos y el ID de usuario del pasajero. Cuando el servicio de política de audio del sistema de audio consulta qué combinación de audio se debe seleccionar para una pista multimedia asociada con el pasajero, se selecciona la combinación de audio multimedia asociada con la zona principal.
Un requisito clave para la transmisión de audio de la zona principal es que el dispositivo de salida de contenido multimedia de la zona principal esté aislado de otros usos de atributos de audio. De lo contrario, durante la compilación de las mezclas de audio, se agregan otros atributos de audio. Cuando el sistema de audio realiza la selección de la combinación, se seleccionan todos los sonidos asociados a la combinación para la reproducción en la cabina principal.
Reflejo de audio de la zona para pasajeros
La función de espejo de audio permite que los pasajeros compartan audio. La función de espejo duplica los datos de audio en cada zona de audio para que todos los pasajeros puedan escuchar el mismo audio. En este caso, el foco de audio se comparte con los pasajeros involucrados en la duplicación de audio.
Enrutamiento de espejo de audio
Se necesita un mínimo de dos pasajeros para habilitar la duplicación de audio. Como resultado, una configuración de audio con solo dos zonas de audio para pasajeros requeriría un dispositivo de salida de espejo. Con la definición anterior, se pueden iniciar dos sesiones de duplicación simultáneas.
En la siguiente imagen, se muestra un diagrama simplificado de la duplicación de audio multizona entre dos pasajeros. El audio de ambos pasajeros se enruta a un dispositivo de espejo de audio, bus_1000
. El HAL de audio duplica la señal en las zonas de origen.
Figura 6: Flujo de trabajo de configuración de zona dinámica.
Esta planificación de ruta está habilitada solo cuando los pasajeros están en modo de duplicación. De lo contrario, los dispositivos correspondientes de la zona de audio se asignarán a los pasajeros.
Cuando se habilita la duplicación por primera vez para un pasajero, la API de AudioPolicy#setUserIdDeviceAffinity
modifica el enrutamiento:
- Se quitó el dispositivo de salida de contenido multimedia para el pasajero de la lista de dispositivos.
- Se agregó el dispositivo de salida reflejado a la lista de dispositivos.
- Los dispositivos de salida restantes para la zona de audio para pasajeros permanecen en la lista de dispositivos.
Con la lista de dispositivos, se llama a la API con la lista actualizada de dispositivos y el ID de usuario del pasajero. En la siguiente imagen, se proporciona un diagrama de secuencias del flujo de trabajo de la duplicación de audio.
Figura 7: Flujo de trabajo de duplicación de audio.
En la Figura 7, se llama a las APIs del administrador de audio del automóvil para administrar la duplicación de audio desde el servicio del sistema multimedia. Específicamente, la API para habilitar la duplicación de audio para el Usuario 1 y el Usuario 2, CarAudioManager#enableMirrorForAudioZones
.
El servicio de audio para vehículos configura el enrutamiento de audio para los pasajeros del usuario como se describió anteriormente. El servicio de audio para vehículos también envía una señal al HAL de audio para configurar y duplicar el audio del dispositivo espejo en las zonas correspondientes.
En la imagen anterior, el servicio de audio para automóviles envía mirroring_src=bus_1000;mirroring_dest=bus_10,bus_20
.
where:
bus_1000
es el bus de origen, y bus_10
y bus_20
son los buses de destino.
En el diagrama de secuencias, no se muestra la señal que se envía a través de la API de AudioManager#setParameters
, que llega al HAL a través del servicio de audio.
Cuando se inhabilita la duplicación de audio, se envía el siguiente indicador, mirroring_src=bus_1000;mirroring=off
. El sistema HAL puede usar este indicador para inhabilitar la duplicación de audio cuando no está habilitada la duplicación de audio. Para definir dispositivos de duplicación de audio, el archivo de configuración de audio del automóvil contiene una sección llamada mirroringDevices
, como se muestra en el siguiente fragmento.
En este fragmento, se definen dos dispositivos de duplicación, bus_1000
y bus_2000
, para que cuatro pasajeros puedan usar la duplicación de audio.
<carAudioConfiguration version="3">
<mirroringDevices>
<mirroringDevice address="bus_1000"/>
<mirroringDevice address="bus_2000"/>
</mirroringDevices>
<zones>
....
</zones>
</carAudioConfiguration>