reTONE
BaixarGrátis · Android 4.0+

Por enquanto, o app reTONE está disponível em inglês e japonês. Outros idiomas estão previstos.

Notas técnicas

Especificações, como funcionam a conversão e a saída, aparelhos testados e outros detalhes. Esta página continua a partir de Recursos.

Principais especificações

Android4.0 ou posterior
CPUARM (armeabi-v7a, arm64-v8a). Também há versões para Intel (x86, x86_64), ainda não testadas em um celular Intel
PermissõesAcesso ao armazenamento e outras. O acesso à internet só é usado quando “Network features” está ativado
Formatos lidos pelo motor do reTONEWAV, AIFF/AIFC, DSF, DFF (não comprimido), FLAC, ALAC, Opus (Opus apenas em celulares ARM)
Faixas processadas pelo motor do reTONEAndroid 4.x: todos os FLAC e WAV. Android 5 ou posterior: nos caminhos que passam pelo mixer do Android, FLAC, WAV e ALAC cuja taxa difere da taxa de saída ou com profundidade acima de 16 bits (pode ser desativado na configuração “Conversion by reTONE”)
Conversão de taxa de amostragemFiltro FIR com janela de Kaiser (polifásico). Dentro de ±0.001 dB até 20 kHz (valor de projeto; para conversões entre taxas de 44.1 kHz ou mais)
Formato entregue pelo motor ao AndroidFloat de 32 bits no Android 5 ou posterior, 16 bits no 4.x (dither apenas para valores que 16 bits não conseguem representar exatamente). A profundidade de bits na saída do celular depende do aparelho
DAC USBUSB Audio Class 2. A Class 1 também é compatível (com poucos testes na prática). Faixas em taxas que o DAC aceita e que o celular consegue transportar são enviadas sem reamostragem. Prefere contêineres de 32 bits (24 ou 16 bits se não houver). DSD nativo sob certas condições
AssinaturaTodas as versões distribuídas são assinadas com a mesma chave

Formatos suportados

Os formatos que o Android do celular consegue tocar são reproduzidos com o decodificador e o processamento de som do próprio aparelho. DSD, AIFF e FLAC e WAV hi-res que o Android não consegue ler são reproduzidos pelo motor do reTONE.

Reproduzidos pelo AndroidFLAC, AAC, MP3, Ogg Vorbis, WAV, Opus e outros
Reproduzidos pelo motor do reTONEDSD (DSF, DFF), AIFF, WAV de 32 bits, ALAC (quando o celular não consegue tocá-lo). No Android 4.x, todos os FLAC e WAV, e Opus (em celulares ARM). Além disso, quando o Android falha ao tocar FLAC, WAV, AIFF, ALAC ou Opus, o engine do reTONE tenta tocar o arquivo (no caso de ALAC e Opus, também quando a reprodução trava sem exibir erro)
Não suportadosDFF com compressão DST, APE, WMA Lossless

Detalhes técnicos

Com faixas sem perdas ou sem compressão, qualquer decodificador escrito corretamente restaura os mesmos dados. Deixando de lado os efeitos de som do celular, o som muda principalmente em três pontos: a conversão de taxa de amostragem, o corte da profundidade de bits e o cálculo do volume e o mixer. O reTONE cuida desses pontos.

Contexto: o que afeta a qualidade do som

Faixas sem perdas, como FLAC, e sem compressão, como WAV, são restauradas exatamente aos dados originais por qualquer decodificador escrito corretamente, seja qual for o app que as toca. O que pode mudar o som é o processamento depois da decodificação (as três etapas abaixo, além dos efeitos de som do celular).

Conversão de taxa de amostragem

Muitos celulares Android fixam a saída em uma taxa como 48 kHz. Faixas em outra taxa, como áudio de CD ou hi-res, são reamostradas toda vez que tocam. A qualidade dessa conversão varia de aparelho para aparelho.

Corte da profundidade de bits

Em versões mais antigas do Android, faixas de 24 bits são cortadas para 16 bits.

Cálculo do volume e o mixer

O cálculo do volume e a mixagem com o som de outros apps também acontecem logo antes da saída.

O reTONE atua nesta etapa. Onde é preciso converter, o reTONE faz a conversão ele mesmo, e onde dá para evitar, ele não converte. Com DACs USB, o áudio vai para o DAC sem passar pelo processamento de áudio do Android. Quando as condições são atendidas com um DAC USB (veja “Volume do DAC USB” abaixo), a tela do caminho do sinal, aberta a partir do player, mostra BIT-PERFECT. Com o alto-falante embutido ou a saída de fones, não há como verificar o que o celular faz com o áudio depois do Android, então não podemos garantir uma saída bit-perfect.

A conversão de taxa de amostragem varia de celular para celular

O Android leva todo o áudio à taxa de saída do celular antes de tocar. Essa taxa varia entre aparelhos: muitos funcionam em 48 kHz, mas alguns em 44.1 kHz. Assim, a mesma faixa pode ser convertida em um celular e ficar intacta em outro.

Taxa de amostragem da faixaCelular com saída em 44.1 kHzCelular com saída em 48 kHz
44.1 kHz (CD etc.)Sem conversãoConvertida para 48 kHz
48 kHzConvertida para 44.1 kHzSem conversão
88.2, 96, 192 kHzConvertida para 44.1 kHzConvertida para 48 kHz

Exemplos que verificamos: saída em 44.1 kHz no Sony Xperia P e no Xperia go; saída em 48 kHz no SHARP AQUOS CRYSTAL 305SH, no KYOCERA URBANO L03 (KYY23), no Raku-Raku Smartphone F-06F e no Samsung Galaxy S8. Alguns celulares suportam as duas taxas, mas qual delas usam de fato depende de como o aparelho foi construído.

A qualidade da conversão do próprio Android também depende das configurações do celular. Entre os aparelhos que verificamos, o KYY23 e o 305SH com Android 4.4 estavam configurados na qualidade mais alta, enquanto o Galaxy S8 com Android 9 não tinha essa configuração e usava a qualidade média padrão (que cai ainda mais sob carga pesada). Nas faixas tocadas pelo motor do próprio reTONE, quando a conversão não pode ser evitada, o reTONE não a deixa para o Android: ele converte uma única vez, por conta própria, e entrega o áudio exatamente na taxa de saída do celular.

A conversão do Android é evitada quando a faixa já corresponde à taxa de saída do celular, em celulares com Android 10 ou posterior que suportam saída direta e com um DAC USB. Alguns aparelhos, incluindo certos DAPs, também são construídos para não converter nada já no nível do firmware.

Se o chip de áudio do celular converte de novo internamente depois da saída do Android, um app não consegue ver. A taxa de saída que o reTONE mostra é o valor informado pelo Android. Você pode conferir a taxa de saída de um celular, e se há conversão, na parte de baixo da tela Now Playing e em “Device & audio”.

O caminho do áudio

