Enrutamiento de audio multizona

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, denominada 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 de pasajeros.

  • Duplicación de audio del pasajero.

En cada caso de uso, el servicio de audio del automóvil usa la política de audio dinámica para enrutar automáticamente el audio al dispositivo de salida designado.

Audio multizona

El audio multizona permite que varios usuarios interactúen con AAOS de forma simultánea. Un conjunto de dispositivos de salida está asociado a 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

Arquitectura de servicio de audio para automóviles

Figura 1: Arquitectura del servicio de audio del automóvil.

Las zonas de audio del automóvil son una abstracción de las salidas de audio, el enfoque de audio y otros parámetros de configuración de audio, todos los cuales se pueden administrar de forma independiente. Para fines de enrutamiento, cada zona se define como un conjunto de dispositivos de bus de salida de audio, tal como se organizan en la configuración de la política de audio. Los dispositivos varían 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 de 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 del automóvil para 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óvil administrada por CarOccupantZoneManager. Se usa en los 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 del ocupante a las pantallas, otros periféricos y el usuario una vez que este accede a una pantalla. Una zona de audio tiene los siguientes elementos:

  • Un ID de zona de audio y un ID de zona de ocupante

    • Asigna la zona de audio del mapa a la zona del ocupante (asiento, pantallas y otros periféricos).
    • Asigna el ID de usuario a una zona de audio cuando se accede
  • Es 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 crear las combinaciones de políticas de audio con atributos de audio asignados de manera diferente.

Esta configuración permite que los diferentes usos de los atributos de audio se enruten a diferentes dispositivos de salida en cada zona. Según el caso de uso, pueden reproducirse 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 la navegación se entrega al conductor.

Flujo de trabajo de acceso del pasajero con audio multizona

En el siguiente diagrama de secuencia, se muestra el flujo para habilitar el enrutamiento de audio cuando un pasajero accede a su pantalla respectiva:

imagen

Figura 2:

En esta secuencia, el acceso del usuario se propaga al servicio de audio del auto a través del servicio de zona de ocupante.

  1. El servicio de audio del automóvil (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.

  2. La API de AudioPolicy#setUserIdDeviceAffinity asigna el usuario nuevo a una zona, que toma 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 introdujeron 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 un altavoz del reposacabezas del asiento trasero y un periférico de auriculares del asiento trasero.

En este caso, se requieren dos configuraciones. Uno para el apoyacabezas del asiento trasero y otro para los auriculares periféricos. El audio de un usuario específico se enruta solo a una configuración a la vez.

Flujo de trabajo de configuración de zonas dinámicas

Figura 3: Flujo de trabajo de configuración de zonas dinámicas.

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 se asocian con el altavoz del dispositivo de salida y el apoyacabezas, respectivamente.

Cuando accede, al usuario se le asigna automáticamente la configuración predeterminada. Cuando el usuario elige cambiar la configuración, generalmente a través de una IU del sistema, el servicio de audio del automóvil ejecuta el cambio entre las dos configuraciones. De esta manera, el dispositivo de salida se cambia entre la bocina del Z1 y el reposacabezas del 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 APIs para administrar las configuraciones:

  • Son las configuraciones de consulta disponibles para una zona.
  • Consulta la configuración establecida actualmente para una zona.
  • Cambia a otra configuración.

Una app o un servicio de 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 los dos al pasajero. El usuario puede seleccionar una configuración diferente si presiona un comando para la configuración deseada.

Flujo de trabajo de configuración de zonas dinámicas

Figura 4: Flujo de trabajo de configuración de zonas dinámicas.

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 el audio de sus medios 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 figura, se muestra una versión simplificada de la arquitectura para la transmisión de audio de contenido multimedia para pasajeros de la zona principal.

Flujo de trabajo de configuración de zonas dinámicas

Figura 5: Flujo de trabajo de configuración de zonas dinámicas.

La imagen muestra que el dispositivo de salida de medios del conductor se comparte con el pasajero, lo que solo sucede mientras el pasajero está en el modo de transmisión a la zona principal. La política de audio dinámica también se usa para administrar el enrutamiento de audio del conductor, pero no se aplican cambios a las afinidades del dispositivo para el conductor. Para el pasajero, la lista de dispositivos de salida cambia de la siguiente manera:

  • El dispositivo de salida de medios para el pasajero se quitó de la lista de dispositivos
  • Se agregó el dispositivo de salida de medios para el conductor a la lista de dispositivos.
  • Los dispositivos de salida restantes para las zonas de audio de los 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 de medios asociada al pasajero, se selecciona la combinación de audio de medios asociada a la zona principal.

Un requisito clave para la transmisión de audio de la zona principal es que el dispositivo de salida de medios de la zona principal esté aislado de otros usos de atributos de audio. De lo contrario, durante la construcción de las mezclas de audio, se agregan otros atributos de audio a la mezcla. Cuando el sistema de audio realiza la selección de la combinación, se seleccionan todos los sonidos asociados a la combinación para su reproducción en la cabina principal.

Duplicación de audio de la zona de pasajeros

La función de audio espejo permite que los pasajeros compartan audio. La función de duplicación 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 duplicación de audio

Se requiere 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 duplicación. Con la definición anterior, se pueden iniciar dos sesiones de duplicación simultáneas.

En la siguiente figura, se muestra un diagrama simplificado de la duplicación de audio multizona entre dos pasajeros. El audio de ambos pasajeros se dirige a un dispositivo de duplicación de audio, bus_1000. La HAL de audio duplica el sonido en las zonas de origen.

Flujo de trabajo de configuración de zonas dinámicas

Figura 6: Flujo de trabajo de configuración de zonas dinámicas.

Esta ruta solo se habilita cuando los pasajeros están en modo de duplicación. De lo contrario, los dispositivos correspondientes a la zona de audio se asignan a los pasajeros. Cuando se habilita la duplicación por primera vez para un pasajero, la API de AudioPolicy#setUserIdDeviceAffinity modifica la ruta de la siguiente manera:

  • El dispositivo de salida de medios para el pasajero se quitó de la lista de dispositivos.
  • Se agregó el dispositivo de salida duplicado a la lista de dispositivos.
  • Los dispositivos de salida restantes para la zona de audio del pasajero 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 secuencia del flujo de trabajo de duplicación de audio.

Flujo de trabajo de 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 del automóvil configura el enrutamiento de audio para los pasajeros del usuario como se describió anteriormente. El servicio de audio del automóvil también envía un indicador a la HAL de audio para configurar y duplicar el audio del dispositivo duplicado en las zonas correspondientes.

En la imagen anterior, el servicio de audio del automóvil envía mirroring_src=bus_1000;mirroring_dest=bus_10,bus_20.

dónde

bus_1000 es el bus de origen, y bus_10 y bus_20 son los buses de destino.

En el diagrama de secuencia, no se muestra el indicador 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 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, de modo 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>