Configuração de áudio do carro

No Android 10, a car_audio_configuration.xml foi substituída car_volumes_groups.xml e IAudioControl.getBusForContext. A política de áudio normalmente contidos na partição do fornecedor, representam o hardware de áudio e a configuração da placa. Todos os dispositivos referenciados em car_audio_configuration.xml precisa ser definido em audio_policy_configuration.xml.

A figura 1 abaixo ilustra uma visão geral de alto nível do serviço de áudio do carro arquitetura em que o serviço de áudio do carro lê a configuração de áudio do carro para configurar o áudio no dispositivo.

Visão geral da arquitetura de áudio do carro

Figura 1. Visão geral da arquitetura de áudio do carro.

Coloque o arquivo de configuração de áudio do carro em vendor\etc\ ou system\etc\ no dispositivo, com o vendor\etc\ sendo o primeiro lugar pesquisado pelo arquivo pelo serviço de áudio do carro. O carro o serviço de áudio lê car_audio_configuration.xml para determinar configuração do Terraform.

Zonas de áudio do carro:

  • Cada zona de áudio contém um ID exclusivo.
  • Cada zona de áudio pode ser mapeada para uma zona de ocupante.
  • As ações de áudio em cada zona são independentes umas das outras:

    • Seleção de áudio
    • Roteamento de áudio
    • Redução de áudio
  • Grupos de volumes de carros:

    • Todos os dispositivos de áudio que contêm um grupo de volumes são controlados juntos com as mesmas mudanças de ganho. A configuração de ganho de áudio para todos os dispositivos em um grupo devem ser iguais.

    • Contexto de áudio para mapeamento de dispositivos de áudio. Use esse recurso para criar um áudio que mapeia o uso de áudio para um dispositivo de saída.

    • Todos os contextos de áudio precisam ser representados em uma zona. Isso permite para que o roteamento de áudio seja configurado com precisão para todos os usos de atributos de áudio.

Contextos de áudio

Para simplificar a configuração do áudio AAOS, grupos de uso semelhantes foram agrupados em CarAudioContexts. Esses contextos de áudio são usados CarAudioService para definir o roteamento, os grupos de volumes, a seleção de áudio e a redução de volume de projetos. Os contextos de áudio estático no AAOS estão listados abaixo.

Esta tabela descreve o mapeamento entre contextos e usos de áudio. Em destaque linhas são fornecidas para um novo uso do sistema.

Contexto de áudio do carro AttributeUsages associados
MÚSICA UNKNOWN
GAME
MEDIA
NAVIGATION ASSISTANCE_NAVIGATION_GUIDANCE
COMANDO_DE_VOZ ASSISTANT
ASSISTANCE_ACCESSIBILITY
CHAMADA_ANCO NOTIFICATION_RINGTONE
CALL VOICE_COMMUNICATION
VOICE_COMMUNICATION_SIGNALING
ALARME ALARM
NOTIFICAÇÃO NOTIFICATION
NOTIFICATION_*
SOM DO SISTEMA ASSISTANCE_SONIFICATION
EMERGÊNCIA EMERGENCY
SEGURANÇA SAFETY
VEHICLE_STATUS VEHICLE_STATUS
ANÚNCIO ANNOUNCEMENT

Ativar o roteamento AAOS

Para usar o roteamento baseado no AAOS, defina a flag audioUseDynamicRouting como true:

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

Quando false, o roteamento e grande parte de CarAudioService são desativados e o AAOS cai ao comportamento padrão de AudioService.

Zona principal

Por padrão, todo o áudio é roteado para a zona principal. Apenas uma zona principal existe, o que é indicado na configuração pelo atributo isPrimary="true": A zona principal recebe automaticamente Audiomanager.PRIMARY_AUDIO_ZONE:

Exemplo de configuração (versão 2)

Por exemplo, um veículo pode ter duas zonas, uma principal e um banco traseiro no sistema de entretenimento. Nesse cenário, é possível projetar car_audio_configuration.xml versão 2 desta maneira:

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

Neste exemplo, a zona primária separa alguns contextos de áudio para dispositivos diferentes. Isso permite que a HAL aplique diferentes tipos e misturar a saída em cada dispositivo usando o hardware do veículo. Os dispositivos foram organizados em vários grupos de volume: mídia, navegação, alarmes e sons do sistema. Se o sistema estiver configurado para useFixedVolume, os níveis de volume de cada grupo serão transmitidos para a HAL. para aplicar à saída desses dispositivos.

Para a zona principal, recomendamos que os sons do sistema sejam separados dos outros sons Isso permite que os sons do veículo sejam tratados com uma prioridade mais alta. O serviço de áudio do carro já faz essas distinções para sons de veículos em em termos de foco e gerenciamento de redução. Por exemplo, um foco de som de emergência tem maior prioridade do que outra.

Para simplificar, no exemplo da zona secundária, todos os contextos de áudio são roteadas para um único dispositivo e grupo de volumes.

Configuração de áudio da zona de ocupante

No Android 11, a car_audio_configuration.xml foi lançada dois novos campos, audioZoneId e occupantZoneId. Você pode usar audioZoneId para controlar o gerenciamento da zona de áudio. Você pode usar occupantZoneId para configurar roteamento com base no ID do usuário.

Revisitando a configuração de áudio acima, mas usando o novo campo para ID da zona de ocupante e mapeamento do ID da zona de áudio, a nova configuração sem o as definições do grupo de volumes podem ser configuradas da seguinte maneira:

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