Quando a taxa de saída do celular é fixa em 48 kHz ou algo parecido, ela não pode ser alterada sem root, então faixas em outra taxa (áudio de CD a 44.1 kHz ou áudio hi-res a 88.2, 96 ou 192 kHz) não tocam sem conversão. No Android 4.x, e nos caminhos que passam pelo mixer no Android 5 ou posterior, o reTONE reamostra com alta qualidade as faixas tocadas pelo seu engine antes de entregá-las ao Android, de modo que a conversão do Android não é executada (sobre a qualidade da conversão, veja “Filtro de reamostragem” abaixo). Com DACs USB, não há conversão nas taxas que o DAC aceita e que o celular consegue transportar; quando a saída direta é usada, o Android não faz conversão (sobre o que acontece depois, veja “O que a saída direta contorna” abaixo).

Android 4.xFLAC, WAV, DSD, AIFF
Arquivo da faixa Motor do reTONEReamostra no lugar do Android (só quando necessário) AndroidRecebe 16 bits, sem conversão Alto-falante / fones
Android 5 ou posteriorCaminhos que passam pelo mixer. DSD, AIFF e FLAC/WAV/ALAC que precisam de conversão
Arquivo da faixa Motor do reTONEReamostra no lugar do Android AndroidRecebe float, sem conversão de taxa (em celulares com saída de 16 bits, é reduzido a 16 bits aqui) Alto-falante / fones
Android 10 ou posteriorCelulares que suportam saída direta
Arquivo da faixa reTONEReempacota áudio sem perdas de 16 bits como 24 bits AndroidSaída direta Alto-falante / fonesO que acontece depois depende do celular
DAC USBConectado via OTG (todas as faixas)
Arquivo da faixa reTONETaxas que o DAC suporta são enviadas como estão; as outras são reamostradasContorna o Android DAC USB

Feito pelo reTONEFeito pelo Android

Faixas cuja taxa de amostragem corresponde à saída do celular não precisam de conversão, então ela não acontece nem com a reprodução padrão do Android. Formatos que não passam pelo motor do reTONE, como MP3 e AAC, usam a reprodução padrão do Android, e o Android os reamostra se a taxa deles diferir da saída do celular (ao tocar por um DAC USB, o reTONE também envia esses formatos). DSD e AIFF são tocados pelo motor do reTONE mesmo no Android 10 ou posterior.

Em detalhes

O reTONE muda o quanto processa conforme o formato da faixa, a versão do Android e a saída. Em faixas PCM, a conversão de taxa de amostragem acontece no máximo uma vez nos caminhos que o reTONE controla (internamente, uma conversão pode usar vários estágios de filtro) (no DSD, no máximo uma vez depois da etapa de DSD para PCM). Com Bluetooth, o celular e o codec Bluetooth processam o áudio mais uma vez depois disso. A reprodução é construída sobre o MediaPlayer e o AudioTrack do Android, e o engine do reTONE (escrito em C) cuida da decodificação e da conversão antes deles.

Android 4.x: Muitos celulares com Android 4.x abrem a thread de saída de música em uma taxa fixa, como 48 kHz, e faixas em outra taxa, como 44.1 kHz ou 96 kHz, são reamostradas dentro do mixer do Android antes de tocar. Os apps não têm como impedir essa conversão. O decodificador padrão do 4.x também pode reduzir FLAC de 24 bits para 16 bits ou falhar ao abrir FLAC de 192 kHz. Por isso, no 4.x, o engine do reTONE lê todos os FLAC e WAV, além de DSF, DFF e AIFF, converte uma única vez para a taxa de saída do celular (o valor de AudioTrack.getNativeOutputSampleRate) e entrega o áudio em 16 bits. O mixer do Android aceita áudio de 16 bits na mesma taxa como está, então nenhuma conversão de taxa de amostragem acontece do lado do Android. Ao reduzir para 16 bits, valores que 16 bits representam exatamente (como áudio de CD passado sem conversão) são entregues sem alteração; nos demais casos, o reTONE aplica dither TPDF e, quando a saída é de 44.1 kHz ou 48 kHz, usa noise shaping com realimentação de erro (o filtro de 5 coeficientes com ponderação E de Lipshitz, Vanderkooy e Wannamaker) para deslocar o ruído de quantização para frequências menos audíveis. Se ocorrer clipping, o erro realimentado é limitado a ±4 LSB para evitar oscilação. Os coeficientes foram projetados para 44.1 kHz e também são usados em 48 kHz. A quantidade total de ruído aumenta, mas ele é deslocado para as altas frequências, onde o ouvido é menos sensível. Porém, se você definir o volume do Android abaixo do máximo, o mixer do Android arredonda para 16 bits novamente depois de aplicar o volume, o que reduz o benefício do noise shaping. Isso não vale para celulares que ajustam o volume em hardware. Em qualquer caso, não há conversão de taxa de amostragem. MP3, AAC e formatos semelhantes tocam pelo caminho padrão do Android, mesmo no 4.x.

Android 5 ou posterior (caminhos que passam pelo mixer): No Android 10 ou posterior, os caminhos que não usam saída direta também se enquadram aqui. O mixer do Android dessa geração aceita float, então o engine do reTONE entrega áudio float ao AudioTrack, sem dither. Em celulares com saída de 16 bits, o Android então arredonda para 16 bits (o Android não aplica dither nesse ponto). Faixas FLAC, WAV e ALAC cuja taxa de amostragem difere da taxa de saída do celular seriam reamostradas pelo mixer do Android se fossem entregues como estão, e faixas acima de 16 bits seriam truncadas para 16 bits. O reamostrador padrão do AOSP usa qualidade dinâmica média (DYN_MED) quando a configuração de qualidade (af.resampler.quality) não está definida e cai para uma qualidade ainda menor quando a carga estimada dos reamostradores em uso ao mesmo tempo excede um limite. No celular que verificamos, essa configuração não estava definida. O engine do reTONE reamostra apenas as faixas que atendem a essas condições, e você pode desativar isso na configuração “Conversion by reTONE”. Faixas de 16 bits na taxa de saída do celular (como áudio de CD em um celular de 44.1 kHz) não precisam de conversão, então tocam pelo caminho padrão do Android.

Saída direta (Android 10 ou posterior; a disponibilidade depende do celular): A disponibilidade da “saída direta”, que envia o áudio na taxa da faixa sem passar pelo mixer, e do “offload”, que decodifica áudio comprimido no chip, depende do celular e da saída. No Android 10 ou posterior, um app pode perguntar ao celular, com AudioTrack.isDirectPlaybackSupported, se um determinado formato, taxa e profundidade de bits podem ser enviados diretamente para a saída atual. O reTONE usa esse caminho apenas quando o celular responde que sim e a política de áudio do celular realmente encaminha PCM para a saída direta; caso contrário, toca pelo caminho padrão do Android. A resposta varia conforme a saída, então o reTONE pergunta de novo sempre que fones ou USB são conectados ou desconectados. Em celulares cuja política de áudio encaminha PCM para a saída direta, os principais formatos que não podiam ser enviados diretamente eram PCM de 16 bits a 44.1, 48 e 88.2 kHz (o áudio de CD cai nesse grupo). 24 bits e float podiam ser enviados diretamente na taxa da faixa, e MP3 e AAC (faixas de 60 segundos ou mais) iam para o offload. Por isso, o reTONE decodifica áudio lossless de 16 bits (FLAC, ALAC, WAV) para PCM (ALAC com o decodificador próprio do reTONE, se o celular não tiver um) e o entrega ao MediaPlayer por meio do MediaDataSource como um WAV de 24 bits com os 8 bits inferiores preenchidos com zeros. Os 16 bits superiores permanecem inalterados. Antes de trocar, ele decodifica de fato o primeiro bloco para confirmar que sai PCM real de 16 bits e, se não conseguir confirmar, volta ao caminho padrão. Áudio lossless de 24 bits e de taxa alta, além de MP3 e AAC, já vão para a saída direta ou para o offload, então são entregues como estão. Os apps não têm como ler qual saída o celular realmente usou, então “DIRECT” na tela do player é uma expectativa. O reTONE costumava se basear apenas na resposta do celular, mas o Android padrão ainda pode enviar PCM ao mixer mesmo quando responde que sim, e alguns celulares mostravam DIRECT quando o áudio não era realmente direto. Desde a versão 0.92.48, o reTONE também verifica a política de áudio do celular. Desde a 0.90.1, “DIRECT” aparece apenas para faixas lossless, e nunca por Bluetooth. Com offload, também não dá para verificar se a taxa de amostragem muda dentro do chip. Nesse caminho, os efeitos sonoros do lado do Android não são aplicados (em alguns celulares, os efeitos rodam dentro do chip), enquanto as configurações de hardware do DAC (como filtros) continuam valendo. Pode ser ativado ou desativado em Settings.

