Configuración de audio del coche

En Android 10, car_audio_configuration.xml reemplazó car_volumes_groups.xml y IAudioControl.getBusForContext . Los archivos de política de audio, normalmente contenidos 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 .

La Figura 1 a continuación ilustra una descripción general de alto nivel de la arquitectura del servicio de audio para automóvil en la que el servicio de audio para automóvil lee el archivo de configuración de audio para automóvil para configurar el audio para el 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.

Coloque el archivo de configuración de audio del automóvil en vendor\etc\ o system\etc\ en el dispositivo, siendo vendor\etc\ el primer lugar donde el servicio de audio del automóvil 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 del coche:

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

    • Enfoque de audio
    • Enrutamiento de audio
    • Audio ducking
  • Grupos de volumen 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.

    • Mapeo del contexto de audio a dispositivos de audio. Úselo para construir una mezcla de audio que asigne usos de audio a un dispositivo de salida.

    • Todos los contextos de audio deben estar representados dentro de una zona. Esto permite configurar con precisión el enrutamiento de audio para todos los usos de atributos de audio.

Contextos de audio

Para simplificar la configuración del audio AAOS, se han agrupado usos similares en CarAudioContexts . Estos contextos de audio se utilizan en todo CarAudioService para definir enrutamiento, grupos de volumen, enfoque de audio y gestión de reducción. Los contextos de audio estático en AAOS se enumeran a continuación.

Esta tabla describe la asignación entre contextos y usos de audio. Las filas resaltadas se proporcionan para un nuevo uso del sistema.

CocheAudioContexto Usos de atributos asociados
MÚSICA UNKNOWN
GAME
MEDIA
NAVEGACIÓN ASSISTANCE_NAVIGATION_GUIDANCE
COMANDO DE VOZ ASSISTANT
ASSISTANCE_ACCESSIBILITY
LLAMADA_RING NOTIFICATION_RINGTONE
LLAMAR VOICE_COMMUNICATION
VOICE_COMMUNICATION_SIGNALING
ALARMA ALARM
NOTIFICACIÓN NOTIFICATION
NOTIFICATION_*
SISTEMA_SONIDO ASSISTANCE_SONIFICATION
EMERGENCIA EMERGENCY
SEGURIDAD SAFETY
ESTADO_VEHÍCULO VEHICLE_STATUS
ANUNCIO ANNOUNCEMENT

Habilitar el enrutamiento AAOS

Para utilizar el enrutamiento basado en AAOS, debe establecer el indicador audioUseDynamicRouting en true :

<resources>
    <bool name="audioUseDynamicRouting">true</bool>
</resources>

Cuando es false , el enrutamiento y gran parte de CarAudioService se desactiva y AAOS vuelve al comportamiento predeterminado de AudioService .

Zona primaria

De forma predeterminada, todo el audio se enruta a la zona principal. Sólo existe una zona primaria, que se indica en la configuración mediante el atributo isPrimary="true" . A la zona principal se le asigna automáticamente Audiomanager.PRIMARY_AUDIO_ZONE .

Configuración de muestra (versión 2)

Por ejemplo, un vehículo puede tener dos zonas, una zona principal y un sistema de entretenimiento en el asiento trasero. En este escenario, puede diseñar una posible versión 2 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 HAL aplique diferentes efectos de posprocesamiento y mezcle la salida en cada dispositivo utilizando el hardware del vehículo. Los dispositivos se han organizado en varios grupos de volumen: multimedia, navegación, llamadas, alarmas y sonidos del sistema. Si el sistema está configurado para useFixedVolume , entonces los niveles de volumen para cada grupo se pasan al 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 para el automóvil ya hace estas distinciones para los sonidos del vehículo en términos de enfoque y gestión de agachamiento. Por ejemplo, una solicitud de enfoque de sonido de emergencia tiene mayor prioridad que otra solicitud de enfoque.

Para simplificar las cosas, en el ejemplo de la zona secundaria todos los contextos de audio se enrutan a un único dispositivo y un grupo de volúmenes.

Configuración de audio de la zona de ocupantes

En Android 11, car_audio_configuration.xml introdujo dos campos nuevos, audioZoneId y occupantZoneId . Puede utilizar audioZoneId para controlar la gestión de la zona de audio. Puede utilizar occupantZoneId para configurar el enrutamiento según la identificación del usuario.

