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 os casos de uso em carros.

  • Reprodução de áudio separada para cada passageiro, chamada de áudio de várias zonas, em que cada zona permite a reprodução simultânea de som.

  • Configuração de zona de áudio dinâmica.

  • Transmissão de áudio na 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âmico para encaminhar automaticamente o áudio para o dispositivo de saída designado.

Áudio multizona

O áudio de várias zonas 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 de várias zonas

Arquitetura do serviço de áudio para carros

Figura 1. Arquitetura do 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 são diferentes 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 1, e os dispositivos de barramento 9 a 11 pertencem à zona 2.

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 abaixo mostra uma configuração de áudio de 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. CarOccupantZoneService também define o mapeamento da zona do 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 ocupantes.

    • Mapeia a zona de áudio para a zona do ocupante (assento, telas e outros periféricos)
    • Mapear qual ID do 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 misturas 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 roteados 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 o compartimento principal (zona principal) para reproduzir sons de mídia em todos os alto-falantes, mas sons de navegação somente 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 é transmitida ao motorista.

Fluxo de trabalho de login do 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:

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 do usuário. Nesse caso, o usuário da zona anterior.

  2. 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, as 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 de encosto de cabeça e um fone de ouvido.

Nesse caso, são necessárias duas configurações. Uma para o encosto de cabeça do banco traseiro e outra para o fone de ouvido. O áudio de um usuário específico é roteado somente para uma configuração por vez.

Fluxo de trabalho de configuração de zonas dinâmicas

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

Ao fazer login, a configuração padrão é atribuída automaticamente ao usuário. 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 para essa configuração de 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.
  • Consultar a configuração definida atualmente para uma zona.
  • Mude para outra configuração.

Um app ou serviço da 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 de zonas dinâmicas

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

Transmissão de áudio do passageiro na zona principal

O áudio do passageiro 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 permanece no controle total.

A figura abaixo mostra uma versão simplificada da arquitetura do áudio de mídia do passageiro da zona principal.

Fluxo de trabalho de configuração de zonas dinâmicas

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âmico também é usada para gerenciar o roteamento de áudio do driver, mas nenhuma mudança é aplicada às afinidades de dispositivo do driver. Para o passageiro, a lista de dispositivos de saída é alterada da seguinte maneira:

  • O dispositivo de saída de mídia do passageiro foi removido da lista de dispositivos
  • O dispositivo de saída de mídia do driver é 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 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 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 importante para o áudio transmitido na 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 à mixagem. 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.

Espelho 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 do passageiro exigiria um dispositivo de saída espelhado. 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 em várias zonas entre dois passageiros. O áudio dos dois passageiros é roteado para um dispositivo de áudio espelhado, bus_1000. A HAL de áudio duplica o sinal para as zonas de origem.

Fluxo de trabalho de configuração de zonas dinâmicas

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

Esse roteamento é ativado somente quando os passageiros estão no modo de espelhamento. Caso contrário, os dispositivos correspondentes para a 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 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 do 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 pelo 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 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 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 espelho 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 estiver 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>