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
AudioTracktê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.
- Os efeitos de saída legados (inserção) precisam rejeitar
configurações não compatíveis em