Roteamento de áudio em várias zonas

O serviço de áudio para carros usa a Política de áudio dinâmico principal de áudio para facilitar o uso casos em carros.

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

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

  • Transmissão de áudio da zona principal do passageiro.

  • Espelho 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 automaticamente o áudio para o dispositivo de saída designado.

Áudio em várias zonas

O áudio em várias zonas permite que vários usuários interajam simultaneamente com o AAOS. Um um conjunto de dispositivos de saída é associado a uma zona, e cada zona mantém foco e volume. Os passageiros podem ouvir o áudio deles enquanto o motorista ouve outra fonte na zona primária (normalmente, a cabine principal).

Arquitetura de áudio em várias zonas

Arquitetura de serviço de áudio para carros

Figura 1. Arquitetura de serviço de áudio para carros.

As zonas de áudio do carro são uma abstração das saídas de áudio, da seleção de áudio e de outras configurações de áudio, que podem ser gerenciadas de maneira independente. Para roteamentos, cada zona é definida como um conjunto de dispositivos de barramento de saída de áudio, conforme 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, e 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 é definido em car_audio_configuration.xml. O snippet de código a seguir mostra um carro configuração de áudio 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 veicular gerenciada por CarOccupantZoneManager. Ela é usada em carros para definir um mapeamento para um usuário carro para um local de assento específico. CarOccupantZoneService também define o mapeamento da zona de ocupantes para telas, outros periféricos e o usuário quando o usuário faz login em uma tela. Uma zona de áudio tem:

  • Um ID da zona de áudio e um ID da zona de ocupante.

    • Mapeia a zona de áudio até a zona de ocupantes (assento, telas e outros periféricos)
    • Mapear qual ID do usuário recebe 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 volumes. Cada grupo de volumes tem 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. Isso são usadas para construir mixagens de políticas de áudio com diferentes atributos de áudio atribuídos.

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, podem ser reproduzidos simultaneamente. Por exemplo, é possível configurar cabine (zona principal) para reproduzir sons de mídia em todos os alto-falantes, exceto os de navegação apenas nos alto-falantes mais próximos do motorista. Com a reprodução simultânea de sons, a cabine principal continua ouvindo mídia enquanto a navegação é feita na motorista.

Fluxo de trabalho de login de passageiros por áudio em várias zonas

O diagrama de sequência abaixo mostra o fluxo para ativar o roteamento de áudio quando um o passageiro faz login nas respectivas telas:

imagem

Figura 2.

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

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

  2. A API AudioPolicy#setUserIdDeviceAffinity atribui o novo usuário a um zona, que recebe o ID do usuário e todos os dispositivos de uma zona específica configuração do Terraform.

Configurações de zona dinâmica

No Android 14, as configurações de zona dinâmica são para permitir que OEMs configurem diferentes conjuntos de dispositivos para os passageiros. O caso de uso permite que os passageiros no banco traseiro alternem entre o assento traseiro alto-falante com encosto de cabeça e um periférico para fone de ouvido no assento traseiro.

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

Configuração de zona dinâmica
fluxo de trabalho

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

A Figura 3 ilustra a arquitetura da configuração de zona dinâmica de desenvolvimento de software. A zona de áudio 1 contém duas configurações, Config 0 e Config 1. que estão associados ao alto-falante e ao encosto do dispositivo de saída, 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 interface de usuário do sistema, o o serviço de áudio do carro alterna entre as duas configurações. Neste o dispositivo de saída será alternado entre o alto-falante Z1 e o encosto 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:

  • Configurações de consulta disponíveis para uma zona.
  • A consulta atualmente define a configuração para uma zona.
  • Troque para uma configuração diferente.

Um app ou serviço de interface do sistema pode usar essas APIs para gerenciar a configuração do zona de áudio, como 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 o a configuração desejada.

Configuração de zona dinâmica
fluxo de trabalho

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 permitem que os passageiros transmitam o áudio de mídia na zona principal. Neste forma como o áudio de mídia do passageiro pode ser transmitido para a cabine principal enquanto o o motorista mantém controle total.

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

