O Android 13 apresenta uma maneira padrão para que os OEMs ofereçam suporte a áudio espacial e rastreamento da 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. Com o áudio espacial, os usuários percebem 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 com fones de ouvido. Com o áudio espacial, os usuários de fones de ouvido podem ouvir o diálogo na frente e os efeitos de som ambiente atrás, 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 simulado ao redor da cabeça. Essa experiência só é eficaz quando a latência é baixa, ou seja, o tempo entre o movimento da cabeça do usuário e o momento em que ele ouve a posição do alto-falante virtual se movendo de acordo.
O Android 13 otimiza o áudio espacial e o rastreamento da 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
O framework e a API de áudio do Android modificados 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:
Figura 1. Arquitetura do pipeline de áudio com espacializador
No novo modelo, o espacializador faz parte da estrutura de áudio e é desvinculado do decodificador. O espacializador recebe conteúdo de áudio misto e renderiza um stream estéreo para a HAL de áudio. Ao desacoplar o espacializador do decodificador, os OEMs podem escolher diferentes fornecedores para o decodificador e o espacializador e alcançar a latência de ida e volta desejada para o rastreamento da cabeça. Esse novo modelo também inclui hooks para o framework de sensores de 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:
Figura 2. Arquitetura do sistema com espacializador 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
nas interfaces de serviço de áudio interage com os componentes da interface do sistema para gerenciar
funcionalidades relacionadas ao espacializador com base nas capacidades 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 nas capacidades expressas pelo OEM, nos dispositivos conectados e nos casos de uso ativos. Uma nova classe de mixer SpatializerThread
mixa faixas multicanal e alimenta o mix resultante em um mecanismo de efeitos pós-processamento que renderiza uma saída estéreo para a HAL de áudio. Para o rastreamento da cabeça, a classe
SpatializerPoseController
agrupa funções relacionadas ao rastreamento da cabeça, à
interface com a pilha de sensores e à fusão e filtragem de sinais de sensores que são
enviados ao mecanismo de efeitos. Os dados do sensor de monitoramento da posição da cabeça são transmitidos pelo protocolo HID do driver Bluetooth.
As mudanças na arquitetura do pipeline de áudio do Android 13 melhoram o seguinte:
- Redução da latência entre o espacializador e os fones de ouvido.
- Fornecer APIs unificadas para atender aos desenvolvedores de apps.
- Controlar o estado do 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 calcular a postura da cabeça que pode ser consumida pelo mecanismo de efeitos 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 da 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 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 stream de áudio já foi processado para o Áudio Espacial.
Para APIs voltadas a desenvolvedores, consulte Spatializer
.
Os OEMs podem usar APIs do sistema para implementar a interface das configurações de sons e Bluetooth, que permite ao usuário controlar o estado do áudio espacial e o recurso de rastreamento da cabeça no dispositivo. O usuário pode ativar ou desativar o áudio espacial para o alto-falante e os fones de ouvido com fio na interface das configurações de sons. A configuração de áudio espacial do alto-falante só está disponível se a implementação do efeito espacializador for compatível com o modo transaural.
O usuário também pode ativar ou desativar o áudio espacial e o rastreamento da cabeça nas configurações de dispositivo Bluetooth de cada dispositivo. A configuração de rastreamento da cabeça só está disponível se o fone de ouvido Bluetooth tiver um sensor de rastreamento da cabeça.
As configurações padrão do Áudio Espacial estão sempre ATIVADAS se o recurso for compatível. Consulte Spatializer.java
para ver uma lista completa de APIs do sistema.
O novo tipo de sensor de rastreamento da cabeça Sensor.TYPE_HEAD_TRACKER
é adicionado ao
framework de sensores e exposto pela HAL de sensores como um sensor dinâmico por
Bluetooth ou USB.
Integrar o áudio espacial
Além de implementar o mecanismo de efeitos do espacializador, os OEMs precisam configurar a plataforma para oferecer suporte ao Áudio Espacial.
Requisitos
Para integrar o áudio espacial, é preciso atender aos seguintes requisitos:
- A HAL de áudio e o DSP de áudio precisam oferecer suporte a um caminho de saída dedicado para áudio espacial.
- Para usar o áudio espacial dinâmico com rastreamento da cabeça, os fones de ouvido precisam ter sensores de rastreamento da cabeça integrados.
- A implementação precisa obedecer ao padrão proposto para o monitoramento de posições da cabeça pelo protocolo HID de um fone de ouvido Bluetooth para um smartphone.
- A HAL de áudio v7.1 é necessária para oferecer suporte ao áudio espacial.
Para integrar o áudio espacial, siga estas etapas:
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.Declare a saída dedicada para a mixagem 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"/>
Declare a biblioteca de efeitos de espacialização 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"/>
Os fornecedores que implementam o efeito de espacialização precisam obedecer ao seguinte:
- Configuração e controle básicos idênticos a outros efeitos no HAL de efeitos.
Parâmetros específicos necessários para que a estrutura descubra recursos e configurações 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 estas diretrizes durante a implementação:
- Use o LE Audio quando disponível para facilitar a interoperabilidade e alcançar metas 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 inferior a 150 ms para uma boa experiência do usuário.
- Para Bluetooth (BT) Classic com Advanced Audio Distribution Profile (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 da cabeça está desativado, além de desativar 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 do CTS
disponíveis em SpatializerTest.java
.
Uma implementação inadequada dos algoritmos de espacialização ou rastreamento da cabeça pode fazer com que a recomendação de latência de ida e volta não seja atendida, conforme listado nas Recomendações.