Saída direta para DACs USB: Quando você conecta um DAC USB a um celular com suporte a host USB (OTG), o reTONE envia os dados direto ao DAC, sem passar pelo caminho de áudio do Android. No celular que verificamos, o caminho padrão do Android convertia o áudio para 16 bits/48 kHz para o DAC USB (uma saída de 32 bits/192 kHz também estava aberta, mas não era usada para música). A saída direta do reTONE funciona assim.

  • Usando a API de host USB do celular, o reTONE encontra o DAC, obtém a sua permissão e lê os descritores USB (no USB Audio Class 2.0: o ID do clock, as configurações alternativas da interface de reprodução, o endpoint de saída e o endpoint de feedback; no Class 1.0: as taxas de amostragem e o tamanho de pacote de cada configuração alternativa).
  • Ele assume o controle do DAC no lugar do driver do Android (claimInterface) e prefere uma configuração alternativa PCM, de 2 canais e 32 bits (24 ou 16 bits se não houver).
  • Ele lê as taxas de amostragem aceitas com o GET RANGE da fonte de clock. Se a taxa da faixa estiver no intervalo, ele a define com SET CUR e a confirma com GET CUR. Apenas faixas em taxas não aceitas, ou em taxas que o USB do celular se recusa a transportar (a partir da 0.92.68), são reamostradas, uma vez, pelo reTONE para uma taxa que o DAC aceita. Faixas em taxas que o DAC aceita não passam por conversão de taxa nem por dither. Faixas de até 24 bits são enviadas com os dados originais colocados sem alteração nos bits superiores de uma palavra de 32 bits (ao usar o volume do DAC ou ao ajustar o volume no próprio DAC). Faixas de inteiros de 32 bits também seguem um caminho que as mantém como inteiros (a partir da 0.92.65). Apenas valores que a profundidade de bits do DAC não consegue representar exatamente são arredondados, com dither TPDF quando o DAC é de 24 bits ou menos.
  • As transferências são tratadas no lado C, com transferências isócronas do usbdevfs. Em DACs High Speed que recebem áudio a cada 0.125 ms (a maioria), 1 ms de áudio (8 microframes) é agrupado em uma transferência, e 64 delas ficam enfileiradas com antecedência. Em DACs com intervalo maior, cada transferência contém 32 pacotes e menos são enfileiradas, mantendo cerca de 64 ms de antecedência. DACs assíncronos informam, pelo endpoint de feedback, o número de frames por microframe, e o reTONE ajusta a quantidade enviada de acordo. O formato desse valor varia conforme o DAC, então o reTONE o detecta a partir do que chega. Quando o reTONE aplica o volume, faz isso logo antes do envio, então as mudanças têm efeito imediato (cada mudança é suavizada ao longo de cerca de 5 ms para evitar saltos bruscos).
  • Nesse período, MP3, AAC e formatos semelhantes também são decodificados para PCM com o decodificador do celular (MediaCodec) antes do envio, de modo que o reTONE reproduz todas as faixas. Desconectar o DAC pausa a reprodução. Quando outro app começa a tocar, o reTONE pausa e devolve o DAC ao Android, e o retoma quando você volta a tocar no reTONE. Se o DAC não for devolvido ao Android, por exemplo após uma parada forçada, o reTONE o devolve logo depois de uma atualização e quando você abre o reTONE com “USB DAC direct output” desativado.

Muitos celulares da geração Android 4.1 não conseguem usar um DAC USB como saída de áudio, mas a saída direta do reTONE usa apenas a função de host USB, então ainda consegue enviar o áudio. Com o nosso celular de teste de 2012 (Android 4.1) e um DAC com bateria, 24 bits/192 kHz tocaram sem conversão. Testamos pessoalmente DACs USB Audio Class 2.0. DACs Class 1.0 também são compatíveis, mas os testes na prática até agora vêm apenas de relatos de usuários. Celulares mais antigos só conseguem fornecer uma corrente pequena por USB, então DACs alimentados pelo barramento podem não ser reconhecidos. Também vimos um caso em que a interferência de rádio do Wi-Fi chegou ao DAC pelo cabo USB e causou ruídos intermitentes. A reprodução não precisa de conexão, então recomendamos ativar o modo avião ao ouvir por um DAC USB.

Como cada saída se diferencia

“Dedicated music player” e “Music app” usam o mesmo caminho de áudio. As únicas diferenças são se o botão HOME abre o reTONE, o padrão do “Silent DAP mode” e a tela de bloqueio do reTONE. A saída direta (Android 10 ou posterior) e a saída direta para DAC USB funcionam nos dois modos.

SaídaMixer do AndroidTaxa de amostragemDIRECT no playerVolume
Alto-falante interno e entrada de foneSim (exceto quando a saída direta é usada)Ajustada à taxa de saída do celular (como no diagrama acima)Faixas sem perdas com probabilidade de usar a saída direta, no Android 10 ou posteriorVolume do Android mais os passos finos de volume do reTONE
DAC USB (saída direta ativada, o padrão)NãoInalterada, se o DAC suportarQuando uma faixa sem perdas é enviada sem conversão de taxaNo DAC, ou com os botões de volume (o DAC ou o reTONE ajusta)
DAC USB (saída direta desativada)SimDepende das configurações de USB do celular (alguns convertem para 16 bits / 48 kHz)Não é exibidoVolume do Android
BluetoothSimO celular recodifica para o codec BluetoothNão é exibidoVolume do Android (ligado ao aparelho em alguns celulares)

O DSD é convertido em PCM, exceto quando enviado por saída direta a um DAC com suporte a DSD nativo. Enquanto o reTONE estiver usando o DAC, os sons de outros apps, como notificações, tocam pelo alto-falante embutido. Quando outro app começa a tocar, o reTONE devolve o DAC ao Android. Muitos celulares Android 4.x não conseguem usar um DAC USB como saída de áudio por conta própria, então o DAC funciona apenas por saída direta. Tocar na linha inferior da tela do player abre a tela do caminho do sinal. Para cada etapa (arquivo, decodificação, taxa de amostragem, volume, saída), ela mostra se o áudio passa sem alteração ou é alterado, com base no processamento do próprio reTONE e no que o Android informa. O processamento dentro do DSP do celular ou do DAC não pode ser mostrado.

