Configuración del audio del auto

En Android 10, car_audio_configuration.xml reemplazó car_volumes_groups.xml y IAudioControl.getBusForContext. La política de audio archivos que, por lo general, se encuentran en la partición del proveedor, representan el hardware de audio configuración de la placa. Todos los dispositivos a los que se hace referencia en car_audio_configuration.xml debe definirse en audio_policy_configuration.xml

En la Figura 1, se muestra una descripción general de alto nivel del servicio de audio para automóviles arquitectura en la que el servicio de audio del auto lee la configuración de audio del auto para configurar el audio del dispositivo.

Descripción general de la arquitectura de Car Audio

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

Coloca el archivo de configuración de audio del vehículo en vendor\etc\. system\etc\ en el dispositivo, con la vendor\etc\ fue el primer lugar que el servicio de audio del automóvil buscó el archivo. El auto Los servicios de audio lee car_audio_configuration.xml para determinar el audio configuración.

Zonas de audio del automóvil:

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

    • Enfoque de audio
    • Enrutamiento de audio
    • Autosilenciado de fondo
  • Grupos de volumen del automóvil:

    • Todos los dispositivos de audio que contienen un grupo de volumen se controlan en conjunto con los mismos cambios de ganancia. La configuración de ganancia de audio para todos los dispositivos en un grupo debería ser la misma.

    • Contexto de audio a la asignación de dispositivos de audio. Úsala para construir un audio que asigna los usos de audio a un dispositivo de salida.

    • Todos los contextos de audio deben representarse dentro de una zona. Esto permite para que el enrutamiento de audio se configure con precisión para todos los usos de atributos de audio.

Contextos de audio

Para simplificar la configuración de audio AAOS, se agruparon usos similares CarAudioContexts. Estos contextos de audio se usan a lo largo CarAudioService para definir el enrutamiento, los grupos de volumen, el foco de audio y el autosilenciado de fondo y administración de posturas. A continuación, se enumeran los contextos de audio estático en AAOS.

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

Contexto de CarAudio AttributeUsages asociados
MÚSICA UNKNOWN
GAME
MEDIA
NAVIGATION ASSISTANCE_NAVIGATION_GUIDANCE
VOICE_COMMAND ASSISTANT
ASSISTANCE_ACCESSIBILITY
LLAMADAS_LLAMADAS NOTIFICATION_RINGTONE
CALL VOICE_COMMUNICATION
VOICE_COMMUNICATION_SIGNALING
ALARMA ALARM
NOTIFICACIÓN NOTIFICATION
NOTIFICATION_*
SONIDO_SISTEMA ASSISTANCE_SONIFICATION
EMERGENCIA EMERGENCY
DE LA MARCA SAFETY
ESTADO_DE_VEHÍCULO VEHICLE_STATUS
ANUNCIO ANNOUNCEMENT

Habilitar enrutamiento AAOS

Para utilizar el enrutamiento basado en AAOS, debes establecer la marca audioUseDynamicRouting como true

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

Cuando se inhabilita false, el enrutamiento y gran parte de CarAudioService, y el AAOS falla el comportamiento predeterminado de AudioService

Zona principal

De forma predeterminada, todo el audio se enruta a la zona principal. Solo una zona principal 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 asiento trasero. un sistema de entretenimiento. En este escenario, puedes diseñar una posible car_audio_configuration.xml versión 2 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 la HAL aplique diferentes y mezclar la salida en cada dispositivo mediante el hardware del vehículo. Los dispositivos se organizaron en varios grupos de volumen: contenido multimedia, navegación, llamadas, alarmas y sonidos del sistema. Si el sistema está configurado para useFixedVolume, los niveles de volumen de cada grupo se pasan a la HAL para aplicar 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 una prioridad más alta. El servicio de audio para automóviles ya hace estas distinciones con respecto a los sonidos del vehículo en en términos de enfoque y administración de atenuación. Por ejemplo, un foco de sonido de emergencia tiene mayor prioridad que otra solicitud de foco.

Para simplificar, en el ejemplo de la zona secundaria, se enrutados a un solo dispositivo y a un grupo de volúmenes.

Configuración de audio de la zona ocupada

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 basado en el ID del usuario.