Revisando la configuración de audio anterior, pero utilizando el nuevo campo para la identificación de la zona de ocupante y la asignación de identificación de la zona de audio, la nueva configuración sin las definiciones del grupo de volúmenes 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 para la zona primaria a la zona de ocupantes 0 y audioZoneId 1 a occupantZoneId 1. En general, se puede configurar cualquier asignación entre la zona de ocupantes y la zona de audio. Sin embargo, el mapeo debe ser uno a uno. Las reglas que definieron los dos nuevos campos se enumeran a continuación.

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

  • Los números audioZoneId y occupantZoneId no se pueden repetir.

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

Configuración de audio del coche Android 14

En Android 14, AAOS introdujo el servicio de complemento OEM, que le permite administrar de manera más activa el comportamiento de audio supervisado por el servicio de audio del automóvil. Junto con los nuevos servicios complementarios, se agregan los siguientes cambios al archivo de configuración de audio del automóvil:

  • Contexto de audio para automóvil definido por OEM
  • Configuraciones dinámicas de zona no primaria

Contexto de audio para automóvil definido por el OEM

Para habilitar una configuración de audio flexible, en Android 14, el servicio de audio para automóvil permite que los usos de audio se agrupen de manera diferente a los contextos de audio estáticos definidos anteriormente. Este contexto definido por OEM se puede definir en el archivo car_audio_configuration.xml versión 3.

En su lugar, se utilizan los contextos de audio estáticos definidos actualmente. A continuación se muestra el formato general del contexto de audio para automóvil definido por el OEM.

Cada uno de los contextos 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 contiene AUDIO_USAGE_MEDIA y AUDIO_USAGE_UNKNOWN
  • El contexto game contiene solo AUDIO_USAGE_GAME .

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

  • Las definiciones de contexto OEM son opcionales. En su lugar, se utiliza el contexto de audio estático.

  • No repita los nombres de los contextos.

  • No asigne el uso de atributos de audio a múltiples contextos.

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

Estrictamente hablando, la representación de cadena android.audio.policy.configuration.V7_0.AudioUsage del uso de audio se debe utilizar para la definición del contexto de audio OEM. En el futuro, los usos de atributos de audio más nuevos se asignarán al contexto más apropiado para reducir los errores al migrar de una versión de Android a otra.

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

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

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

    • Grupo de volúmenes basado en el contexto definido por el OEM.
    • Prioridad de la lista de volúmenes estáticos configurada.
  • Comportamiento de reducción de audio:

    • El uso de atributos de audio para el foco de audio actual se utiliza 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 utiliza para asignar el contexto estático correspondiente a atenuación, según la matriz de atenuación de audio estático.

Configuraciones de zonas de audio dinámicas

En Android 14, para adaptarse a una configuración dinámica de zonas de audio, el esquema de configuración de audio del automóvil 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, consulte 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 puede tener solo una (1) configuración. Las zonas no principales pueden tener múltiples configuraciones. Las siguientes reglas se aplican a las configuraciones de audio del automóvil:

  • La zona de audio principal solo puede tener una configuración.

  • Las zonas de audio no principales pueden tener múltiples 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:

    • La configuración de los grupos de volúmenes no tiene por qué ser la misma.
    • La asignación del contexto de audio no tiene por qué 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 o zonas de audio.

  • Los dispositivos de audio que pertenecen al mismo grupo de volumen deben tener las mismas configuraciones de ganancia de audio.

  • Todos los contextos de audio (OEM o estáticos) deben asignarse para cada configuración de audio.

Compatibilidad hacia adelante

Aunque las nuevas versiones de car_audio_configuration.xml introducen nuevas funciones en cada actualización, aún puedes usar archivos más antiguos en versiones más nuevas de AAOS. Los OEM que actualizan a nuevas versiones de Android pueden reutilizar el archivo car_audio_configuration.xml .

Para utilizar una nueva función que requiere nueva información contenida en car_audio_configuration.xml , se debe actualizar la versión. Al intentar utilizar una versión anterior de un archivo con información que no es compatible con esa versión del archivo, se genera una IllegalStateException cuando se inicia el servicio de automóvil. El mensaje de excepción contiene información relevante sobre qué información se utiliza y qué versión mínima se requiere.