Configuración del audio del auto

En Android 10, car_audio_configuration.xml reemplazó a car_volumes_groups.xml y IAudioControl.getBusForContext. Los archivos de políticas de audio, que suelen estar incluidos en la partición del proveedor, representan la configuración del 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 figura 1, se ilustra una descripción general de la arquitectura del servicio de audio del automóvil, en la que este servicio lee el archivo de configuración de audio del automóvil para configurar el audio del dispositivo.

Descripción general de la arquitectura de audio del automóvil

Figura 1: Descripción general de la arquitectura de audio del automóvil.

Coloca el archivo de configuración de audio del automóvil en vendor/etc/ o system/etc/ en el dispositivo, y ten en cuenta que vendor/etc/ es el primer lugar en el que el servicio de audio del automóvil busca el archivo. Los servicios de audio del auto leen car_audio_configuration.xml para determinar la configuración de audio.

Zonas de audio del automóvil:

  • Cada zona de audio contiene un ID único.
  • Cada zona de audio se puede asignar a una zona de ocupante.
  • Las acciones de audio en cada zona son independientes entre sí:

    • Enfoque de audio
    • Enrutamiento de audio
    • Autosilenciado de fondo
  • Grupos de volúmenes de automóviles:

    • 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.

    • Es la asignación del contexto de audio a los dispositivos de audio. Se usa para crear una mezcla de audio que asigne usos de audio a un dispositivo de salida.

    • Todos los contextos de audio deben representarse dentro de una zona. Esto permite configurar el enrutamiento de audio con precisión para todos los usos de los 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. En esta tabla, se enumeran los contextos de audio estáticos en AAOS.

En esta tabla, se describe la asignación entre los contextos y los usos de audio. Se proporcionan filas destacadas para un nuevo uso del sistema.

CarAudioContext Associated AttributeUsages
MUSIC UNKNOWN
GAME
MEDIA
NAVIGATION ASSISTANCE_NAVIGATION_GUIDANCE
VOICE_COMMAND ASSISTANT
ASSISTANCE_ACCESSIBILITY
CALL_RING NOTIFICATION_RINGTONE
CALL VOICE_COMMUNICATION
VOICE_COMMUNICATION_SIGNALING
ALARM ALARM
NOTIFICATION NOTIFICATION
NOTIFICATION_*
SYSTEM_SOUND ASSISTANCE_SONIFICATION
EMERGENCY EMERGENCY
SAFETY SAFETY
VEHICLE_STATUS VEHICLE_STATUS
ANNOUNCEMENT 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, AAOS recurre al comportamiento predeterminado de AudioService.

Motor de políticas de audio configurable

Para extender aún más la administración de audio del automóvil en Android 14, AAOS introdujo el uso de la administración de audio a través del motor de políticas de audio configurable (CAP). Esto proporciona más flexibilidad para controlar el enrutamiento de audio y la administración del volumen, y permite una definición versátil de lo siguiente:

Puedes habilitar el motor de la política de audio configurable (CAP) con useCoreAudioVolume y useCoreAudioRouting. Consulta Motor de política de audio configurable para obtener más detalles.

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 al Audiomanager.PRIMARY_AUDIO_ZONE.

Configuración de ejemplo (versión 2)

Por ejemplo, un vehículo puede tener dos zonas: una principal y un sistema de entretenimiento en los 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 en diferentes dispositivos. Esto permite que la HAL aplique diferentes efectos de posprocesamiento y mezcle 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 como useFixedVolume, los niveles de volumen de cada grupo se pasan a la HAL para aplicarlos a la salida de estos dispositivos.

Para la zona principal, recomendamos que los sonidos del sistema estén separados de otros sonidos. Esto permite que los sonidos del vehículo se traten con mayor prioridad. El servicio de audio del automóvil 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 mayor prioridad que otra solicitud de enfoque.

En el ejemplo de la zona secundaria, todos los contextos de audio se enrutan a un solo dispositivo y a un solo grupo de volúmenes.

Definición del grupo de volúmenes para el motor de CAP

Para usar la administración de volumen a través del motor de CAP, como se menciona en Motor de políticas de audio configurable, la definición del grupo de volumen también debe contener un nombre:


<group name="media">
  <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 name="navigation">
  <device address="bus1_navigation_out">
    <context context="navigation"/>
  </device>
  <device address="bus2_voice_command_out">
    <context context="voice_command"/>
  </device>
</group>

El nombre de este grupo de volúmenes debe coincidir con el nombre del volumen definido en el motor de CAP. Además, el parámetro useFixedVolume también debe establecerse en false. Consulta Marcas de AAOS para la configuración de audio para obtener más información.

Configuración de audio de la zona del ocupante

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 según el ID de usuario.