Revisión de la configuración de audio anterior, pero con el nuevo campo para la asignación de ID de zona de ocupante e ID de zona de audio, la nueva configuración sin el Las definiciones de grupos de volúmenes se pueden 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 de la zona principal a la zona de ocupación 0. y audioZoneId 1 a occupantZoneId 1. En general, cualquier asignación entre se pueden configurar la zona de ocupación y la zona de audio. Sin embargo, la asignación debe estar para tener conversaciones individuales. A continuación, se enumeran las reglas que definieron los dos nuevos campos.

  • audioZoneId para la zona principal es siempre PRIMARY_AUDIO_ZONE id. Si Se definió isPrimary="true", por lo que no se necesitará audioZoneId.

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

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

Configuración de audio para autos de Android 14

En Android 14, AAOS introdujo el servicio de complementos del OEM, lo que permite controlar más activamente el comportamiento de audio supervisado por el vehículo servicio de audio. Junto con los nuevos servicios de complementos, se aplican los siguientes cambios: al archivo de configuración de audio del vehículo:

  • Contexto del audio para automóviles definido por el OEM
  • Configuraciones dinámicas de zonas no principales

Contexto del audio para automóviles definido por el OEM

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

En su lugar, se usan los contextos de audio estático definidos actualmente. En general, correspondiente al contexto del audio para el automóvil definido por el OEM.

Cada contexto de OEM requiere un name junto con una lista de atributos de audio. de uso que se asignan al contexto. En el ejemplo anterior, hay dos contextos definido:

<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 de car_audio_configuration.xml. . Cuando se definen los contextos del OEM, se aplica el resto de la configuración de audio del vehículo. puedes continuar como antes. Las siguientes reglas se aplican al contexto del audio del vehículo:

  • Las definiciones del contexto de OEM son opcionales. El contexto de audio estático es en su lugar.

  • No repitas nombres de contextos.

  • No asignes el uso de atributos de audio a varios contextos.

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

En sentido estricto, android.audio.policy.configuration.V7_0.AudioUsage Se debe usar una representación de cadena del uso de audio para el contexto de audio del OEM. definición. En el futuro, los usos más recientes de atributos de audio se asignarán al el contexto más adecuado para reducir los errores durante la migración desde un SO Android una versión a otra.

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

  • Interacciones de foco de audio El atributo de audio se usa para determinar la mejor comportamiento de coincidencia según la configuración de la matriz de interacción del foco de audio. Para consulta Enfoque de audio.

  • El atributo de audio de control de volumen del 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 autosilenciado de fondo:

    • El uso del atributo de audio para el foco de audio actual se utiliza para asignar al salida de información del dispositivo de audio, como se define en la configuración de audio del vehículo .

    • El atributo de audio se usa para asignar el contexto estático correspondiente a duck. según la matriz de autosilenciado de fondo estático.

Parámetros de configuración de zonas de audio dinámicas

En Android 14, para admitir zonas de audio dinámicas el esquema de configuración del audio del automóvil para definir las zonas de audio también se actualizó a la versión 3. Es necesario establecer una configuración para el nuevo esquema 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, consulta el archivo de la versión 3 definido en device/generic/car/emulator/audio/car_audio_configuration.xml Comienza en Android 14, la zona principal solo puede tener una (1) configuración. Las zonas no principales pueden tener varios parámetros de configuración. Lo siguiente se aplican a las configuraciones de audio del automóvil:

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

  • Las zonas de audio no principales pueden tener varias 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 variar:

    • No es necesario que la configuración de los grupos de volúmenes sea la misma.
    • No es necesario que la asignación de contexto de audio sea la misma.
  • Los nombres de dispositivos de salida de audio deben ser únicos en todas las zonas o configuraciones. R el nombre del dispositivo debe aparecer solo una vez en una o varias zonas de una configuración de audio.

  • Los dispositivos de audio que pertenezcan al mismo grupo de volúmenes deben tener el mismo audio y obtener parámetros de configuración.

  • Se deben asignar todos los contextos de audio (OEM o estático) a cada audio configuración.

Compatibilidad con versiones posteriores

Si bien las nuevas versiones de car_audio_configuration.xml presentan nuevas de cada actualización, podrás seguir usando los archivos más antiguos en las versiones más recientes de AAOS. Los OEM que actualicen a las nuevas versiones de Android pueden reutilizar la car_audio_configuration.xml.

Para usar una función nueva que requiere información nueva incluida en las car_audio_configuration.xml, se debe actualizar la versión. Intento de uso una versión anterior de un archivo con información no admitida en esa versión Arroja una IllegalStateException cuando se inicia el servicio del automóvil. La excepción contiene información relevante sobre la información que se usa y qué versión mínima se requiere.