Este artigo descreve a conversão de taxa de amostragem, também conhecida como reamostragem, no Android. Para ver a terminologia relacionada à conversão de taxa de amostragem, consulte Terminologia.
A conversão de taxa de amostragem é o processo de mudar um fluxo de amostras discretas de uma taxa de amostragem para outro fluxo com uma taxa de amostragem diferente. Um conversor de taxa de amostra, ou resampler, é um módulo que implementa a conversão de taxa de amostra. Em relação ao resampler, o fluxo original é chamado de sinal de origem, e o fluxo reamostizado é chamado de sinal de destino.
Os resamplers são usados em vários lugares no Android. Por exemplo, um arquivo MP3 pode ser codificado com uma taxa de amostragem de 44,1 kHz, mas precisa ser reproduzido em um dispositivo Android que ofereça suporte interno a áudio de 48 kHz. Nesse caso, um reamostrador seria usado para aumentar a amostragem do áudio de saída do MP3 de uma taxa de amostragem de origem de 44,1 kHz para uma taxa de amostragem de 48 kHz usada no dispositivo Android.
As características de um resampler podem ser expressas usando métricas, incluindo:
- grau de preservação da amplitude geral do sinal
- grau de preservação da largura de banda de frequência do sinal, sujeito a limitações da taxa de amostragem do sink
- latência geral pelo resampler
- fase consistente e atraso de grupo em relação à frequência
- complexidade computacional, expressa em ciclos de CPU ou consumo de energia
- Proporções permitidas de taxas de amostra de origem e coletor
- capacidade de mudar dinamicamente as proporções da taxa de amostragem
- quais formatos de amostra de áudio digital são aceitos
O resampler ideal preservaria exatamente a amplitude e a largura de banda de frequência do sinal de origem (sujeito a limitações da taxa de amostragem do sink), teria um atraso mínimo e consistente, teria uma complexidade computacional mínima, permitiria relações de conversão arbitrárias e dinâmicas e seria compatível com todos os formatos de amostra de áudio digital comuns. Na prática, os reamostradores ideais não existem, porque os reamostradores reais são um compromisso entre essas características. Por exemplo, as metas de qualidade ideal conflitam com atraso curto e baixa complexidade.
O Android inclui vários reamostradores de áudio, para que compromissos adequados possam ser feitos dependendo do caso de uso e da carga do aplicativo. Os reamostradores disponíveis são explicados em Implementação de reamostradores.
Implementações de reamostrador
As implementações de reamostrador disponíveis mudam com frequência e podem ser personalizadas pelos OEMs. Os reamostradores padrão, em ordem decrescente de distorção do sinal e ordem crescente de complexidade computacional, incluem:
- linear
- cúbico
- sinc com coeficientes originais
- sinc com coeficientes revisados
Em geral, os reamostradores sinc são mais adequados para a reprodução de músicas de maior qualidade, e os outros reamostradores devem ser reservados para casos em que a qualidade é menos importante (por exemplo, "cliques de tecla" ou algo semelhante).
A implementação específica de reamostrador selecionada depende do
caso de uso, da carga e do valor da propriedade do sistema
af.resampler.quality
. Para mais detalhes,
consulte o código-fonte do resampler de áudio no
AudioFlinger.