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 oferecer suporte a float (mais de 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 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 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 melhorias a seguir não exigem implementação de parceiros:
- O número de faixas de saída de cliente simultâneas aumenta de 14 para 40, já que instâncias limitadas de cliente do
AudioTrack
têm sido um problema para aplicativos 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 mistas aumenta de 32 para 256 para evitar a contenção de recursos entre aplicativos e a IU do sistema.
Mudanças no 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 foi implementado no formato de amostra estéreo int16. Isso teve 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 em coletores de saída com uma contagem de canais maior que dois.
Na versão Android 9, o pipeline de processamento da cadeia de efeitos foi atualizado para oferecer suporte ao formato flutuante multicanal. Pontos chave:
- Os efeitos do software Android já foram migrados para estéreo flutuante.
- Os efeitos legados são suportados 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 seus próprios efeitos de saída personalizados devem fazer o seguinte na versão do Android 10:
- Atualize os efeitos de saída para suportar o formato flutuante 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 aos efeitos de saída do fornecedor legado e não puder atualizá-los, verifique o código legado da seguinte maneira:
- Os efeitos de saída legados (inserção) devem rejeitar configurações não suportadas em
EFFECT_CMD_SET_CONFIG
.- Verifique se o formato é int16.
- Verifique se as máscaras dos canais 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 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 alguma das verificações falhar, retorne
-EINVAL
.
- Verifique o código legado. Não presuma que funciona!
- Os efeitos de saída legados (inserção) devem rejeitar configurações não suportadas em