O que a saída direta contorna

Quando a saída direta é usada, o que ela contorna é a mistura e a conversão de taxa de amostragem dentro do Android. O que acontece com o áudio depois disso depende do celular e da saída.

O áudio que um app entrega passa pelo Android nesta ordem.

1. A central de áudio do Android (AudioFlinger)
Em uma saída normal, o mixer aqui combina o som de vários apps, converte-o para a taxa de saída do celular (geralmente 48 kHz) e aplica o volume. A saída direta contorna principalmente esta etapa: sem mixagem e sem conversão. O volume fica a cargo do hardware de áudio do celular, se ele tiver controle de volume; se não, pode ser aplicado às amostras nesta etapa (no volume máximo, os valores não mudam).

2. Os componentes de áudio do fabricante → o processador de áudio (DSP) dentro do chip
Na maioria dos celulares, o áudio não vai direto ao DAC; ele passa por um DSP dentro do chip, que tem etapas próprias.

  • Processamento por stream (conversão de formato, volume)
  • Processamento por saída (proteção do alto-falante, efeitos de som do fabricante, limitadores)
  • A etapa final de saída. Cada saída tem a sua própria taxa e, se a taxa da faixa for diferente, o DSP a converte
  • O “offload” de MP3 e AAC é decodificado por este DSP

3. O DAC (integrado ao chip, ou um chip DAC separado)
É aqui que o áudio se torna analógico pela primeira vez. O filtro digital interno do DAC (oversampling) é atravessado do mesmo jeito com um DAC USB, então não entra na conta quando se pergunta se os dados foram alterados.

O que se pode dizer

  • O que é certo quando a saída direta é usada: ela contorna a mistura e a conversão de taxa de amostragem dentro do Android
  • Se o celular ajusta a taxa de saída do DSP à faixa, como em caminhos de fone construídos pensando em música, o DSP só formata os dados e os repassa, então eles provavelmente chegam ao DAC próximos do original
  • Em celulares cuja taxa de saída é fixa em 48 kHz, o DSP converte o áudio mesmo que a conversão do Android seja contornada
  • Os alto-falantes quase sempre recebem proteção ou correção. Alguns celulares mostram DIRECT também para o alto-falante, mas deve-se presumir que os dados foram alterados
  • Em alguns celulares, os efeitos de som do fabricante rodam dentro do DSP
  • Um app não consegue verificar nada disso. A partir do Android 9, apps comuns não têm como ler as configurações do DSP nem qual caminho foi usado. O indicador DIRECT do reTONE é uma expectativa baseada na resposta do Android e na política de áudio do celular (aparece apenas para faixas lossless e nunca por Bluetooth)

Como difere de um DAC USB
Com um DAC USB, o reTONE contorna o caminho de áudio do Android e fala diretamente com o DAC por USB. O reTONE cuida dos dados até o DAC; o que acontece dentro do DAC não pode ser verificado. Quando a faixa é enviada na sua própria taxa de amostragem e o volume é ajustado no lado do DAC, o reTONE não altera os valores.

Filtro de reamostragem

0-20-40-60-80-100-120-1400102030 Frequency (kHz) dB Flat to 20 kHz Stopbandfrom 24.1 kHz
Resposta do filtro usado na conversão 44.1 kHz → 48 kHz (calculada com as mesmas fórmulas do app).Celulares com saída em float (meta de 120 dB) Celulares com saída de 16 bits (meta de 100 dB)
  • Plano até 20 kHzO desvio até 20 kHz é inferior a 0.001 dB (calculado). Não reduz nenhum som audível.
  • Atenuação na banda de rejeição de pelo menos 120 dB / 100 dBValores calculados para celulares com saída em float e celulares com saída de 16 bits (cerca de −122 dB / cerca de −102 dB para 44.1 kHz → 48 kHz). O aliasing medido com um sinal de entrada de 30 kHz (a quantidade que aparece em 0–20 kHz, antes do arredondamento para 16 bits) ficou pelo menos 104.6 dB abaixo do sinal original.
  • −1 dB só ao reamostrarIsso deixa margem para picos entre amostras acima de 0 dBFS (o maior que medimos em gravações comerciais foi +0.59 dB). Faixas reamostradas ficam 1 dB mais baixas que faixas não reamostradas.
Em detalhes

A conversão de taxa de amostragem recalcula a forma de onda entre as amostras originais, então a qualidade do filtro aparece diretamente no som. O filtro do reTONE é um filtro FIR feito aplicando uma janela de Kaiser a uma função sinc. Ele usa uma estrutura polifásica, que divide os coeficientes em grupos conforme a razão de conversão e calcula só o necessário. O projeto se apoia em dois critérios: não reduzir nenhum som audível e manter bem suprimido o aliasing causado pela conversão.

  • Banda de passagem: plana até 20 kHz (dentro de ±0.001 dB por projeto; para conversões entre taxas de 44.1 kHz ou mais).
  • Banda de rejeição: começa em “a taxa menor − 20 kHz”. Entre 44.1 kHz e 48 kHz, isso dá 24.1 kHz. O aliasing que cai nessa faixa aparece acima de 20 kHz e fica fora da banda audível (até 20 kHz).
  • Atenuação (meta de projeto): 120 dB para celulares com saída em float (Android 5 ou posterior), 100 dB para celulares com saída de 16 bits (Android 4.x). O comprimento do filtro e a janela são projetados com uma margem de 2 dB sobre a meta, para que o valor calculado supere a meta em todas as conversões (para 44.1 → 48 kHz, os valores calculados são cerca de 122 dB e cerca de 102 dB). O aliasing residual em −100 dB fica bem abaixo do piso de ruído de 16 bits (por volta de −93 dBFS em toda a banda, incluindo o dither), então 100 dB de atenuação não se distinguem de 120 dB ao ouvido.
  • Taps: definidos a partir da atenuação e da banda de transição pela fórmula da janela de Kaiser (86 taps para 44.1 ↔ 48 kHz a 120 dB).
  • Estágios 2:1: os estágios que reduzem a taxa exatamente pela metade, como 96 → 48 kHz, usam um filtro de meia banda (half-band), em que metade dos coeficientes é zero e o restante é simétrico, o que reduz as multiplicações a cerca de um quarto de um filtro comum. 192 → 48 kHz usa dois estágios de meia banda, e as razões restantes, como 88.2 → 48 kHz, ficam a cargo de um filtro polifásico.

Nas medições, sinais de 1 kHz, 19 kHz e 19.9 kHz saíram no mesmo nível, com diferença de até 0.01 dB. Com uma entrada de 30 kHz, o aliasing que aparece entre 0 e 20 kHz ficou pelo menos 104.6 dB abaixo do sinal original na saída a 44.1 kHz e 48 kHz, e pelo menos 116 dB abaixo na conversão a partir de 192 kHz (medido antes do arredondamento para 16 bits). São valores em uma única frequência. Por projeto, toda a banda de rejeição é suprimida a pelo menos as metas de atenuação acima.

