O serviço de áudio do carro usa a política de áudio dinâmica do Core Audio para facilitar casos de uso em carros.
Reprodução de áudio separada para cada passageiro, chamada de áudio multizona, em que cada zona permite a reprodução simultânea de som.
Configuração dinâmica da zona de áudio.
Transmissão de áudio da zona principal do passageiro.
Espelhamento de áudio do passageiro.
Em cada caso de uso, o serviço de áudio do carro usa a política de áudio dinâmica para rotear automaticamente o áudio para o dispositivo de saída designado.
Áudio multizona
O áudio multizona permite que vários usuários interajam simultaneamente com o AAOS. Um conjunto de dispositivos de saída é associado a uma zona, e cada zona mantém o foco de áudio e o nível de volume. Os passageiros podem ouvir o áudio enquanto o motorista ouve outra fonte na zona principal (normalmente, a cabine principal).
Arquitetura de áudio multizona
Figura 1. Arquitetura de serviço de áudio do carro.
As zonas de áudio do carro são uma abstração de saídas de áudio, seleção de áudio e outras configurações de áudio, que podem ser gerenciadas de forma independente. Para fins de roteamento, cada zona é definida como um conjunto de dispositivos de barramento de saída de áudio, conforme organizado na configuração da política de áudio. Os dispositivos são diferentes para cada definição de zona de áudio. Na Figura 1, os dispositivos de barramento de 1 a 5 pertencem à zona zero, os dispositivos de barramento de 6 a 8 pertencem à zona um e os dispositivos de barramento de 9 a 11 pertencem à zona dois.
Configuração de áudio do carro
Normalmente, os dispositivos de saída são atribuídos a uma zona de áudio. Cada zona de áudio é definida em car_audio_configuration.xml. O snippet de código a seguir mostra uma configuração de áudio do carro para a Figura 1:
<carAudioConfiguration version="3">
<zones>
<zone name="Zone0" audioZneId="0" occupantZoneId="0">
<zoneConfigs>
<zoneConfig name="config0" isDefault="true">
<volumeGoups>
<group>
<device address="bus_1">
<context context="music"/>
</device>
</group>
<group>
<device address="bus_2">
<context context="navigation"/>
</device>
</group>
...
</volumeGroups>
</zoneConfig>
</zoneConfigs>
</zone>
<zone name="Zone1" audioZoneId="1" occupantZoneId="1">
<zoneConfigs>
<zoneConfig name="config0" isDefault="true">
<volumeGroups>
<group>
<device address="bus_6">
<context context="music"/>
</device>
</group>
<group>
<device address="bus_7">
<context context="navigation"/>
</device>
</group>
...
</volumeGroups>
</zoneConfig>
</zoneConfigs>
</zone>
...
...
</zones>
</carAudioConfiguration>
occupantZoneId é uma definição de serviço de carro gerenciada por CarOccupantZoneManager. Ele é usado em carros para definir um mapeamento de um usuário no carro para um local de assento específico. O CarOccupantZoneService também define o mapeamento da zona de ocupante para telas, outros periféricos e o usuário quando ele faz login em uma tela. Uma zona de áudio tem:
Um ID de zona de áudio e um ID de zona de ocupante.
- Mapeia a zona de áudio para a zona de ocupante (assento, telas e outros periféricos)
- Mapeia qual ID de usuário é atribuído a uma zona de áudio ao fazer login
Uma lista de configurações de áudio. Cada configuração de áudio tem um conjunto de grupos de volume. Cada grupo de volume tem um conjunto de dispositivos de barramento de áudio.
Quando o volume é alterado, todos os dispositivos de áudio em um grupo são controlados da mesma maneira.
Cada dispositivo de áudio recebe uma lista de atributos de áudio. Essas informações são usadas para criar as combinações de políticas de áudio com atributos de áudio atribuídos de forma diferente.
Essa configuração permite que diferentes usos de atributos de áudio sejam roteados para diferentes dispositivos de saída em cada zona. Dependendo do caso de uso, sons diferentes podem ser reproduzidos simultaneamente. Por exemplo, você pode configurar a cabine principal (zona primária) para reproduzir sons de mídia em todos os alto-falantes, mas sons de navegação apenas nos alto-falantes mais próximos do motorista. Com a reprodução simultânea de som, a cabine principal continua ouvindo a mídia enquanto a navegação é entregue ao motorista.
Fluxo de trabalho de login de passageiro de áudio multizona
O diagrama de sequência abaixo mostra o fluxo para ativar o roteamento de áudio quando um passageiro faz login na tela:
Figura 2.
Nessa sequência, o login do usuário é propagado para o serviço de áudio do carro pelo serviço de zona de ocupante.
O serviço de áudio do carro (para uma zona de áudio específica) usa a API
AudioPolicy#removeUserIdDeviceAffinitypara remover as afinidades do dispositivo do usuário. Essa API usa um ID de usuário. Nesse caso, o usuário da zona anterior.A API
AudioPolicy#setUserIdDeviceAffinityatribui o novo usuário a uma zona, que usa o ID do usuário e todos os dispositivos para uma configuração de zona específica.
Configurações de zona dinâmica
No Android 14, as configurações de zona dinâmica foram introduzidas para permitir que os OEMs configurem diferentes conjuntos de dispositivos para passageiros. O caso de uso permite que os passageiros no banco traseiro alternem entre um alto-falante do encosto de cabeça do banco traseiro e um periférico de fone de ouvido do banco traseiro.
Nesse caso, duas configurações são necessárias. Uma para o encosto de cabeça do banco traseiro e outra para o periférico do fone de ouvido. O áudio de um usuário específico é roteado apenas para uma configuração por vez.
Figura 3. Fluxo de trabalho de configuração de zona dinâmica.
A Figura 3 ilustra a arquitetura do fluxo de trabalho de configuração de zona dinâmica. A zona de áudio 1 contém duas configurações, Config 0 e Config 1, que estão associadas ao alto-falante do dispositivo de saída e ao encosto de cabeça, respectivamente.
Ao fazer login, o usuário recebe automaticamente a configuração padrão. Quando o usuário opta por mudar as configurações, geralmente por uma interface do sistema, o serviço de áudio do carro executa a troca entre as duas configurações. Dessa forma, o dispositivo de saída é alternado entre o alto-falante Z1 e o encosto de cabeça Z1.
O snippet de código abaixo mostra a configuração dessa zona dinâmica.
<carAudioConfiguration version="3">
<zones>
<zone name="Zone1" audioZoneId="1" occupantZoneId="1">
<zoneConfigs>
<zoneConfig name="Zone 1 Config 0" isDefault="true">
<volumeGroups>
<group>
<device address="bus_100">
<context context="music"/>
***
</device>
</group>
</volumeGroups>
</zoneConfig>
<zoneConfig name="Zone 1 Config 1">
<volumeGroups>
<group>
<device address="bus_101">
<context context="music"/>
***
</device>
</group>
</volumeGroups>
</zoneConfig>
</zoneConfigs>
</zone>
</zones>
Para facilitar o gerenciamento das configurações de áudio, o gerenciador de áudio do carro expõe APIs para gerenciar as configurações:
- Consultar as configurações disponíveis para uma zona.
- Consultar a configuração definida no momento para uma zona.
- Mudar para uma configuração diferente.
Um app ou serviço de interface do sistema pode usar essas APIs para gerenciar a configuração da zona de áudio, conforme mostrado na Figura 4. A API de consulta expõe as duas ao passageiro. O usuário pode selecionar uma configuração diferente tocando em um comando para a configuração desejada.
Figura 4. Fluxo de trabalho de configuração de zona dinâmica.
Transmissão de áudio do passageiro da zona principal
A transmissão de áudio do passageiro da zona principal é um recurso introduzido no Android 14 para permitir que os passageiros transmitam o áudio de mídia na zona principal. Dessa forma, o áudio de mídia do passageiro pode ser transmitido para a cabine principal enquanto o motorista permanece no controle total.
A figura abaixo mostra uma versão simplificada da arquitetura da transmissão de áudio de mídia do passageiro da zona principal.
Figura 5. Fluxo de trabalho de configuração de zona dinâmica.
A imagem mostra que o dispositivo de saída de mídia do motorista é compartilhado com o passageiro. Isso só acontece enquanto o passageiro está no modo de transmissão para a zona principal. A política de áudio dinâmica também é usada para gerenciar o roteamento de áudio do motorista, mas nenhuma mudança é aplicada às afinidades do dispositivo do motorista. Para o passageiro, a lista de dispositivos de saída é alterada da seguinte maneira:
- O dispositivo de saída de mídia do passageiro é removido da lista de dispositivos.
- O dispositivo de saída de mídia do motorista é adicionado à lista de dispositivos.
- Os dispositivos de saída restantes para zonas de áudio de passageiros permanecem na lista de dispositivos.
Essa nova lista de dispositivos é atribuída ao passageiro pela API AudioPolicy#setUserIdDeviceAffinity. Os parâmetros transmitidos à API são a lista de dispositivos e o ID do usuário do passageiro. Quando o serviço de política de áudio do sistema de áudio consulta qual mix de áudio será selecionado para uma faixa de mídia associada ao passageiro, o mix de áudio de mídia associado à zona principal é selecionado.
Um requisito fundamental para a transmissão de áudio da zona principal é que o dispositivo de saída de mídia da zona principal seja isolado de outros usos de atributos de áudio. Caso contrário, durante a construção das combinações de áudio, outros atributos de áudio serão adicionados à combinação. Quando a seleção de mix é realizada pelo sistema de áudio, todos os sons anexados ao mix são selecionados para reprodução na cabine principal.
Espelhamento de áudio da zona do passageiro
O recurso de espelhamento de áudio permite que os passageiros compartilhem áudio. O recurso de espelhamento duplica os dados de áudio em cada zona de áudio para que todos os passageiros possam ouvir o mesmo áudio. Nesse caso, o foco de áudio é compartilhado com os passageiros envolvidos no espelhamento de áudio.
Roteamento de espelhamento de áudio
É necessário ter pelo menos dois passageiros para ativar o espelhamento de áudio. Como resultado, uma configuração de áudio com apenas duas zonas de áudio de passageiros exigiria um dispositivo de saída de espelhamento. Com a definição acima, duas sessões de espelhamento simultâneas podem ser iniciadas.
A figura abaixo mostra um diagrama simplificado do espelhamento de áudio multizona entre dois passageiros. O áudio de ambos os passageiros é roteado para um dispositivo de espelhamento de áudio, bus_1000. O HAL de áudio duplica o sinal para as zonas de origem.
Figura 6. Fluxo de trabalho de configuração de zona dinâmica.
Esse roteamento é ativado apenas quando os passageiros estão no modo de espelhamento. Caso contrário, os dispositivos correspondentes da zona de áudio serão atribuídos aos passageiros.
Quando o espelhamento é ativado pela primeira vez para um passageiro, a API AudioPolicy#setUserIdDeviceAffinity modifica o roteamento:
- O dispositivo de saída de mídia do passageiro é removido da lista de dispositivos.
- O dispositivo de saída de espelhamento é adicionado à lista de dispositivos.
- Os dispositivos de saída restantes para a zona de áudio do passageiro permanecem na lista de dispositivos.
Com a lista de dispositivos, a API é chamada com a lista atualizada de dispositivos e o ID do usuário do passageiro. A imagem a seguir mostra um diagrama de sequência do fluxo de trabalho de espelhamento de áudio.
Figura 7. Fluxo de trabalho de espelhamento de áudio.
Na Figura 7, as APIs do gerenciador de áudio do carro para gerenciar o espelhamento de áudio são chamadas do serviço de sistema de mídia. Especificamente, a API para ativar o espelhamento de áudio para o usuário 1 e o usuário 2, CarAudioManager#enableMirrorForAudioZones.
O serviço de áudio do carro configura o roteamento de áudio para passageiros, conforme descrito acima. O serviço de áudio do carro também envia um sinal para o HAL de áudio para configurar e duplicar o áudio do dispositivo de espelhamento para as zonas correspondentes.
Na imagem acima, o serviço de áudio do carro envia
mirroring_src=bus_1000;mirroring_dest=bus_10,bus_20
em que
bus_1000 é o barramento de origem e bus_10 e bus_20 são os barramentos de destino.
Não mostrado no diagrama de sequência é o sinal enviado pela API AudioManager#setParameters, que chega ao HAL pelo serviço de áudio.
Ao desativar o espelhamento de áudio, o seguinte sinal é enviado: mirroring_src=bus_1000;mirroring=off. Esse sinal pode ser usado pelo HAL para desativar a duplicação de áudio quando o espelhamento de áudio não está ativado. Para definir dispositivos de espelhamento de áudio, o arquivo de configuração de áudio do carro contém uma seção chamada mirroringDevices, conforme mostrado no snippet abaixo.
Nesse snippet, dois dispositivos de espelhamento são definidos, bus_1000 e bus_2000, para que quatro passageiros possam usar o espelhamento de áudio.
<carAudioConfiguration version="3">
<mirroringDevices>
<mirroringDevice address="bus_1000"/>
<mirroringDevice address="bus_2000"/>
</mirroringDevices>
<zones>
....
</zones>
</carAudioConfiguration>