A configuração acima define um mapeamento da zona primária para a zona de ocupantes 0 e audioZoneId 1 a occupantZoneId 1. Em geral, qualquer mapeamento entre a zona de ocupantes e a zona de áudio podem ser configuradas. No entanto, o mapeamento precisa ser individual. As regras que definiram os dois novos campos estão listadas abaixo.

  • audioZoneId para a zona principal é sempre PRIMARY_AUDIO_ZONE ID. Se isPrimary="true" estiver definido, então audioZoneId não será necessário.

  • Os números audioZoneId e occupantZoneId não podem ser repetidos.

  • audioZoneId e occupantZoneId só podem ter um mapeamento de um para um.

Configuração de áudio do carro no Android 14

No Android 14, o AAOS lançou o serviço de plug-in de OEM, o que permite um gerenciamento mais ativo do comportamento de áudio supervisionado pelo carro serviço de áudio. Junto com os novos serviços de plug-in, as seguintes mudanças são foram adicionados ao arquivo de configuração de áudio do carro:

  • Contexto de áudio do carro definido pelo OEM
  • Configurações dinâmicas de zona não primária

Contexto de áudio do carro definido pelo OEM

Para ativar uma configuração de áudio flexível, no Android 14, o serviço de áudio do carro permite que os usos de áudio sejam agrupados de maneira diferente dos contextos de áudio estáticos definidos acima. Esse contexto definido pelo OEM pode ser definido no arquivo car_audio_configuration.xml arquivo da versão 3.

Em vez disso, são usados os contextos de áudio estático atualmente definidos. Aspectos gerais do contexto de áudio do carro definido pelo OEM abaixo.

Cada contexto do OEM exige um name com uma lista de atributos de áudio que são atribuídos ao contexto. No exemplo acima, dois contextos são 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>
...
  • O contexto media contém AUDIO_USAGE_MEDIA e AUDIO_USAGE_UNKNOWN
  • O contexto game contém apenas AUDIO_USAGE_GAME

O contexto precisa ser definido na parte de cima do car_audio_configuration.xml . Quando os contextos do OEM são definidos, o restante da configuração de áudio do carro poderá continuar como antes. As regras a seguir se aplicam ao contexto de áudio do carro:

  • As definições de contexto do OEM são opcionais. O contexto de áudio estático é é usado no lugar dele.

  • Não repita nomes de contextos.

  • Não atribua o uso de atributos de áudio a vários contextos.

  • Todos os usos de áudio definidos em AudioAttributes precisam ser usados para construir o contexto.

Para falar a verdade, a android.audio.policy.configuration.V7_0.AudioUsage a representação de string do uso de áudio precisa ser usada para o contexto de áudio do OEM definição. No futuro, novos usos de atributos de áudio serão atribuídos às o contexto mais adequado para reduzir erros ao migrar de uma rede para outra.

Embora o contexto definido pelo OEM tenha sido introduzido para expandir ainda mais o plug-in do OEM. serviço de áudio, ele ainda poderá ser usado sem o serviço de plug-in do OEM. O áudio semelhante ao do serviço de áudio estático:

  • Interações de foco de áudio. O atributo de áudio é usado para determinar comportamento de correspondência, conforme configurado pela matriz de interação da seleção de áudio. Para detalhes, consulte Seleção de áudio.

  • O atributo áudio de controle de volume de áudio é usado para determinar a melhor correspondência:

    • Grupo de volumes com base no contexto definido pelo OEM.
    • Prioridade da lista de volumes estáticos configurada.
  • Comportamento de redução de áudio:

    • O uso do atributo de áudio para a seleção de áudio atual é usado para mapear ao saída de informações do dispositivo de áudio, conforme definido na configuração de áudio do carro .

    • O atributo de áudio é usado para mapear o contexto estático correspondente para abaixar, com base na matriz de redução de áudio estático.

Configurações de zonas de áudio dinâmicas

No Android 14, para acomodar zonas de áudio dinâmicas o esquema de configuração de áudio do carro para definir zonas de áudio também foi atualizada para a versão 3. O novo esquema requer a definição de uma configuração 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 saber mais, consulte o arquivo da versão 3 definido em device/generic/car/emulator/audio/car_audio_configuration.xml: A partir de Android 14, a zona principal pode ter apenas uma (1) configuração do Terraform. Zonas não primárias podem ter várias configurações. O seguinte se aplicam às configurações de áudio do carro:

  • A zona de áudio principal pode ter apenas uma configuração.

  • As zonas de áudio não principais podem ter várias configurações.

  • O nome precisa ser exclusivo para cada configuração e zona de áudio.

  • Dentro de uma zona de áudio, as configurações de áudio podem ser diferentes:

    • A configuração dos grupos de volumes não precisa ser a mesma.
    • A atribuição de contexto de áudio não precisa ser igual.
  • Os nomes dos dispositivos de saída de áudio devem ser exclusivos nas zonas ou configurações. Um nome de dispositivo deve aparecer apenas uma vez em uma configuração de áudio ou zonas.

  • Dispositivos de áudio do mesmo grupo de volumes precisam ter áudio igual configurações de ganho.

  • Todos os contextos de áudio (OEM ou estáticos) precisam ser atribuídos a cada áudio. configuração do Terraform.

.

Compatibilidade com versões futuras

As novas versões do car_audio_configuration.xml introduzem novos recursos em cada atualização, ainda será possível usar arquivos mais antigos em versões mais recentes do AAOS. OEMs que atualizarem para novas versões do Android poderão reutilizar o car_audio_configuration.xml.

Para usar um novo recurso que exija novas informações contidas no car_audio_configuration.xml, a versão precisa ser atualizada. Tentando usar uma versão mais antiga de um arquivo com informações que não são compatíveis com essa versão gera uma IllegalStateException quando o serviço do carro é iniciado. A exceção contém as informações relevantes sobre quais informações são usadas e qual versão mínima é necessária.