Como a conversão cria novos pontos entre as amostras originais, faixas altas podem acabar com pontos acima de 0 dBFS. Quando convertemos para 48 kHz várias gravações comerciais que tínhamos, os pontos acima de 0 dBFS representaram 0.0001–0.001% do total, com máximos de +0.38 a +0.59 dB. Eles sofrem clipping na saída de 16 bits ou no mixer do celular, então, ao reamostrar, e somente nesse caso, o reTONE reduz o nível em 1 dB, deixando margem acima do máximo medido. Faixas que não são reamostradas ficam inalteradas, então, no mesmo celular, as faixas reamostradas ficam 1 dB mais baixas. Ao passar sem pausa para a faixa seguinte, o estado do reamostrador é transferido, de modo que o início e o fim das faixas não são cortados pelo processamento (a partir da 0.92.57).

O volume não é aplicado dentro do motor do reTONE. Ele é aplicado no mixer do Android (o volume do AudioTrack). Se fosse aplicado dentro do motor, as mudanças só chegariam depois de terminar de tocar os cerca de 500 ms de áudio guardados no buffer do AudioTrack, e os botões de volume pareceriam lentos. Em celulares com saída de 16 bits, abaixar o volume faz o Android arredondar de novo para 16 bits (o Android não aplica dither nesse ponto).

Os cálculos são escritos em C e usam instruções ARM NEON para processar os canais esquerdo e direito juntos. O laço interno do filtro lê os coeficientes como vetores e usa quatro acumuladores para esconder a latência. O dither, incluindo números aleatórios, arredondamento, clipping e realimentação de erro, também é feito inteiramente em NEON, evitando transferências entre o NEON e os registradores de uso geral, que são lentas em núcleos mais antigos (Cortex-A9). As versões para Intel (x86) usam um caminho em C puro, sem NEON. Os números de carga abaixo vêm dos celulares ARM que testamos.

Você sabia?Quem escolhe a qualidade da reamostragem do Android é o fabricante do celular

A parte do Android que converte taxas de amostragem oferece vários níveis de qualidade, desde cálculos simples até outros mais pesados, que usam mais processamento para ter mais precisão. Qual deles é usado depende de uma configuração do celular, e essa configuração é definida pelo fabricante.

Em celulares com Android 5 ou posterior em que o fabricante não a definiu, é usado o nível médio, DYN_MED (no Android 4.4, o nível mais simples, LOW). Além disso, quando a carga estimada dos reamostradores em uso ao mesmo tempo passa de um limite, os que excedem o limite caem para o nível imediatamente inferior (a carga real da CPU não é medida). Nos celulares que verificamos, dois com Android 4.4 tinham o valor 4 (VERY_HIGH), e um com Android 9 não tinha configuração, então usava DYN_MED. Ou seja, a mesma faixa recebe uma qualidade de reamostragem diferente conforme o celular.

Valor da configuraçãoNívelComo converte (Android padrão)Atenuação da banda de rejeição (projeto)
1LOWInterpolação linear entre as duas amostras vizinhas; o método mais leve. Usado no Android 4.4 quando não há configuraçãoSem filtro dedicado
2MEDInterpolação cúbica sobre várias amostras vizinhasSem filtro dedicado
3HIGHUsa um filtro sincNão informado no código-fonte
4VERY_HIGHUsa um filtro mais longo que o HIGH. Os coeficientes são carregados de um componente do celular (libaudio-resampler.so); sem ele, é igual ao HIGHNão informado no código-fonte
5DYN_LOWMonta um filtro na hora, de acordo com a razão de conversão80 dB
6DYN_MEDIgual ao anterior, com um filtro mais longo que o DYN_LOW84 dB
7DYN_HIGHIgual ao anterior, com o filtro mais longo98 dB
Não definido—DYN_MED no Android 5 e posteriores (LOW no Android 4.4). Cai para o nível imediatamente inferior quando muitos estão em uso ao mesmo tempo84 dB
reTONE—Projetado independentemente da configuração do celular. Plano até 20 kHz (a meta de atenuação depende do formato de saída)100 dB (saída de 16 bits)
120 dB (saída float)

A configuração se chama af.resampler.quality. A tabela se baseia no código-fonte do Android padrão para o Android 13 (as linhas do Android 4.4 se baseiam no código do Android 4.4) e pode não valer se o fabricante o tiver modificado. Todos os valores de “Atenuação da banda de rejeição (projeto)” são metas de projeto do filtro. O reTONE é projetado para que o valor calculado supere a meta em todas as conversões.

Quando a conversão fica a cargo do reTONE, a reamostragem do reTONE é usada independentemente dessa configuração.

Volume do DAC USB

Há três lugares onde o volume pode ser reduzido. Qual deles é usado depende de como o DAC é construído e do que você escolhe ao conectá-lo pela primeira vez.

Dentro do reTONEDigitalVolume digital do DACControlado via USBO próprio DACBotão giratório ou teclas
DACs com controle de volume via USBEnviado no máximoAcompanha os botões de volume—
Quando “reTONE adjusts” é escolhidoAcompanha os botões de volumeMáximo—
DACs sem esse controleAcompanha os botões de volume——
Quando “On the DAC” é escolhidoEnviado no máximoMáximoAjustado no DAC
Em detalhes

Há três lugares para reduzir o volume: ① dentro do reTONE, aplicado aos dados (digital), ② o volume digital interno do DAC, controlado por USB, e ③ o botão ou os botões no próprio DAC. Qual é usado depende do método de ajuste que você escolhe ao conectar o DAC pela primeira vez e de o DAC permitir ou não controlar o volume por USB.

② Volume via USB: o USB Audio Class tem um mecanismo de volume chamado Feature Unit, e o GET RANGE lê o mínimo, o máximo e o tamanho do passo (em unidades de 1/256 dB). O reTONE converte o seu volume (um único ganho que combina os passos do Android e o volume fino) em dB. Se o valor estiver dentro dessa faixa, o reTONE o envia ao DAC e mantém a própria saída no máximo. Só quando o volume fica abaixo da faixa é que a diferença é aplicada ao PCM com ①. 0 é mudo.

① Dentro do reTONE: Para DACs sem volume por Feature Unit e para DACs configurados como “reTONE adjusts”, o reTONE aplica o volume aos dados antes de enviá-los, suavizando cada mudança ao longo de cerca de 5 ms. Ele é aplicado logo antes do envio, então as teclas de volume respondem imediatamente.

③ O próprio DAC: Não é possível ler por USB se o DAC tem controle de volume próprio. Por isso, na primeira vez que você conecta um DAC, o reTONE pergunta uma vez como o volume do DAC deve ser ajustado, com três opções: “On the DAC itself”, “Volume keys (DAC adjusts)” e “Volume keys (reTONE adjusts)”. Alguns DACs informam que aceitaram um comando de volume sem de fato alterá-lo; para esses, escolher “reTONE adjusts” fixa o volume do DAC no máximo e o reduz com o ①. Se você escolher “On the DAC”, tanto o ② quanto o ① ficam fixos no máximo, e pressionar as teclas de volume não muda nada (uma mensagem avisa isso). Em DACs com controle de volume analógico, evitar a atenuação digital permite aproveitar ao máximo o DAC. A escolha é lembrada para cada modelo de DAC (ID do fornecedor e ID do produto USB) e pode ser alterada na configuração “DAC volume”.

