Áudio espacial e rastreamento da cabeça

O Android 13 apresenta uma maneira padrão para OEMs oferecerem suporte a áudio espacial e rastreamento de cabeça sem precisar de SDKs ou personalizações específicas do fornecedor.

O áudio espacial é uma tecnologia usada para criar um campo de som que envolve o ouvinte. O áudio espacial permite que os usuários percebam canais e sons individuais em posições diferentes das posições físicas dos transdutores do dispositivo de áudio usado para reprodução. Por exemplo, o áudio espacial oferece ao usuário a possibilidade de ouvir uma trilha sonora multicanal com fones de ouvido. Usando o áudio espacial, os usuários de fones de ouvido podem perceber o diálogo à sua frente e os efeitos de som surround atrás deles, apesar de terem apenas dois transdutores para reprodução.

O Rastreamento da cabeça ajuda o usuário a entender a natureza do palco de som espacializado que está sendo simulado ao redor da cabeça. Essa experiência só é eficaz quando a latência é baixa, sendo medida como o tempo entre o momento em que o usuário move a cabeça e o momento em que ouve a posição do alto-falante virtual se movendo de acordo.

O Android 13 otimiza o áudio espacial e o rastreamento de cabeça oferecendo o processamento de áudio espacial no nível mais baixo possível no pipeline de áudio para obter a menor latência possível.

Arquitetura

O framework e a API de áudio modificados do Android no Android 13 facilitam a adoção da tecnologia de áudio espacial em todo o ecossistema.

A figura a seguir ilustra as mudanças relacionadas ao áudio espacial feitas na arquitetura do pipeline de áudio com o Android 13:

spatial-audio

Figura 1. Arquitetura do pipeline de áudio com spatializer

No novo modelo, o spatializer faz parte do framework de áudio e é desvinculado do decodificador. O spatializer recebe conteúdo de áudio mixado e renderiza um stream estéreo para a HAL de áudio. O desacoplamento do spatializer do decodificador permite que os OEMs escolham diferentes fornecedores para o decodificador e o spatializer e alcancem a latência de ida e volta desejada para o rastreamento da cabeça. Esse novo modelo também inclui ganchos para o framework do sensor para rastreamento de cabeça.

A figura a seguir ilustra a arquitetura do sistema do framework de áudio para o spatializer e o efeito de rastreamento da cabeça:

spatial-sys-arch

Figura 2. Arquitetura do sistema com spatializer e rastreamento da cabeça

Todas as APIs de áudio espacial são agrupadas na classe pública Spatializer no nível do app. A classe SpatializerHelper em interfaces de serviço de áudio com os componentes da interface do sistema para gerenciar a funcionalidade relacionada ao spatializer com base nos recursos da plataforma e do dispositivo conectado. A nova classe Spatializer no serviço de política de áudio cria e controla o gráfico de áudio espacial necessário para mixagem e espacialização multicanal com base nos recursos expressos pelo OEM, nos dispositivos conectados e nos casos de uso ativos. Uma nova classe de mixer SpatializerThread mistura faixas multicanais e alimenta a mixagem resultante em um mecanismo de efeitos pós-processamento que renderiza uma saída estéreo para a HAL de áudio. Para o rastreamento de cabeça, a classe SpatializerPoseController agrupa funções relacionadas ao rastreamento de cabeça, para se conectar à pilha de sensores e mesclar e filtrar sinais de sensores que são alimentados para o mecanismo de efeitos. Os dados do sensor de rastreamento da cabeça são transmitidos pelo protocolo HID do driver Bluetooth.

As mudanças na arquitetura de pipeline de áudio do Android 13 melhoram o seguinte:

  • Redução da latência entre o spatializer e os fones de ouvido.
  • Fornecer APIs unificadas para atender aos desenvolvedores de apps.
  • Controle o estado de rastreamento da cabeça usando APIs do sistema.
  • Descobrir sensores de rastreamento de cabeça e associá-los a dispositivos de áudio ativos.
  • Mesclar sinais de vários sensores e calcular a pose da cabeça que pode ser consumida pelo mecanismo de efeito de espacialização.

Funções como compensação de viés, detecção de imobilidade e limitação de taxa podem ser implementadas usando a biblioteca de utilitários de rastreamento de cabeça.

APIs de áudio espacial

O Android 13 oferece um sistema de áudio espacial e APIs para desenvolvedores.

Os OEMs podem adaptar o comportamento do app com base na disponibilidade do recurso e no estado ativado, que é definido pelas APIs do sistema. Os apps também podem configurar atributos de áudio para desativar o áudio espacial por motivos estéticos ou para indicar que o stream de áudio já foi processado para áudio espacial.

Para APIs voltadas a desenvolvedores, consulte Spatializer.

