Roteamento de áudio em várias zonas

O serviço de áudio do carro usa a política de áudio dinâmico do Core Audio para facilitar o 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 de 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 deles enquanto o motorista ouve outra fonte na zona principal (geralmente, a cabine principal).

Arquitetura de áudio em várias zonas

Arquitetura de serviço de áudio para carro

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, 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 variam de acordo com 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 específico do assento. O CarOccupantZoneService também define o mapeamento da zona de ocupação para telas, outros periféricos e o usuário depois que 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 do ocupante (assento, telas e outros periféricos).
    • Mapear 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 forma.

    • 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 maneira diferente.

Essa configuração permite que diferentes usos de atributos de áudio sejam encaminhados para dispositivos de saída diferentes em cada zona. Dependendo do caso de uso, diferentes sons podem ser reproduzidos simultaneamente. Por exemplo, é possível 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 mídia enquanto a navegação é entregue ao motorista.

Fluxo de trabalho de login de passageiros com áudio multizona

O diagrama de sequência abaixo mostra o fluxo para ativar o roteamento de áudio quando um passageiro faz login na tela correspondente:

imagem

Figura 2.

Nessa sequência, o login do usuário é propagado para o serviço de áudio do carro pelo serviço de zona do ocupante.

  1. O serviço de áudio do carro (para uma zona de áudio específica) usa a API AudioPolicy#removeUserIdDeviceAffinity para remover as afinidades do dispositivo do usuário. Essa API usa um ID de usuário. Nesse caso, o usuário da zona anterior.

  2. A API AudioPolicy#setUserIdDeviceAffinity atribui 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 dinâmicas de zona 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 no encosto de cabeça do banco traseiro e um fone de ouvido periférico no banco traseiro.

Nesse caso, são necessárias duas configurações. Um para o encosto de cabeça do banco traseiro e outro para o periférico do fone de ouvido. O áudio de um usuário específico é encaminhado apenas para uma configuração por vez.

Fluxo de trabalho de configuração dinâmica de zona

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 dinâmica de zona. A zona de áudio 1 contém duas configurações, Config 0 e Config 1, que estão associadas ao alto-falante e ao encosto de cabeça do dispositivo de saída, respectivamente.

Ao fazer login, o usuário recebe automaticamente a configuração padrão. Quando o usuário muda 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 do Z1 e o encosto de cabeça do 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 configurações disponíveis para uma zona.
  • Consulta a configuração definida para uma zona.
  • Mude para outra configuração.

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 Query expõe os dois ao passageiro. O usuário pode selecionar uma configuração diferente tocando em um comando para a configuração desejada.

Fluxo de trabalho de configuração dinâmica de zona

Figura 4. Fluxo de trabalho de configuração de zona dinâmica.

Transmissão de áudio para passageiros na zona principal

A transmissão de áudio para passageiros na 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 mantém o controle total.

A figura abaixo mostra uma versão simplificada da arquitetura para a transmissão de áudio de mídia para passageiros da zona principal.

Fluxo de trabalho de configuração dinâmica de zona

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, o que só acontece enquanto o passageiro está no modo de transmissão para a zona principal. A política de áudio dinâmico também é usada para gerenciar o roteamento de áudio do motorista, mas nenhuma mudança é aplicada às afinidades de dispositivo dele. Para o passageiro, a lista de dispositivos de saída é alterada da seguinte forma:

  • O dispositivo de saída de mídia para passageiros é removido da lista de dispositivos
  • O dispositivo de saída de mídia para o motorista é adicionado à lista de dispositivos
  • Os dispositivos de saída restantes para zonas de áudio do passageiro 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 passageiro. Quando o serviço de política de áudio do sistema de áudio consulta qual mix de áudio deve ser selecionada para uma faixa de mídia associada ao passageiro, a mix de áudio de mídia associada à zona principal é selecionada.

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 mixagens de áudio, outros atributos de áudio são adicionados. Quando a seleção é feita pelo sistema de áudio, todos os sons anexados à mixagem são selecionados para reprodução na cabine principal.

Espelhamento de áudio da zona de passageiros

O recurso de espelhamento de áudio permite que os passageiros compartilhem áudio. O recurso de espelhamento duplica os dados de áudio em cada zona para que todos os passageiros possam ouvir o mesmo áudio. Nesse caso, a seleção de áudio é compartilhada 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 para passageiros exigiria um dispositivo de saída de espelhamento. Com a definição acima, é possível iniciar duas sessões de espelhamento simultâneas.

A figura abaixo mostra um diagrama simplificado do espelhamento de áudio em várias zonas entre dois passageiros. O áudio dos dois passageiros é encaminhado para um dispositivo de espelhamento de áudio, bus_1000. A HAL de áudio duplica o sinal para as zonas de origem.

Fluxo de trabalho de configuração dinâmica de zona

Figura 6. Fluxo de trabalho de configuração de zona dinâmica.

Esse encaminhamento só é ativado quando os passageiros estão no modo de espelhamento. Caso contrário, os dispositivos correspondentes à 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 trajeto:

  • O dispositivo de saída de mídia para passageiros é removido da lista de dispositivos.
  • O dispositivo de saída espelhada foi 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 de usuário do passageiro. A imagem a seguir mostra um diagrama de sequência do fluxo de trabalho de espelhamento de áudio.

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 do 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 os passageiros do usuário 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 espelhado 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

onde

bus_1000 é o barramento de origem, e bus_10 e bus_20 são os barramentos de destino.

O diagrama de sequência não mostra o sinal enviado pela API AudioManager#setParameters, que chega ao HAL pelo serviço de áudio.

Ao desativar o espelhamento de áudio, o seguinte indicador é enviado: mirroring_src=bus_1000;mirroring=off. Esse indicador pode ser usado pela 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.

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