Áudio de alta resolução

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

  • Float:os codecs e extratores WAV e FLAC foram atualizados para oferecer suporte a float (mais de 24 bits de precisão sem perdas). Os efeitos de mixagem e virtualizador foram atualizados para float. 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 suporte de 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.
  • Tempo: as informações de tempo são incluídas em toda a estrutura de áudio.

A partir do Android 9, as melhorias a seguir não exigem implementação de parceiros:

  • O número de faixas de saída simultâneas do cliente aumenta de 14 para 40, já que instâncias limitadas 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 na memória total do dispositivo) para permitir mais faixas de áudio de alta resolução simultâneas.
  • O total de faixas mistas aumenta de 32 para 256 para evitar a disputa de recursos contenção entre apps e a interface do sistema.

Alterações no efeito de saída

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

Antes da versão 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çavam 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 coletores de saída com uma contagem de canais maior que dois.

Na versão do Android 9, o pipeline de processamento da cadeia de efeitos foi atualizado para oferecer suporte ao formato de ponto flutuante multicanal. Pontos principais:

  • Os efeitos de software do Android já foram migrados para o ponto flutuante estéreo.
  • Os efeitos legados são compatíveis com adaptadores de formato, que convertem o ponto flutuante 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 seus 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 int16 não é mais necessário.
    • Ofereça suporte a contagens de canais de saída de 2 a 8 (para compatibilidade futura considere contagens de 1 a 30).
    • Ofereça suporte a contagens de canais de entrada que correspondam às contagens de canais de saída para efeitos de inserção. Os efeitos auxiliares continuam a ter uma contagem de canais de entrada de 1 (mono).
    • Ofereça suporte a máscaras de posição de canal (canônicas) e máscaras de índice de canal de (1 << n) - 1.
  • Se você precisar continuar oferecendo suporte a efeitos de saída legados do fornecedor e não puder atualizá-los, verifique o código legado da seguinte maneira:
    • Os efeitos de saída legados (inserção) precisam rejeitar configurações não compatíveis 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 qualquer uma 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 multicanal, dependendo se o coletor de saída é multicanal. Eles precisam rejeitar configurações não compatíveis em EFFECT_CMD_SET_CONFIG.
      • Verifique se o formato é int16.
      • Verifique se a máscara de canal de entrada é mono e a máscara de canal de saída é estéreo.
      • Se qualquer uma das verificações falhar, retorne -EINVAL.
    • Verifique o código legado. Não presuma que ele funcione.