O serviço de áudio automotivo usa a política de áudio dinâmico Core Audio para facilitar casos de uso em carros.
Reprodução de áudio separada para cada passageiro, denominada áudio multizona, em que cada zona permite a reprodução simultânea de som.
Configuração de zona de áudio dinâmica.
Transmissão de áudio da zona primária do passageiro.
Espelho de áudio do passageiro.
Em cada caso de uso, o serviço de áudio automotivo usa a política de áudio dinâmico 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 AAOS. Um conjunto de dispositivos de saída está associado a uma zona e cada zona mantém o foco do áudio e o nível de volume. Os passageiros podem ouvir o áudio enquanto o motorista ouve outra fonte na zona primária (normalmente, a cabine principal).
Arquitetura de áudio multizona
Figura 1. Arquitetura do serviço de áudio automotivo.
As zonas de áudio automotivo são uma abstração de saídas de áudio, foco 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 diferem para cada definição de zona de áudio. Na Figura 1, os dispositivos de barramento 1 a 5 pertencem à zona zero, os dispositivos de barramento 6 a 8 pertencem à zona um e os dispositivos de barramento 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 trecho de código a seguir mostra uma configuração de áudio automotivo para a Figura 1:
<carAudioConfiguration version="3">
<zones>
<zone name="Zone0" audioZneId="0" occupantZoneI="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 automotivo gerenciada por CarOccupantZoneManager
. É usado em carros para definir um mapeamento de um usuário no carro para um local de assento específico. CarOccupantZoneService
também define o mapeamento da zona do ocupante para monitores, outros periféricos e o usuário assim que ele fizer login em um monitor. 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 dos ocupantes (assento, monitores e outros periféricos)
- Mapeie 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 possui um conjunto de grupos de volume. Cada grupo de volume possui um conjunto de dispositivos de barramento de áudio.
Quando o volume é alterado, todos os dispositivos de áudio de um grupo são controlados da mesma forma.
Cada dispositivo de áudio recebe uma lista de atributos de áudio. Essas informações são usadas para construir mixagens de políticas de áudio com atributos de áudio atribuídos de forma diferente.
Esta 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, diferentes sons podem ser reproduzidos simultaneamente. Por exemplo, você pode optar por configurar a cabine principal (zona primária) para reproduzir sons de mídia em todos os alto-falantes, mas os 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 mídia enquanto a navegação é entregue ao motorista.
Fluxo de trabalho de login de passageiros com áudio em várias zonas
O diagrama de sequência abaixo mostra o fluxo para habilitar o roteamento de áudio quando um passageiro faz login em seu respectivo display:
Figura 2.
Nesta sequência, o login do usuário é propagado para o serviço de áudio automotivo através do serviço de zona de ocupação.
O serviço de áudio automotivo (para uma zona de áudio específica) usa a API
AudioPolicy#removeUserIdDeviceAffinity
para remover as afinidades do dispositivo do usuário. Esta API usa um ID de usuário. Neste caso, o usuário da zona anterior.A API
AudioPolicy#setUserIdDeviceAffinity
atribui o novo usuário a uma zona, que recebe 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, configurações de zona dinâmica são introduzidas para permitir que os OEMs configurem diferentes conjuntos de dispositivos para os 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 no banco traseiro.
Neste caso, são necessárias duas configurações. Um para o encosto de cabeça do banco traseiro e para o periférico dos fones 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 alterar as configurações, geralmente por meio de uma UI do sistema, o serviço de áudio automotivo executa a alternância entre as duas configurações. Desta forma, o dispositivo de saída é alternado entre o alto-falante Z1 e o encosto de cabeça Z1.
O trecho de código abaixo mostra a configuração desta 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:
- Configurações de consulta disponíveis para uma zona.
- Consulte a configuração atualmente definida para uma zona.
- Mude para uma configuração diferente.
Um aplicativo ou serviço de UI 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 primária
A transmissão de áudio do passageiro da zona primária é um recurso introduzido no Android 14 para permitir que os passageiros transmitam seu áudio de mídia na zona primária. Desta forma, o áudio de mídia do passageiro pode ser transmitido para a cabine principal enquanto o motorista permanece com controle total.
A figura abaixo mostra uma versão simplificada da arquitetura para transmissão de áudio de mídia de passageiros da zona primária.
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 zona primária. A política de áudio dinâmico também é usada para gerenciar o roteamento de áudio do driver, mas nenhuma alteração é aplicada às afinidades de dispositivo do driver. Para o passageiro, a lista de dispositivos de saída é alterada da seguinte forma:
- O dispositivo de saída de mídia para passageiros foi removido da lista de dispositivos
- O dispositivo de saída de mídia do driver foi adicionado à lista de dispositivos
- Os dispositivos de saída restantes para zonas de áudio de passageiros permanecem na lista de dispositivos
Esta nova lista de dispositivos é atribuída ao passageiro pela API AudioPolicy#setUserIdDeviceAffinity
. Os parâmetros passados para a 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 questiona qual mix de áudio deve ser selecionado para uma faixa de mídia associada ao passageiro, o mix de áudio de mídia associado à zona primária é selecionado.
Um requisito importante para a transmissão de áudio da zona primária é que o dispositivo de saída de mídia da zona primária seja isolado de outros usos de atributos de áudio. Caso contrário, durante a construção das mixagens de áudio, outros atributos de áudio serão adicionados à mixagem. Quando a seleção da mixagem é realizada pelo sistema de áudio, todos os sons anexados à mixagem são selecionados para reprodução na cabine principal.
Espelho de áudio da zona de passageiros
O recurso de espelho de áudio permite que os passageiros compartilhem áudio. O recurso de espelho duplica os dados de áudio em cada zona de áudio para que todos os passageiros possam ouvir o mesmo áudio. Neste caso, o foco do áudio é compartilhado com os passageiros envolvidos no espelhamento de áudio.
Roteamento de espelho de áudio
É necessário um mínimo de dois passageiros para ativar o espelhamento de áudio. Como resultado, uma configuração de áudio com apenas duas zonas de áudio para passageiros exigiria um dispositivo de saída de espelho. Com a definição acima, duas sessões de espelhamento simultâneas podem ser iniciadas.
A figura abaixo mostra um diagrama simplificado para o espelhamento de áudio multizona entre dois passageiros. O áudio de ambos os passageiros é roteado para um dispositivo espelho de áudio, bus_1000
. O Audio HAL duplica o sinal para as zonas de origem.
Figura 6. Fluxo de trabalho de configuração de zona dinâmica.
Este roteamento é habilitado somente quando os passageiros estão no modo de espelhamento. Caso contrário, os dispositivos correspondentes à zona de áudio são atribuídos aos passageiros. Quando o espelhamento é habilitado pela primeira vez para um passageiro, a API AudioPolicy#setUserIdDeviceAffinity
modifica o roteamento:
- O dispositivo de saída de mídia para passageiros foi removido da lista de dispositivos.
- Dispositivo de saída espelhado 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 fornece um diagrama de sequência do fluxo de trabalho do espelhamento de áudio.
Figura 7. Fluxo de trabalho do espelho de áudio.
Na Figura 7, as APIs do gerenciador de áudio automotivo para gerenciar o espelhamento de áudio são chamadas a partir do Media System Service. 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 automotivo configura o roteamento de áudio para passageiros usuários conforme descrito acima. O serviço de áudio automotivo também envia um sinal ao HAL de áudio para configurar e duplicar o áudio do dispositivo espelho para as zonas correspondentes.
Na imagem acima, o serviço de áudio automotivo envia mirroring_src=bus_1000;mirroring_dest=bus_10,bus_20
onde,
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 por meio do serviço de áudio.
Ao desabilitar o espelho de áudio, o seguinte sinal é enviado, mirroring_src=bus_1000;mirroring=off
. Este sinal pode ser usado pelo HAL para desabilitar a duplicação de áudio quando o espelhamento de áudio não estiver habilitado. 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 trecho abaixo.
Neste trecho, dois dispositivos de espelhamento são definidos, bus_1000
e bus_2000
, para que quatro passageiros possam utilizar o espelhamento de áudio.
<carAudioConfiguration version="3">
<mirroringDevices>
<mirroringDevice address="bus_1000"/>
<mirroringDevice address="bus_2000"/>
</mirroringDevices>
<zones>
....
</zones>
</carAudioConfiguration>