Áudio espacial e rastreamento da cabeça

O Android 13 apresenta uma maneira padrão para OEMs oferecem suporte a áudio espacial e rastreamento da cabeça sem a necessidade de recursos específicos do fornecedor ou SDKs.

Áudio espacial é uma tecnologia usada para criar um campo sonoro em torno do ouvinte. O áudio espacial permite que os usuários percebam canais e sons individuais em posições que diferem das posições físicas dos transdutores do dispositivo de áudio usado para reprodução. Por exemplo, o áudio espacial oferece ao usuário capacidade de ouvir uma trilha sonora multicanal por meio de fones de ouvido. Usar a API espacial áudio, os usuários de fones de ouvido conseguem perceber diálogos à frente deles e 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 som espacial. simulados ao redor da cabeça deles. Essa experiência só é eficaz quando a latência for baixa, em que a latência é medida como o tempo entre o momento em que move a cabeça e a hora em que ouvem o movimento da posição do locutor virtual de acordo.

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

Arquitetura

A API e o framework de áudio modificado do Android 13 facilita 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 no Arquitetura de pipeline de áudio com o Android 13:

áudio-espacial

Figura 1. Arquitetura de pipeline de áudio com espacializador

No novo modelo, o espacializador faz parte do framework de áudio e é dissociados do decodificador. O espacializador recebe conteúdo de áudio misto renderiza um stream estéreo para a HAL de áudio; Desacoplar o espacializador do decodificador permite que OEMs escolham diferentes fornecedores para o decodificador e e para alcançar 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 da cabeça.

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

arco-do-sistema espacial

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

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

Mudanças na arquitetura do pipeline de áudio do Android 13 melhorar o seguinte:

  • Diminuir a latência entre o espacializador e os fones de ouvido.
  • Fornecimento de APIs unificadas para atender aos desenvolvedores de aplicativos.
  • controlar o estado de rastreamento da cabeça usando APIs do sistema;
  • Descobrir sensores de rastreamento da cabeça e associá-los a dispositivos de áudio ativos.
  • Combinar sinais de vários sensores e computar a posição da cabeça que pode ser consumidas pelo mecanismo de efeito espacial.

Funções como compensação de viés, detecção de imóvel e limitação de taxa podem ser implementados usando a biblioteca de utilitários de rastreamento de cabeça;

APIs de áudio espacial

O Android 13 oferece o sistema de áudio espacial e o desenvolvedor APIs de terceiros.

Os OEMs podem adaptar o comportamento do app com base na disponibilidade de recursos 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 fluxo de áudio é já processados para áudio espacial.

Para APIs voltadas para desenvolvedores, consulte Spatializer.

OEMs podem usar APIs do sistema para implementar a interface de configurações de sons e Bluetooth, que permite ao usuário controlar o estado do áudio espacial e a cabeça para dispositivos móveis. 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 som. O espaço A configuração de áudio do alto-falante só vai estar disponível se o efeito espacializador oferece suporte ao modo transaural.

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

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

O novo tipo de sensor de rastreamento da cabeça Sensor.TYPE_HEAD_TRACKER foi adicionado ao Framework do sensor e exposto pela HAL do sensor como um sensor dinâmico Bluetooth ou USB.

Integrar áudio espacial

Além de implementar o mecanismo de efeito de espacialização, os OEMs precisam configurar os próprios de suporte de áudio espacial.

Requisitos

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

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

Integre o áudio espacial seguindo estas etapas:

  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 espacializador.

  2. Declarar saída dedicada para o mix de áudio espacial no 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 espacialização 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 estar em conformidade com o seguinte:

    • Configuração básica e controle idênticos a outros efeitos em Efeito HAL
    • Parâmetros específicos necessários para que o framework descubra o suporte recursos e configuração, 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 usem as seguintes diretrizes durante a implementação:

  • Use LE Audio quando disponível para facilitar a interoperabilidade e aumentar a latência metas.
  • Latência de ida e volta, da detecção de movimento do sensor ao áudio recebido pelo fones de ouvido, precisam ter menos de 150 ms para ter uma boa UX.
  • Para Bluetooth (BT) Classic com perfil avançado de distribuição de áudio (A2DP, na sigla em inglês):
    • 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 potência e desempenho quando o rastreamento da cabeça está e desativando o rastreamento da cabeça em condições não ideais.

Validação

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

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