Configuração de zona dinâmica
fluxo de trabalho

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 driver é compartilhado com o Passageiro, isso só acontece enquanto ele está na zona principal modo A política de áudio dinâmico também é usada para gerenciar o roteamento de áudio para o mas nenhuma alteração é aplicada às afinidades de dispositivo dele. Para ao passageiro, a lista de dispositivos de saída será alterada da seguinte forma:

  • 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 foi adicionado à lista de dispositivos
  • Os dispositivos de saída restantes para as zonas de áudio do passageiro permanecem na lista de dispositivos

Essa nova lista de dispositivos é atribuída ao passageiro pelo 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 áudio do sistema de áudio O serviço de políticas consulta qual mix de áudio deve ser selecionado para uma faixa de mídia associada ao passageiro, o mix de mídia de áudio associado à conta principal é selecionada.

Um requisito importante para a transmissão de áudio da zona primária é que o componente de mídia isolado de outros usos de atributos de áudio. Caso contrário, durante criação das mixagens de áudio, outros atributos de áudio são adicionados à mixagem. Quando a seleção da mixagem é feita pelo sistema de áudio, todos os sons anexados a e o mix são selecionados para reprodução na cabine principal.

Espelho de áudio na zona do passageiro

O recurso de espelho de áudio permite que os passageiros compartilhem áudio. O recurso de espelho duplica dados de áudio em cada zona de áudio para que todos os passageiros possam ouvir o mesmo áudio. Nesse caso, a seleção de áudio é compartilhada com os passageiros no espelhamento de áudio.

Roteamento do espelho de áudio

São necessários no mínimo dois passageiros para ativar o espelhamento de áudio. Como uma configuração de áudio com apenas duas zonas de áudio para os passageiros um dispositivo de saída espelhado. Com a definição acima, dois recursos de espelhamento simultâneo em que as sessões podem ser iniciadas.

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

Configuração de zona dinâmica
fluxo de trabalho

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

Esse trajeto é ativado apenas quando os passageiros estão no modo de espelhamento. Se não, os dispositivos correspondentes à zona de áudio serão atribuídos aos passageiros. Quando o espelhamento é ativado pela primeira vez para um passageiro, o A API AudioPolicy#setUserIdDeviceAffinity modifica o roteamento:

  • O dispositivo de saída de mídia do passageiro foi removido da lista de dispositivos.
  • Dispositivo de saída espelhado adicionado à lista de dispositivos.
  • Os dispositivos de saída restantes da 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 ID do usuário do passageiro. A imagem a seguir mostra um diagrama de sequência de espelhamento de áudio.

Fluxo de trabalho do espelhamento de áudio

Figura 7. Fluxo de trabalho do espelhamento de áudio.

Na figura 7, as APIs do gerenciador de áudio do carro para gerenciar o espelhamento de áudio são chamado no serviço do sistema de mídia. Especificamente, a API para permitir o uso espelhamento do Usuário 1 e do Usuário 2, CarAudioManager#enableMirrorForAudioZones.

O serviço de áudio do carro configura o roteamento de áudio para os passageiros do usuário como descritas acima. O serviço de áudio do carro também envia um sinal para a HAL de áudio para configure e duplique o áudio do dispositivo espelhado para o zonas de controle.

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 ônibus de origem, e bus_10 e bus_20 são o destino. ônibus.

O indicador enviado pelo API AudioManager#setParameters, que alcança a HAL pelo áudio serviço.

Ao desativar o espelho de áudio, o sinal a seguir será enviado: mirroring_src=bus_1000;mirroring=off: Esse sinal pode ser usado pela HAL para desativar a duplicação de áudio quando o espelhamento de áudio não estiver ativado. Para definir áudio de espelhamento de dispositivos, o arquivo de configuração de áudio do carro terá uma seção chamada mirroringDevices, conforme mostrado no snippet abaixo.

Neste snippet, são definidos dois dispositivos de espelhamento, 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>