Os OEMs podem usar APIs do sistema para implementar a interface de usuário de configurações de sons e Bluetooth, que permite ao usuário controlar o estado do áudio espacial e o recurso de rastreamento de cabeça para o dispositivo. O usuário pode ativar ou desativar o áudio espacial para o alto-falante e os fones de ouvido com fio na interface de configurações de sons. A configuração de áudio espacial do alto-falante só fica disponível se a implementação do efeito de espacialização oferecer suporte ao modo transaural.

O usuário também pode ativar ou desativar o áudio espacial e o rastreamento de cabeça na configuração do dispositivo Bluetooth para cada dispositivo. A configuração de rastreamento da cabeça só fica disponível se o fone de ouvido Bluetooth tiver um sensor de rastreamento da cabeça.

As configurações padrão do áudio espacial ficam sempre ATIVADAS se o recurso tiver suporte. Consulte Spatializer.java para conferir uma lista completa de APIs do sistema.

O novo tipo de sensor de rastreamento da posição da cabeça Sensor.TYPE_HEAD_TRACKER foi adicionado ao framework de sensores e exposto pelo HAL do sensor como um sensor dinâmico por Bluetooth ou USB.

Integrar áudio espacial

Além de implementar o mecanismo de efeito de espacialização, os OEMs precisam configurar a plataforma para oferecer suporte a áudio espacial.

Requisitos

Os seguintes requisitos precisam ser atendidos para integrar o áudio espacial:

  • A HAL de áudio e o DSP de áudio precisam oferecer suporte a um caminho de saída dedicado para áudio espacial.
  • Para áudio espacial com rastreamento da cabeça, os fones de ouvido precisam ter sensores de rastreamento da cabeça integrados.
  • A implementação precisa estar em conformidade com o padrão proposto para o rastreamento da cabeça pelo protocolo HID de um fone de ouvido Bluetooth para um smartphone.
  • A HAL de áudio v7.1 é necessária para o suporte a áudio espacial.

Siga estas etapas para integrar o áudio espacial:

  1. Declare o suporte a áudio espacial no arquivo device.mk da seguinte maneira:

    PRODUCT_PROPERTY_OVERRIDES += \
         ro.audio.spatializer_enabled=true
    

    Isso faz com que AudioService inicialize o suporte ao spatializer.

  2. Declare uma saída dedicada para a mixagem de áudio espacial em audio_policy_configuration.xml, da seguinte maneira:

    <audioPolicyConfiguration>
      <modules>
       <module>
         <mixPorts>
         <mixPort name="spatializer" role="source"   flags="AUDIO_OUTPUT_FLAG_SPATIALIZER">
           <profile name="sa" format="AUDIO_FORMAT_PCM_FLOAT"
             samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
    
  3. Declare a biblioteca de efeitos de spatializador em audio_effects.xml da seguinte maneira:

    <audio_effects_conf>
          <libraries>
             <library name="spatializer_lib" path="libMySpatializer.so"/>
              …
             </libraries>
          <effects>
           <effect name="spatializer" library="spatializer_lib" uuid="myunique-uuid-formy-spatializereffect"/>
    
  4. Os fornecedores que implementam o efeito de espacialização precisam seguir o seguinte:

    • Configuração e controle básicos idênticos a outros efeitos no HAL de efeitos.
    • Parâmetros específicos necessários para que o framework descubra os recursos e a configuração compatíveis, como:

      • SPATIALIZER_PARAM_SUPPORTED_LEVELS
      • SPATIALIZER_PARAM_LEVEL
      • SPATIALIZER_PARAM_HEADTRACKING_SUPPORTED
      • SPATIALIZER_PARAM_HEADTRACKING_MODE
      • SPATIALIZER_PARAM_SUPPORTED_CHANNEL_MASKS
      • SPATIALIZER_PARAM_SUPPORTED_SPATIALIZATION_MODES
      • SPATIALIZER_PARAM_HEAD_TO_STAGE

    Consulte effect_spatializer.h para mais informações.

Recomendações

Recomendamos que os OEMs sigam as diretrizes abaixo durante a implementação:

  • Use o áudio LE quando disponível para facilitar a interoperabilidade e alcançar os objetivos de latência.
  • A latência de ida e volta, da detecção de movimento do sensor ao áudio recebido pelos fones de ouvido, precisa ser menor que 150 ms para uma boa experiência do usuário.
  • Para Bluetooth (BT) Classic com perfil de distribuição de áudio avançado (A2DP):
    • Use um codec de baixa latência, como o Opus.
    • Implemente funções de controle de latência na HAL de áudio. Isso permite a otimização de energia e desempenho quando o rastreamento de cabeça está desativado e desativa o rastreamento de cabeça em condições não ideais.

Validação

Para validar a funcionalidade do recurso de áudio espacial, use os testes do CTS disponíveis em SpatializerTest.java.

A implementação inadequada dos algoritmos de espacialização ou de rastreamento da cabeça pode causar a falha na recomendação de latência de ida e volta, conforme listado nas Recomendações.