Áudio de alta resolução

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

  • Float: codecs WAV, FLAC e extratores são atualizados para suportar float (24+ bits de precisão sem perdas). Os efeitos Downmix e Virtualizer são atualizados para flutuar. A precisão atualizada é permitida pelo MediaPlayer (NuPlayer).
  • Alta frequência: codecs WAV, FLAC e extratores são atualizados para suportar 192 kHz. Os efeitos padrão fornecidos pelo Android são testados para suporte a 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 para oito canais.
  • Tempo: As informações de tempo estã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 de cliente simultâneas aumenta de 14 para 40, pois instâncias limitadas de cliente do AudioTrack têm sido um problema para aplicativos no Android 8.x.
  • A memória máxima de 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 mistas aumenta de 32 para 256 para evitar a contenção de recursos entre aplicativos e a interface do usuário do sistema.

Alterações do efeito de saída

Consulte Efeitos de áudio para alterações 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 sumidouros de saída com uma contagem de canais maior que dois.

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

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

Implementando 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 devem fazer o seguinte para a versão do Android 10:

  • Atualize os efeitos de saída para suportar o formato float multicanal:
    • O suporte ao processamento Int16 não é mais necessário.
    • Suporta contagens de canais de saída de 2 a 8 (para compatibilidade futura, considere contagens de 1 a 30).
    • Suporta contagens de canais de entrada correspondentes à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).
    • Suporta máscaras de posição de canal (canônicas) e máscaras de índice de canal de (1 << n) - 1 .
  • Se você precisar continuar a oferecer suporte a efeitos de saída de fornecedores herdados e não puder atualizá-los, verifique o código herdado da seguinte maneira:
    • Os efeitos de saída herdada (inserção) devem rejeitar configurações não suportadas em EFFECT_CMD_SET_CONFIG .
      • Verifique se o formato é int16.
      • Verifique se as máscaras do canal de entrada e saída são estéreo.
      • Se qualquer uma das verificações falhar, retorne -EINVAL .
    • Os efeitos de saída herdados (auxiliares) são configurados pelo AudioFlinger com uma máscara de canal de entrada mono e máscaras de canal de saída potencialmente multicanal, dependendo se o coletor de saída é multicanal. Eles devem rejeitar configurações não suportadas 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 qualquer uma das verificações falhar, retorne -EINVAL .
    • Verifique o código legado. Não assuma que funciona!