O Android 13 introduz uma maneira padrão para que os OEMs ofereçam suporte ao áudio espacial e ao 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 de som que envolve o ouvinte. Ele 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 capacidade de ouvir uma trilha sonora multicanal em fones de ouvido. Usando o áudio espacial, os usuários de fones de ouvido podem perceber o diálogo na frente deles 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 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, em que 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 é otimizado para áudio espacial e 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 modificados do 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 do framework de áudio e é separado do decodificador. O espacializador recebe conteúdo de áudio mixado e renderiza um stream estéreo para a HAL de áudio. A separação do espacializador do decodificador permite que os OEMs escolham fornecedores diferentes para o decodificador e o espacializador e alcancem 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 para rastreamento da cabeça.
A figura a seguir ilustra a arquitetura do sistema do framework de áudio para o efeito de espacializador 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 SpatializerHelper
classe nas interfaces de serviço de áudio interage com os componentes da interface 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 mixa faixas multicanal e alimenta a mixagem resultante para um mecanismo de FX de pós-processamento
que renderiza uma saída estéreo para a HAL de áudio. Para o rastreamento da cabeça, a
SpatializerPoseController classe agrupa funções relacionadas ao rastreamento da cabeça, para
fazer a interface com a pilha de sensores e mesclar e filtrar sinais de sensores que são
enviados ao 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 do pipeline de áudio do Android 13 melhoram o seguinte:
- Redução da latência entre o espacializador e os fones de ouvido.
- Fornecimento de APIs unificadas para atender aos desenvolvedores de apps.
- Controle do estado de rastreamento da cabeça por APIs do sistema.
- Detecção de sensores de rastreamento da cabeça e associação deles a dispositivos de áudio ativos.
- Mesclagem de sinais de vários sensores e computação da pose da cabeça que pode ser consumida pelo mecanismo de efeitos do espacializador.
Funções como compensação de bias, 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 APIs de áudio espacial do sistema e do desenvolvedor.
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 áudio espacial.
Para APIs voltadas para o desenvolvedor, 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 do 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 para o alto-falante só está disponível se a implementação do efeito espacializador oferecer suporte ao 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 da cabeça só está disponível se o fone de ouvido Bluetooth expor um sensor de rastreamento da cabeça.
As configurações padrão de áudio espacial estão sempre ATIVADAS se o recurso for compatível. Consulte Spatializer.java
para conferir 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 á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
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 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 oferecer suporte ao áudio espacial.
Integre o áudio espacial seguindo estas etapas:
Declare o suporte ao áudio espacial no arquivo
device.mk, da seguinte maneira:PRODUCT_PROPERTY_OVERRIDES += \ ro.audio.spatializer_enabled=trueIsso faz com que o
AudioServiceinicialize 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 do espacializador 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"/>Os fornecedores que implementam o efeito espacializador precisam estar em conformidade com o seguinte:
- Configuração e controle básicos idênticos a outros efeitos na HAL de efeitos.
Parâmetros específicos necessários para que o framework descubra os recursos e a configuração com suporte, como:
SPATIALIZER_PARAM_SUPPORTED_LEVELSSPATIALIZER_PARAM_LEVELSPATIALIZER_PARAM_HEADTRACKING_SUPPORTEDSPATIALIZER_PARAM_HEADTRACKING_MODESPATIALIZER_PARAM_SUPPORTED_CHANNEL_MASKSSPATIALIZER_PARAM_SUPPORTED_SPATIALIZATION_MODESSPATIALIZER_PARAM_HEAD_TO_STAGE
Consulte
effect_spatializer.hpara mais informações.
Recomendações
Recomendamos que os OEMs usem as diretrizes a seguir durante a implementação:
- Use o áudio LE 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 menor que 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 e a desativação do rastreamento da cabeça durante 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 rastreamento da cabeça pode causar falha no atendimento à recomendação de latência de ida e volta listada nas Recomendações.