Si volvemos a revisar la configuración de audio, pero utilizamos el nuevo campo para la asignación del ID de zona de ocupante y el ID de zona de audio, la nueva configuración sin las definiciones de grupos de volumen se puede establecer 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 define una asignación para la zona principal a la zona de ocupantes 0 y audioZoneId 1 a occupantZoneId 1. Se puede configurar cualquier asignación entre la zona de ocupantes y la zona de audio. Sin embargo, la asignación debe ser uno a uno. Las reglas que definieron los dos campos nuevos son las siguientes:

  • audioZoneId para la zona principal siempre es el ID de PRIMARY_AUDIO_ZONE. Si se define isPrimary="true", no se necesita audioZoneId.

  • No se pueden repetir los números audioZoneId y occupantZoneId.

  • audioZoneId y occupantZoneId solo pueden tener una asignación uno a uno.

Configuración de audio del auto en Android 14

En Android 14, AAOS introdujo el servicio de complemento del OEM, que te permite administrar el comportamiento de audio supervisado por el servicio de audio del automóvil. Junto con los nuevos servicios de complementos, se agregaron los siguientes cambios al archivo de configuración de audio del automóvil:

  • Contexto de audio del automóvil definido por el OEM
  • Configuraciones dinámicas de zonas secundarias

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 del automóvil permite que los usos de audio se agrupen de manera diferente a los contextos de audio estáticos definidos. 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 predefinidos. El formato general del contexto de audio del automóvil definido por el OEM se muestra más adelante.

Cada contexto del OEM requiere un name junto con una lista de usos 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 contiene AUDIO_USAGE_MEDIA y AUDIO_USAGE_UNKNOWN
  • El contexto de game contiene solo AUDIO_USAGE_GAME

El contexto se debe definir en la parte superior del archivo car_audio_configuration.xml. Cuando se definen los contextos del OEM, el resto de la configuración de audio del automóvil puede continuar como antes. Las siguientes reglas se aplican al contexto de audio del automóvil:

  • 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.

  • Todos los usos de audio definidos en AudioAttributes se deben usar para construir el contexto.

En sentido estricto, se debe usar la representación de cadena android.audio.policy.configuration.V7_0.AudioUsage de la utilización 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 adecuado para reducir los errores durante la migración de una versión de Android a otra.

Si bien el contexto definido por el OEM se introdujo para expandir aún más el servicio de audio del complemento del OEM, se puede seguir usando sin el servicio del complemento del OEM. El comportamiento del audio se asemeja al del servicio de audio estático:

  • Interacciones del foco de audio El atributo de audio se usa para determinar el mejor comportamiento de coincidencia según lo establece la matriz de interacción del enfoque de audio. Para obtener más información, consulta Enfoque de audio.

  • El atributo de audio de control de volumen de audio se usa para determinar la mejor coincidencia:

    • Es el grupo de volumen según el contexto definido por el OEM.
    • Prioridad de la lista de volúmenes estáticos configurada.
  • Comportamiento del autosilenciado de fondo:

    • El uso del atributo de audio para el enfoque de audio actual se utiliza para asignar la información del dispositivo de audio de salida, tal 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 reducción de audio, según la matriz estática de reducción de audio.

Estrategias de productos del motor de CAP

Cuando un dispositivo debe usar el motor de CAP para la administración de volumen o de rutas, el contexto definido por el OEM debe coincidir con la definición de la estrategia de producto del motor de CAP. De lo contrario, puedes usar el contexto definido por el OEM sin el motor de CAP.

Para obtener más información, consulta la estrategia del producto del motor de CAP en AAOS.

Configuraciones de zonas de audio dinámicas

En Android 14, para admitir una configuración dinámica de zonas de audio, también se actualizó a la versión 3 el esquema de configuración de audio del automóvil para definir zonas de audio. El nuevo esquema requiere que se configure 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 no principales pueden tener varios parámetros de configuración. Se aplican las siguientes reglas a la configuración de audio del automóvil:

  • La zona de audio principal solo puede tener un parámetro de configuración.

  • Las zonas de audio secundarias pueden tener varios parámetros de configuración.

  • 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.
    • La asignación de contexto de audio no tiene que ser la misma.
  • Los nombres de los dispositivos de salida de audio deben ser únicos en todas las zonas o configuraciones. El nombre de un 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 las mismas configuraciones 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

Si bien las versiones nuevas de car_audio_configuration.xml introducen funciones nuevas en cada actualización, aún puedes usar archivos anteriores en versiones más recientes de AAOS. Los OEM que actualicen a versiones nuevas de Android pueden volver a usar el archivo car_audio_configuration.xml.

Para usar una función nueva que requiere información nueva incluida 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 se admite en esa versión, se arroja un IllegalStateException cuando se inicia el servicio para automóviles. El mensaje de excepción contiene la información pertinente sobre qué información se usa y qué versión mínima se requiere.