Quando “On the DAC” é escolhido, ou quando o volume do DAC é usado (dentro da faixa de volume do DAC), faixas em taxas que o DAC aceita são enviadas sem alterar os dados. Somente quando você define o volume abaixo da faixa do DAC o reTONE aplica o restante. Nesse caso, se a faixa for lossless (incluindo DSD nativo) e sua profundidade de bits couber na do DAC, a tela do caminho do sinal mostra BIT-PERFECT (faixas de inteiros de 32 bits apenas quando seguem o caminho de inteiros). O que acontece dentro do DAC não pode ser verificado.

DSD nativo

Faixas DSF/DFF
O DAC aceita DSD nativo
e seu volume pode ser controlado por USB
e o volume não está definido como “reTONE adjusts”
e “Sending DSD” está definido como “Send as DSD”
SimEnvio como DSDex.: DSD64 → USB AUDIO • DSD64 DIRECT
NãoConversão para PCMPCM a 88.2 kHz para DSD64

O reTONE não consegue mudar o volume do próprio DSD, então o DAC precisa permitir o controle de volume. Se as faixas DSD falharem, escolha “Convert to PCM” na configuração “Sending DSD”. DoP não é suportado.

Em detalhes

Faixas DSF e DFF são enviadas como DSD, sem conversão para PCM, apenas quando o DAC aceita DSD nativo e seu volume pode ser controlado por USB (e o DAC não está definido como “reTONE adjusts”). O reTONE não consegue alterar o volume do próprio DSD, então o controle de volume do lado do DAC é necessário. A tela do player mostra algo como “DSD64 → USB AUDIO • DSD64 DIRECT”.

O envio funciona assim.

  • O DSD nativo funciona com DACs cujos descritores USB incluem uma configuração alternativa para dados brutos (TYPE I RAW DATA).
  • Os bits do DSD são empacotados de 4 em 4 bytes em uma palavra de 32 bits por canal, com o bit mais antigo no topo. O DSF armazena os bits com o LSB primeiro, então a ordem dos bits em cada byte é invertida antes do empacotamento. As palavras são enviadas em big-endian (a mesma hipótese do DSD_U32_BE do Linux). Esse reempacotamento é feito em C, e o buffer circular de transferência guarda cerca de 500 ms.
  • O clock do DAC é ajustado para “taxa do DSD ÷ 32” (88.2 kHz para DSD64, 176.4 kHz para DSD128).
  • Silêncio, pausas e finais de faixa são preenchidos com o padrão de silêncio do DSD, 0x69.

Essa ordem de bytes e de bits foi verificada pela reprodução correta no DAC que testamos. Ainda não foi verificada com outros DACs, e DoP (DSD over PCM) não é suportado. DFF com compressão DST também não pode ser lido.

Envio de DSD (configuração): “Sending DSD” aparece em “Sound” nas configurações somente enquanto um DAC que pode usar DSD nativo estiver conectado. O padrão é “Send as DSD” (o DAC toca o DSD diretamente), e você pode mudar para “Convert to PCM” (o reTONE converte para PCM). Se as faixas DSD falharem, ou se preferir a reprodução em PCM, escolha converter para PCM. A escolha fica guardada para cada modelo de DAC, e ao mudar a faixa atual é reaberta na mesma posição. Encontramos um DAC que falhava por instantes com gravações DSD cuja modulação passava do nível de referência de 50%. A transferência estava normal, então isso parece se dever ao projeto do DAC. Converter para PCM evita as falhas nesse caso também.

Conversão DSD → PCM: quando o DSD nativo não é usado (com DACs que não atendem às condições, quando “Convert to PCM” é escolhido, e na saída para Bluetooth, fones ou alto-falante), o reTONE converte o DSD para PCM em dois estágios.

  • Estágio 1: o fluxo de bits DSD é decimado por um fator de 32, 64 e assim por diante, gerando PCM a cerca de 88.2 kHz ou mais (DSD64 por 32 para 88.2 kHz, DSD128 por 64 para 88.2 kHz). O filtro é um FIR com janela de Kaiser. A banda passante vai até o maior valor entre 20 kHz e um quarto da taxa de saída, a banda de rejeição começa em “taxa de saída − banda passante”, e a atenuação é de 100 dB para saída de 16 bits e de 110 dB para float e USB. O número de taps é definido pela fórmula da janela de Kaiser. O cálculo usa consultas a tabelas de 16 bits, e as tabelas são montadas uma vez por configuração e reutilizadas. Nas medições, a resposta em 20 kHz foi de 0.000 dB, e o aliasing abaixo de 20 kHz ficou em −101 dB (projeto de 100 dB) / de −110 a −117 dB (projeto de 110 dB).
  • Estágio 2: se necessário, o mesmo reamostrador descrito na seção de filtros converte uma única vez para a taxa de saída do celular (como 44.1 kHz ou 48 kHz na saída interna).
  • Nível: convertido de modo que o 0 dB do SACD (modulação de 50%) vire −6 dBFS (uma convenção comum; a partir da 0.69.0. As versões anteriores usavam −12 dBFS e tocavam 6 dB mais baixo).

Ao enviar PCM para um DAC USB, o reTONE envia PCM a “taxa do DSD ÷ 32” (88.2 kHz para DSD64, 176.4 kHz para DSD128, 352.8 kHz para DSD256) assim mesmo, sem a conversão do estágio 2, se o DAC suportar. Como o DSD é convertido para PCM, DIRECT não aparece nesse caso.

Carga

Uso de CPU do reTONE em relação a um núcleo, no nosso celular de teste de 2012 (Android 4.1, 2 núcleos).

Redesenho da tela do player (durante a reprodução real)Cerca de 2%
Saída de áudio de CD sem alteração (no clock máximo)Cerca de 2%
Conversão de 24 bits/192 kHz para 44.1 kHz (no clock máximo)Cerca de 10%
0%50%100%

“Redesenho da tela do player” foi medido durante a reprodução real e não inclui a decodificação. Os outros dois vêm da execução dos mesmos cálculos do motor do reTONE no clock máximo, convertidos em porcentagem do tempo real. Durante a reprodução real, o celular reduz o clock, então os valores mostrados no celular parecem 2 a 3 vezes maiores.

Em detalhes

O reTONE busca “não fazer nada quando está parado” e “não desenhar nada ao tocar com a tela desligada”. As tarefas periódicas só rodam durante a reprodução: a cada segundo com a tela ligada e a cada 5 segundos com ela desligada, e a barra de busca da tela do player redesenha só a si mesma a cada 250 ms. O relógio e a bateria são atualizados por notificações do sistema, sem consultas periódicas.

