Áudio de alta resolução

A versão do Android 10 inclui as seguintes melhorias para áudio de alta resolução:

  • Ponto flutuante:os codecs e extratores WAV e FLAC foram atualizados para oferecer suporte a ponto flutuante (24 bits ou mais de precisão sem perdas). Os efeitos de downmix e virtualizador foram atualizados para ponto flutuante. A precisão atualizada é permitida pelo MediaPlayer (NuPlayer).
  • Alta frequência:os codecs e extratores WAV e FLAC foram atualizados para oferecer suporte a 192 kHz. Os efeitos padrão fornecidos pelo Android são testados para compatibilidade com 192 kHz em frequências padrão. As frequências padrão permitidas são 88,2 kHz, 96 kHz, 176,4 kHz e 192 kHz.
  • Multicanal:os efeitos de reprodução padrão do Android são testados para suporte multicanal de até oito canais.
  • Timing:informações de tempo são incluídas em toda a estrutura de áudio.

A partir do Android 9, as seguintes melhorias não exigem nenhuma implementação de parceiro:

  • O número de faixas de saída simultâneas do cliente aumenta de 14 para 40, já que instâncias limitadas do cliente de AudioTrack têm sido um problema para apps no Android 8.x.
  • A memória máxima do cliente/servidor aumenta de 4 MB para 32 MB (dependendo da memória total do dispositivo) para permitir mais faixas de áudio simultâneas de alta resolução.
  • O total de faixas mixadas aumenta de 32 para 256 para evitar a disputa de recursos entre apps e a interface do sistema.

Mudanças no efeito da saída

Consulte Efeitos de áudio para conferir as mudanças na versão do Android 11.

Antes do lançamento do Android 9, o processamento da cadeia de efeitos era implementado no formato de amostra estéreo int16. Isso tinha várias limitações:

  • Todos os efeitos de saída forçaram a conversão de dados de áudio de ponto flutuante para int16, causando perda de precisão.
  • Os efeitos de saída foram rejeitados de receptores de saída com uma contagem de canais maior que dois.

No lançamento do Android 9, o pipeline de processamento da cadeia de efeitos foi atualizado para oferecer suporte ao formato de ponto flutuante multicanal. Pontos importantes:

  • Os efeitos de software do Android já foram migrados para ponto flutuante estéreo.
  • Os efeitos legados são compatíveis com adaptadores de formato, que convertem float em int16 conforme necessário.

Implementar efeitos de saída

Uma implementação de referência para efeitos de saída está disponível em frameworks/av/media/libeffects.

Os parceiros que implementam os próprios efeitos de saída personalizados precisam fazer o seguinte para a versão do Android 10:

  • Atualize os efeitos de saída para oferecer suporte ao formato de ponto flutuante multicanal:
    • O suporte ao processamento de Int16 não é mais necessário.
    • Suporte a contagens de canais de saída de 2 a 8. Para compatibilidade futura, considere contagens de 1 a 30.
    • Suporte a contagens de canais de entrada correspondentes às contagens de canais de saída para inserir efeitos. Os efeitos auxiliares continuam com uma contagem de canais de entrada de 1 (mono).
    • Suporte a máscaras de posição do canal (canônicas) e máscaras de índice do canal de (1 << n) - 1.
  • Se você precisar continuar oferecendo suporte a efeitos de saída de fornecedores legados e não puder atualizá-los, verifique o código legado da seguinte maneira:
    • A saída legada (inserção) precisa rejeitar configurações sem suporte em EFFECT_CMD_SET_CONFIG.
      • Verifique se o formato é int16.
      • Verifique se as máscaras de canal de entrada e saída são estéreo.
      • Se alguma das verificações falhar, retorne -EINVAL.
    • Os efeitos de saída legados (auxiliares) são configurados pelo AudioFlinger com uma máscara de canal de entrada mono e máscaras de canal de saída potencialmente multicanais, dependendo se o coletor de saída é multicanal. Eles precisam rejeitar configurações incompatíveis em EFFECT_CMD_SET_CONFIG.
      • Verifique se o formato é int16.
      • Verifique se a máscara do canal de entrada é mono e a máscara do canal de saída é estéreo.
      • Se alguma das verificações falhar, retorne -EINVAL.
    • Verifique o código legado. Não suponha que ele funcione.