Enrutamiento de audio multizona

El servicio de audio del auto usa la política de audio dinámico de Core Audio para facilitar los casos de uso en los autos.

  • 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 de zona de audio dinámica

  • Transmisión de audio de la zona principal del pasajero

  • Duplicación de audio del pasajero

En cada caso de uso, el servicio de audio del auto 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 con AAOS de forma simultánea. 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

Arquitectura de servicio de audio para automóviles

Figura 1: Arquitectura del servicio de audio del auto

Las zonas de audio del auto 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. 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 difieren para cada definición de 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 auto 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 del auto administrada por CarOccupantZoneManager. Se usa en los autos para definir una asignación de un usuario en el auto a una ubicación de asiento específica. CarOccupantZoneService también define la asignación de la zona del ocupante a pantallas, otros periféricos y el usuario una vez que este accede a una pantalla. Una zona de audio tiene lo siguiente:

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

    • 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 los 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 todos los altavoces, pero los sonidos de navegación solo en los altavoces más cercanos al conductor. Con la reproducción simultánea de sonido, la cabina principal sigue escuchando contenido multimedia mientras se le proporciona navegación al conductor.

Flujo de trabajo de acceso de pasajeros de 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 del ocupante.

  1. El servicio de audio del auto (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 de usuario y todos los dispositivos para una configuración de zona específica.

Configuraciones de zona dinámica

En Android 14, se introducen configuraciones de zona dinámica para permitir que los OEMs 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. Una para el reposacabezas del asiento trasero y otra para el periférico de auriculares. 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 zona dinámica

En la figura 3, se ilustra la arquitectura del flujo de trabajo de configuración de zona dinámica. La zona de audio 1 contiene dos configuraciones, Config 0 y Config 1, que están asociadas con el altavoz del dispositivo de salida y el reposacabezas, respectivamente.

Cuando accede, al usuario 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 del auto ejecuta el cambio entre las dos configuraciones. De esta manera, el dispositivo de salida cambia entre el altavoz Z1 y el reposacabezas Z1.

En el siguiente fragmento de código, se muestra la configuración de esta configuración de 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 auto expone APIs para administrar las configuraciones:

  • Consulta las configuraciones disponibles para una zona.
  • Consulta la configuración establecida actualmente para una zona.
  • Cambia a una configuración diferente.

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 las 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 zona dinámica

Transmisión de audio de la zona principal del pasajero

La transmisión de audio de la zona principal del pasajero es una función introducida 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 figura, se muestra una versión simplificada de la arquitectura para la transmisión de audio multimedia de la zona principal del pasajero.

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

Figura 5: Flujo de trabajo de configuración de zona dinámica

La imagen muestra que el dispositivo de salida de contenido multimedia para el conductor se comparte con el pasajero. Esto solo sucede 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 para el 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 contenido multimedia para el pasajero se quita de la lista de dispositivos.
  • El dispositivo de salida de contenido multimedia para el conductor se agrega a la lista de dispositivos.
  • Los dispositivos de salida restantes para las zonas de audio del pasajero 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 construcción de las combinaciones de audio, se agregan otros atributos de audio a la combinación. Cuando el sistema de audio realiza la selección de la combinación, se seleccionan todos los sonidos adjuntos a la combinación para la reproducción en la cabina principal.

Duplicación de audio de la zona del pasajero

La función de duplicación de audio 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 enfoque de audio se comparte con los pasajeros involucrados en la duplicación de audio.

Enrutamiento de duplicación 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 de 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 enruta a un dispositivo de duplicación de audio, bus_1000. La HAL de audio duplica la señal a las zonas de origen.

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

Figura 6: Flujo de trabajo de configuración de zona dinámica

Este enrutamiento se habilita solo cuando los pasajeros están en modo de duplicación. De lo contrario, los dispositivos correspondientes para 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 el enrutamiento:

  • El dispositivo de salida de contenido multimedia para el pasajero se quita de la lista de dispositivos.
  • El dispositivo de salida de duplicación se agrega 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 auto para administrar la duplicación de audio desde el servicio del sistema de contenido multimedia. En específico, la API para habilitar la duplicación de audio para el usuario 1 y el usuario 2, CarAudioManager#enableMirrorForAudioZones.

El servicio de audio del auto configura el enrutamiento de audio para los pasajeros usuarios como se describió anteriormente. El servicio de audio del auto también envía una señal a la HAL de audio para configurar y duplicar el audio del dispositivo de duplicación a las zonas correspondientes.

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

donde,

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 la señal enviada a través de la API de AudioManager#setParameters, que llega a la HAL a través del servicio de audio.

Cuando se inhabilita la duplicación de audio, se envía la siguiente señal: mirroring_src=bus_1000;mirroring=off. La HAL puede usar esta señal 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 auto 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>