Uso de CPU do reTONE em relação a um núcleo, no nosso celular de teste de 2012 (Android 4.1, Cortex-A9 de 2 núcleos).

  • Parado: 0%.
  • Tocando com a tela desligada: o desenho para. As faixas tocadas pela reprodução padrão do Android usam quase 0%, enquanto as tocadas pelo motor do reTONE (FLAC, WAV e outras no Android 4.x) somam a carga de decodificação e conversão abaixo.
  • Tocando com a tela do player à vista: cerca de 2% (medido durante a reprodução real; quase tudo é o redesenho da barra de busca, sem incluir a decodificação).
  • Motor do reTONE enviando áudio de CD (16 bits/44.1 kHz) sem alteração a 44.1 kHz: cerca de 2%. Convertendo para 48 kHz na saída: cerca de 4%.
  • Conversão de 24 bits/96 kHz para 48 kHz: cerca de 5%. Para 44.1 kHz: cerca de 7%.
  • Conversão de 24 bits/192 kHz para 44.1 kHz: de cerca de 10% (só o cálculo) a cerca de 15% (estimativa aproximada da carga total da reprodução, ajustada ao clock máximo).
  • Envio de 24 bits/192 kHz para um DAC USB sem conversão: cerca de 20% (medido durante a reprodução real, com a tela ligada, incluindo a thread de transferência).

Os valores do motor, de “áudio de CD” a “24 bits/192 kHz”, vêm da execução dos mesmos cálculos em velocidade total no clock máximo, convertidos em porcentagem do tempo real. Durante a reprodução real, o celular reduz o clock para algo entre 200 MHz e 1 GHz, então os valores mostrados no celular parecem 2 a 3 vezes maiores (20–29% para 24 bits/192 kHz). A forma como o código é escrito também faz muita diferença: a implementação atual em C e NEON tem entre um terço e um quinto da carga de um protótipo anterior escrito em Java.

Na conversão de DSD para PCM, com aquele celular de 2012 e um DAC com bateria, converter DSD64 para PCM a 88.2 kHz e enviá-lo via USB levou cerca de 11.8% na conversão e cerca de 5.8% na transferência USB (a cerca de 1 GHz). Quando o DSD64 tocou pela saída interna (48 kHz) em um celular com Android 4.4, a thread de decodificação usou 23.8%, mas o celular manteve o clock no mínimo de 300 MHz; ajustando simplesmente pela razão de clock, isso dá cerca de 3% no clock máximo.

Nos celulares que testamos, a carga com a tela ligada dependeu mais da resolução da tela do que da velocidade da CPU (o Android 4.x parece redesenhar a tela inteira mesmo em pequenas atualizações). Um celular de 1080 × 1920 usou cerca de 4% na tela do player, e um de 1440 × 3120 com Android 11 usou cerca de 8.5% (em relação a um dos seus 8 núcleos; cerca de 1% do celular inteiro). Celulares antigos têm telas pequenas e celulares de alta resolução têm mais poder de processamento, então, por enquanto, a frequência de redesenho é a mesma em todos os celulares.

Aparelhos testados

CelularAndroidVerificado
WalkmanSony série NW-Z10004.0.4Inicialização, telas
PRADA phone by LGLG L-02D4.0.4Inicialização, biblioteca, reprodução de FLAC 24 bits/96 kHz
MEDIAS XNEC N-07D4.0.4Inicialização
MEDIAS ESNEC N-05D4.0.4Inicialização
Xperia PSony LT22i4.1.2Principais recursos, uso na prática
Xperia goSony ST27i4.1.2Principais recursos (tela de 320×480), reprodução de DSD, DAC USB (DAC com bateria)
AQUOS PHONE ZETASHARP SH-02E4.1.2Principais recursos, uso na prática
Xperia VLSony SOL214.1.2Inicialização, biblioteca, reprodução (ALAC, de-ênfase, ajuste fino do volume)
Acoustic Research AR-M204.3Inicialização, reprodução de FLAC 24 bits/96 kHz
AQUOS CRYSTALSHARP 305SH4.4.2Principais recursos, uso na prática
URBANO L03KYOCERA KYY234.4.2Principais recursos, uso na prática
Raku-Raku SmartphoneFUJITSU F-06F4.4.2Inicialização, biblioteca, reprodução de FLAC 24 bits/96 kHz (o reTONE não pode ser definido como tela inicial)
KYOCERA KCP01K4.4.4Inicialização
Xperia Z4 TabletSony SOT315.0.2Principais recursos, uso na prática
VAIO Phone AVAIO VPA0516.0.1Inicialização, reprodução
Nexus 6Motorola Nexus 67.1.1Inicialização
Xperia XA1 PlusSony G32268.0Inicialização, biblioteca, reprodução de FLAC de 24 bits/192 kHz, Sound settings (abre as configurações de som da Sony)
Galaxy S7 edgeSamsung SC-02H8.0Inicialização, biblioteca, reprodução
Galaxy S8Samsung SC-02J9Principais recursos, uso na prática
Xperia XZ1Sony G83419Principais recursos, uso na prática
Android One X5LG X5-LG11Principais recursos, uso na prática
Galaxy A41Samsung SC-41A12Inicialização, biblioteca, reprodução
Pixel 3 XLGoogle Pixel 3 XL12Inicialização, biblioteca, reprodução, controles na notificação, controle remoto
Xperia 5 IVSony A204SO14Instalação pelo Google Play, reprodução, indicação de saída direta
Xiaomi 12S UltraXiaomi 2203121C15Principais recursos, uso na prática
Galaxy Z Fold5 Teste de campoSamsung Galaxy Z Fold516Inicialização, layout para dobráveis
Pixel 10a Teste de campoGoogle Pixel 10a17Inicialização
Pixel 11 Pro Fold Teste de campoGoogle Pixel 11 Pro Fold17Inicialização, layout para dobráveis

Teste de campo Resultados de voluntários que testaram o reTONE nos próprios celulares.

Saída direta para DAC USB: combinações testadas

CelularDAC USBResultado
Galaxy S8Android 9Hidizs S9 Proalimentado pelo USBFunciona. PCM (o DAC informa 44.1–768 kHz; testado com faixas de 44.1–192 kHz), DSD nativo, volume do DAC
Galaxy S8Android 9OPPO HA-2com bateriaFunciona
AQUOS PHONE ZETA SH-02EAndroid 4.1OPPO HA-2com bateriaFunciona. 24 bits/96 kHz tocado sem reamostragem
AQUOS PHONE ZETA SH-02EAndroid 4.1Hidizs S9 Proalimentado pelo USBFunciona. Sem variação de velocidade nem falhas
Android One X5Android 11Hidizs S9 Proalimentado pelo USBFunciona
Xperia PAndroid 4.1OPPO HA-2com bateriaFunciona. 24 bits/192 kHz e 96 kHz tocados sem reamostragem
Xperia PAndroid 4.1Hidizs S9 Proalimentado pelo USBNão é reconhecido. O celular não consegue fornecer energia suficiente
URBANO L03Android 4.4OPPO HA-2com bateriaNão funciona. O Android informa suporte a host USB, mas o celular não atua como host via OTG
AQUOS CRYSTAL 305SHAndroid 4.4—Não funciona. Sem suporte a host USB
Xperia goAndroid 4.1OPPO HA-2com bateriaFunciona
Xperia goAndroid 4.1Hidizs S9 Proalimentado pelo USBNão é reconhecido. O celular não consegue fornecer energia suficiente
Galaxy A41Android 12Hidizs S9 Proalimentado pelo USBFunciona. Sem falhas, inclusive ao alternar entre 24 bits/192 kHz e 44.1 kHz
Xperia XA1 PlusAndroid 8.0Hidizs S9 Proalimentado pelo USBFunciona

