No Android 10, car_audio_configuration.xml
substituiu
car_volumes_groups.xml
e IAudioControl.getBusForContext
. Os arquivos de política
de áudio, normalmente contidos na partição do fornecedor, representam a configuração do hardware
de áudio da placa. Todos os dispositivos referenciados em
car_audio_configuration.xml
precisam ser definidos em
audio_policy_configuration.xml
.
A Figura 1 abaixo ilustra uma visão geral de alto nível da arquitetura do serviço de áudio do carro, em que o serviço de áudio do carro lê o arquivo de configuração de áudio para configurar o áudio do dispositivo.
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 em que o arquivo é procurado pelo serviço de áudio do carro. Os serviços de áudio
do carro leem car_audio_configuration.xml
para determinar a configuração
de áudio.
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 ocupantes.
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 volume do carro:
Todos os dispositivos de áudio que contêm um grupo de volume 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 precisa ser a mesma.
Mapeamento do contexto de áudio para dispositivos de áudio. Use isso para criar uma mixagem de áudio que mapeia os usos de áudio para um dispositivo de saída.
Todos os contextos de áudio precisam ser representados em uma zona. Isso permite 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 do AAOS, usos semelhantes foram agrupados
em CarAudioContexts
. Esses contextos de áudio são usados em
CarAudioService
para definir roteamento, grupos de volume, foco de áudio e gerenciamento
de abatimento. Confira abaixo os contextos de áudio estáticos no AAOS.
Esta tabela descreve o mapeamento entre contextos e usos de áudio. As linhas destacadas são fornecidas para um novo uso do sistema.
CarAudioContext | Usos de atributos associados |
---|---|
MÚSICA | UNKNOWN GAME |
NAVIGATION | ASSISTANCE_NAVIGATION_GUIDANCE |
VOICE_COMMAND | ASSISTANT |
CALL_RING | NOTIFICATION_RINGTONE |
CALL | VOICE_COMMUNICATION VOICE_COMMUNICATION_SIGNALING |
ALARME | ALARM |
NOTIFICAÇÃO | NOTIFICATION NOTIFICATION_* |
SYSTEM_SOUND | ASSISTANCE_SONIFICATION |
EMERGÊNCIA | EMERGENCY |
SEGURANÇA | SAFETY |
VEHICLE_STATUS | VEHICLE_STATUS |
ANÚNCIO | ANNOUNCEMENT |
Ativar o roteamento do AAOS
Para usar o roteamento baseado em 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 volta
ao comportamento padrão do AudioService
.
Zona principal
Por padrão, todo o áudio é roteado para a zona principal. Só existe uma zona primária, indicada na configuração pelo atributo
isPrimary="true"
. A zona principal é atribuída automaticamente a
Audiomanager.PRIMARY_AUDIO_ZONE
.
Exemplo de configuração (versão 2)
Por exemplo, um veículo pode ter duas zonas, uma principal e um sistema de entretenimento para o banco de trás. Nesse cenário, você pode projetar uma possível
car_audio_configuration.xml
versão 2 da seguinte 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 principal separa alguns contextos de áudio para
dispositivos diferentes. Isso permite que o HAL aplique diferentes efeitos de pós-processamento
e misture 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,
chamadas, alarmes e sons do sistema. Se o sistema estiver configurado para
useFixedVolume
, os níveis de volume de cada grupo serão transmitidos ao HAL
para serem aplicados à saída desses dispositivos.
Para a zona principal, recomendamos que os sons do sistema sejam separados de outros sons. Isso permite que os sons do veículo sejam tratados com maior prioridade. O serviço de áudio do carro já faz essas distinções para sons de veículos em termos de foco e gerenciamento de abatimento. Por exemplo, uma solicitação de foco de som de emergência tem prioridade mais alta do que outra solicitação de foco.
Para simplificar, no exemplo de zona secundária, todos os contextos de áudio são encaminhados para um único dispositivo e um grupo de volume.
Configuração de áudio da zona do ocupante
No Android 11, o car_audio_configuration.xml
introduziu
dois novos campos, audioZoneId
e occupantZoneId
. É possível usar audioZoneId
para controlar o gerenciamento de zonas de áudio. Use occupantZoneId
para configurar o roteamento com base no ID do usuário.
Voltando à configuração de áudio acima, mas usando o novo campo para mapeamento de ID da zona do ocupante e ID da zona de áudio, a nova configuração sem as definições do grupo de volume pode ser configurada 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 do ocupante 0
e audioZoneId
1 para occupantZoneId
1. Em geral, qualquer mapeamento entre
a zona do ocupante e a zona de áudio pode ser configurado. No entanto, o mapeamento precisa ser
um para um. As regras que definiram os dois novos campos estão listadas abaixo.
audioZoneId
para a zona principal é sempre o IDPRIMARY_AUDIO_ZONE
. SeisPrimary="true"
for definido,audioZoneId
não será necessário.Os números
audioZoneId
eoccupantZoneId
não podem ser repetidos.audioZoneId
eoccupantZoneId
só podem ter um mapeamento de um para um.
Configuração de áudio de carro do Android 14
No Android 14, o AAOS introduziu o serviço de plug-in OEM, que permite gerenciar de forma mais ativa o comportamento de áudio supervisionado pelo serviço de áudio do carro. Além dos novos serviços de plug-in, as seguintes mudanças foram adicionadas ao arquivo de configuração de áudio do carro:
- Contexto de áudio do carro definido pelo OEM
- Configurações dinâmicas de zonas não primárias
Contexto de áudio do carro definido pelo OEM
Para permitir 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
da versão 3.
Em vez disso, os contextos de áudio estáticos definidos no momento são usados. O formato geral do contexto de áudio do carro definido pelo OEM é mostrado abaixo.
Os contextos OEM exigem um name
com uma lista de uso de atributos
de áudio atribuídos ao contexto. No exemplo acima, dois contextos são
definidos:
<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émAUDIO_USAGE_MEDIA
eAUDIO_USAGE_UNKNOWN
- O contexto
game
contém apenasAUDIO_USAGE_GAME
O contexto precisa ser definido na parte de cima do arquivo car_audio_configuration.xml
. Quando os contextos do OEM são definidos, o restante da configuração de áudio do carro
pode 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.
Não repita os nomes dos 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.
Especificamente, a representação de string android.audio.policy.configuration.V7_0.AudioUsage
do uso de áudio precisa ser usada para a definição do contexto
de áudio do OEM. No futuro, os novos usos de atributos de áudio serão atribuídos ao
contexto mais adequado para reduzir erros ao migrar de uma versão do Android
para outra.
Embora o contexto definido pelo OEM tenha sido introduzido para expandir ainda mais o serviço de áudio do plug-in OEM, ele ainda pode ser usado sem o serviço de plug-in OEM. O comportamento do áudio é semelhante ao do serviço de áudio estático:
Interações de seleção de áudio. O atributo de áudio é usado para determinar o melhor comportamento de correspondência, conforme definido pela matriz de interação de foco de áudio. Para mais detalhes, consulte Foco de áudio.
O atributo de áudio de controle de volume é 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 o foco de áudio atual é usado para mapear as informações de saída do dispositivo de áudio conforme definido no arquivo de configuração de áudio do carro.
O atributo de áudio é usado para mapear o contexto estático correspondente para abaixá-lo, com base na matriz de abatimento de áudio estático.
Configurações de zonas de áudio dinâmicas
No Android 14, para acomodar uma configuração dinâmica de zonas de áudio, o esquema de configuração de áudio do carro para definir zonas de áudio também é atualizado para a versão 3. O novo esquema exige que uma configuração seja definida 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 do
Android 14, a zona principal pode ter apenas uma (1)
configuração. As zonas não primárias podem ter várias configurações. As regras
a seguir 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 zona de áudio e configuração de zona de áudio.
Dentro de uma zona de áudio, as configurações de áudio podem ser diferentes:
- A configuração dos grupos de volume não precisa ser a mesma.
- A atribuição do contexto de áudio não precisa ser a mesma.
Os nomes dos dispositivos de saída de áudio precisam ser exclusivos em todas as zonas ou configurações. O nome de um dispositivo precisa aparecer apenas uma vez em uma configuração de áudio ou em zonas.
Os dispositivos de áudio que pertencem ao mesmo grupo de volume precisam ter as mesmas configurações de ganho de áudio.
Todos os contextos de áudio (OEM ou estático) precisam ser atribuídos a cada configuração de áudio.
Compatibilidade com versões futuras
Embora as novas versões do car_audio_configuration.xml
apresentem novos
recursos em cada atualização, ainda é possível usar arquivos mais antigos em versões mais recentes do
AAOS. Os OEMs que estão atualizando para novas versões do Android podem reutilizar o
arquivo car_audio_configuration.xml
.
Para usar um novo recurso que exige novas informações contidas no
car_audio_configuration.xml
, a versão precisa ser atualizada. A tentativa de usar
uma versão mais antiga de um arquivo com informações que não têm suporte nessa versão
gerava uma IllegalStateException
quando o serviço de carro era iniciado. A mensagem de exceção
contém as informações relevantes sobre quais informações são usadas e
qual versão mínima é necessária.