Áudio espacial e rastreamento de cabeça

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

O áudio espacial é uma tecnologia usada para criar um campo sonoro ao redor do ouvinte. O áudio espacial permite aos usuários perceber 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 capacidade de ouvir uma trilha sonora multicanal através de fones de ouvido. Usando áudio espacial, os usuários de fones de ouvido podem perceber o diálogo à sua frente e os efeitos surround atrás deles, apesar de terem apenas dois transdutores para reprodução.

O rastreamento da cabeça ajuda o usuário a compreender a natureza do palco sonoro espacializado que está sendo simulado ao redor de sua cabeça. Essa experiência é eficaz apenas quando a latência é baixa, onde a latência é 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 processamento de áudio espacial no nível mais baixo possível no pipeline de áudio para obter a menor latência possível.

Arquitetura

A estrutura e API de áudio Android modificadas no Android 13 facilitam a adoção da tecnologia de áudio espacial em todo o ecossistema.

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

spatial-audio

Figura 1. Arquitetura de pipeline de áudio com espacializador

No novo modelo, o espacializador faz parte da estrutura de áudio e está desacoplado do decodificador. O espacializador recebe conteúdo de áudio misto e renderiza um fluxo estéreo para o Audio HAL. A dissociação do espacializador do decodificador permite que os OEMs escolham diferentes fornecedores para o decodificador e o espacializador e alcancem a latência de ida e volta desejada para rastreamento de cabeça. Este novo modelo também inclui ganchos na estrutura do sensor para rastreamento da cabeça.

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

spatial-sys-arch

Figura 2. Arquitetura do sistema com espacializador e rastreamento de cabeça

Todas as APIs de áudio espacial são agrupadas na classe pública Spatializer no nível do aplicativo. A classe SpatializerHelper no serviço de áudio faz interface com os componentes da UI do sistema para gerenciar a funcionalidade relacionada ao espacializador com base na plataforma e nos recursos 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 , pelos dispositivos conectados e pelos casos de uso ativos. Uma nova classe de mixer SpatializerThread mistura trilhas multicanais e alimenta a mixagem resultante para um mecanismo FX de pós-processamento que renderiza uma saída estéreo para o Audio HAL. Para rastreamento de cabeça, a classe SpatializerPoseController agrupa funções relacionadas ao rastreamento de cabeça, para fazer interface com a pilha de sensores e para mesclar e filtrar sinais de sensores que são alimentados para o mecanismo de efeito. Os dados do sensor de rastreamento de cabeça são transportados pelo protocolo HID do driver Bluetooth.

As alterações na arquitetura do pipeline de áudio do Android 13 melhoram o seguinte:

  • Reduzindo a latência entre o espacializador e os fones de ouvido.
  • Fornecendo APIs unificadas para atender desenvolvedores de aplicativos.
  • Controlar o estado de rastreamento principal por meio de APIs do sistema.
  • Descobrir sensores de rastreamento de cabeça e associá-los a dispositivos de áudio ativos.
  • Mesclando sinais de vários sensores e calculando a pose da cabeça que pode ser consumida pelo mecanismo de efeito espacializador.

Funções como compensação de polarização, detecção de quietude 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 sistema de áudio espacial e APIs de desenvolvedor.

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

Para APIs voltadas para o desenvolvedor, consulte Spatializer .

Os OEMs podem usar APIs do sistema para implementar a IU 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 seu dispositivo. O usuário pode ativar ou desativar o áudio espacial para o alto-falante e fones de ouvido com fio na interface de configurações de sons. A configuração de áudio espacial para o alto-falante estará disponível somente se a implementação do efeito espacializador suportar o modo transaural.

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

As configurações padrão para áudio espacial estão sempre ATIVADAS se o recurso for compatível. Consulte Spatializer.java para obter uma lista completa de APIs do sistema.

O novo tipo de sensor de rastreamento de cabeça Sensor.TYPE_HEAD_TRACKER é adicionado à estrutura do Sensor e exposto pelo Sensor HAL como um sensor dinâmico por Bluetooth ou USB.

Integrar áudio espacial

Junto com a implementação do mecanismo de efeito espacializador, os OEMs devem configurar sua plataforma para suporte de áudio espacial.

Requisitos

Os seguintes requisitos devem ser atendidos para integrar áudio espacial:

  • O HAL de áudio e o DSP de áudio devem suportar um caminho de saída dedicado para áudio espacial.
  • Para áudio espacial com rastreamento de cabeça, os fones de ouvido devem ter sensores de rastreamento de cabeça integrados.
  • A implementação deve estar em conformidade com o padrão proposto para rastreamento de cabeças através do protocolo HID de um fone de ouvido Bluetooth para um telefone.
  • O Audio HAL v7.1 é necessário para suporte de áudio espacial.

Integre o áudio espacial usando as seguintes etapas:

  1. Declare suporte de áudio espacial em seu arquivo device.mk , da seguinte forma:

    PRODUCT_PROPERTY_OVERRIDES += \
         ro.audio.spatializer_enabled=true
    

    Isso faz com que AudioService inicialize o suporte ao espacializador.

  2. Declare a saída dedicada para o mix de áudio espacial em audio_policy_configuration.xml , da seguinte forma:

    <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 do espacializador em audio_effects.xml , da seguinte forma:

    <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 espacializador devem estar em conformidade com o seguinte:

    • Configuração básica e controle idêntico a outros efeitos no Effect HAL.
    • Parâmetros específicos necessários para que a estrutura descubra capacidades e configurações suportadas, 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 obter mais informações.

Recomendações

Recomendamos que os OEMs utilizem as seguintes diretrizes durante a implementação:

  • Use áudio LE quando disponível para facilitar a interoperabilidade e atingir metas de latência.
  • A latência de ida e volta, desde a detecção de movimento do sensor até o áudio recebido pelos fones de ouvido, deve ser inferior a 150 ms para uma boa UX.
  • Para Bluetooth (BT) Classic com perfil avançado de distribuição de áudio (A2DP):
    • Use um codec de baixa latência, como o Opus .
    • Implemente funções de controle de latência no Audio HAL . Isso permite a otimização da potência e do desempenho quando o rastreamento da cabeça está desligado e desativa o rastreamento da cabeça durante condições não ideais.

Validação

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

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