DACs USB e celulares: por que os resultados variam

O comportamento da saída direta para DAC USB depende do celular e do DAC. A parte do celular que atua como host USB (o controlador host) varia conforme a época e o fabricante, e essas diferenças aparecem sobretudo nas transferências isócronas, em que o áudio precisa fluir em ritmo constante, sem lacunas. Os DACs também variam: com que frequência recebem o áudio, como informam a taxa que querem e de onde tiram energia. O reTONE não cria ramificações por modelo de celular. Ele mede o que realmente acontece quando você conecta e se adapta. Na tabela abaixo, musb, EHCI e xHCI foram testados em celulares reais; os demais se baseiam em documentação publicada.

Família do controladorProblemas comunsO que o reTONE faz
musbAlguns celulares de cerca de 2010–2013 (TI, ST-Ericsson, MediaTek mais antigos)Intervalos entre as transferências deixam o DAC com um pouco menos de dados (estalos, falhas)Mede o intervalo real de retorno e coloca mais dados para compensar a falta
EHCIQualcomm mais antigos, Tegra, alguns ExynosAs conclusões voltam em lotes; se ficar para trás, parte dos dados é puladaAvalia por uma média de longo prazo
DWC2Rockchip mais antigos, alguns tablets Kirin e AmlogicDados não alinhados a 4 bytes podem causar ruídoPrefere formatos de 32 bits (4 bytes)
xHCIQuase todos os celulares com USB-C (de cerca de 2015 em diante)As conclusões voltam em lotes; atrasos fazem dados serem puladosAvalia por uma média de longo prazo e mantém dados suficientes na fila
MediaTek xHCICelulares MediaTek recentesA alocação rígida de banda pode recusar taxas de amostragem altasTaxas recusadas são convertidas pelo reTONE para a próxima taxa inferior que o DAC aceita (a partir da 0.92.68; ainda não vimos uma recusa em um celular real)
  • Intervalo de serviço: a maioria dos DACs recebe áudio a cada 0.125 ms; alguns, a cada 0.25 ms ou 1 ms. O reTONE dimensiona cada pacote de acordo.
  • Feedback de taxa: a maioria dos DACs informa ao celular em que velocidade enviar (modo assíncrono), e o formato desse relatório varia conforme o aparelho. O reTONE detecta e se adapta automaticamente à maioria desses formatos (0.88.0 e posteriores). Alguns não têm feedback e seguem a taxa do celular (modo adaptativo). Alguns DACs assíncronos que informam a taxa pelo fluxo de gravação (feedback implícito) ainda não são compatíveis.
  • Alimentação: alguns DACs têm bateria ou fonte própria; os DACs alimentados pelo USB funcionam só com a energia do celular e podem não ser detectados em celulares antigos que não conseguem fornecer energia suficiente. Mesmo um DAC com bateria pode se carregar pelo celular e esgotar a bateria dele mais rápido.
  • DSD: a maioria dos DACs que aceitam DSD nativo usa o mesmo formato (32 bits, big-endian), mas há exceções.

Configurações de som do fabricante

“Sound” no menu inferior abre a tela de configurações de som do fabricante, se o celular tiver uma, ou as configurações de som do Android, se não tiver. Você pode escolher qual tela será aberta na configuração “Sound settings”.

CelularTela aberta
SHARP AQUOS CRYSTAL 305SHHarman Clari-Fi/LiveStage
KYOCERA URBANO L03 (KYY23)Dolby
Sony Xperia PEfeitos sonoros (Equalizer, ClearBass, VPT, xLOUD e outros)
LG Android One X5Qualidade de som e efeitos (Hi-Fi Quad DAC, filtro digital, DTS:X e outros)
Samsung Galaxy S8SoundAlive
Sony Xperia XA1 PlusConfigurações de som da Sony

Se as configurações do fabricante se aplicam à reprodução do reTONE depende do celular.

O que ele não faz

  • Não há equalizador, crossfade nem exibição de forma de onda. O reTONE prioriza a leveza e não aplica efeitos ao som. O ReplayGain (nivelar o volume com valores gravados nas tags) está disponível; vem desativado por padrão, não reescreve seus arquivos e apenas reduz o volume da reprodução.
  • O reTONE não toca streams por conta própria. O papel dele termina ao abrir o app de streaming, e a reprodução e a qualidade do som dependem desse app e do celular.
  • Por padrão, o reTONE não usa a rede. Ele só se conecta se você ativar “Network features” nas configurações e, mesmo assim, apenas quando você pede ou para as verificações que você escolheu. Enquanto o compartilhamento estiver ativado, ele também aceita conexões dos celulares que você autorizou. Ele não coleta nenhum dado sobre você.
  • Controles a partir do Android Auto ou do Wear OS não são suportados. (Os controles de reprodução nas notificações, na tela de bloqueio do Android e a partir de dispositivos Bluetooth são suportados desde a 0.87.0.)
  • O motor do reTONE não consegue tocar DFF com compressão DST, APE nem WMA Lossless, e não há planos de suportá-los. Converta-os para FLAC ou um formato semelhante.
  • Não funciona no Android 3.x ou anterior.
  • Em celulares sem suporte a host USB (OTG), a saída direta para DAC USB não está disponível. A configuração “USB DAC direct output” aparece esmaecida, com a mensagem “This device does not support USB devices.”
  • As combinações de celular e DAC testadas com a saída direta para DAC USB são limitadas. Não verificamos se outros celulares ou DACs funcionam. Alguns celulares informam ao Android que têm suporte a host USB, mas não conseguem atuar como host via OTG. As combinações testadas estão em “Saída direta para DAC USB: combinações testadas”.
  • DoP não é suportado. O DSD nativo exige um DAC que suporte DSD nativo e permita controlar o volume via USB. Com outros DACs, o DSD é convertido para PCM antes do envio.
  • Enquanto a saída direta para DAC USB estiver em uso, o som de outros apps não sai pelo DAC USB. Ele sai pelo alto-falante do celular.
  • Com o alto-falante embutido ou a saída de fones, não podemos garantir uma saída bit-perfect, porque os apps não têm como verificar como o celular realmente envia o áudio. Com um DAC USB, BIT-PERFECT só é mostrado quando as condições são atendidas.
  • O reTONE não muda o caminho do áudio até o DAC interno do celular (por exemplo, contornando a conversão de taxa de amostragem ou forçando a reprodução em offload), porque isso exige root ou a assinatura do fabricante do celular.
  • Com a tela desligada, segurar um botão de volume para mudar continuamente, ou usar os botões de volume para pular faixas, não é suportado, porque o Android não repassa esses botões aos apps.
  • Editar tags e excluir ou mover arquivos não é suportado.
  • No Android 10 ou posterior, faixas FLAC, MP3 e outras em um pendrive USB não aparecem na biblioteca, porque o Android não as lista.
  • Alguns DACs USB assíncronos que informam a taxa pelo fluxo de gravação (feedback implícito) não são compatíveis. O áudio pode falhar a cada algumas dezenas de segundos ou alguns minutos.
  • No Android 4.0, há uma pequena pausa entre faixas em formatos que o Android toca, como MP3 e AAC (os formatos tocados pelo engine do reTONE são gapless até no 4.0).