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
| Android | 4.0 ou posterior |
|---|---|
| CPU | ARM (armeabi-v7a, arm64-v8a). Também há versões para Intel (x86, x86_64), ainda não testadas em um celular Intel |
| Permissões | Acesso ao armazenamento e outras. O acesso à internet só é usado quando “Network features” está ativado |
| Formatos lidos pelo motor do reTONE | WAV, AIFF/AIFC, DSF, DFF (não comprimido), FLAC, ALAC, Opus (Opus apenas em celulares ARM) |
| Faixas processadas pelo motor do reTONE | Android 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 amostragem | Filtro 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 Android | Float 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 USB | USB 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 |
| Assinatura | Todas 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 Android | FLAC, AAC, MP3, Ogg Vorbis, WAV, Opus e outros |
|---|---|
| Reproduzidos pelo motor do reTONE | DSD (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 suportados | DFF 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).
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.
Em versões mais antigas do Android, faixas de 24 bits são cortadas para 16 bits.
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 faixa | Celular com saída em 44.1 kHz | Celular com saída em 48 kHz |
|---|---|---|
| 44.1 kHz (CD etc.) | Sem conversão | Convertida para 48 kHz |
| 48 kHz | Convertida para 44.1 kHz | Sem conversão |
| 88.2, 96, 192 kHz | Convertida para 44.1 kHz | Convertida 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).
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ída | Mixer do Android | Taxa de amostragem | DIRECT no player | Volume |
|---|---|---|---|---|
| Alto-falante interno e entrada de fone | Sim (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 posterior | Volume do Android mais os passos finos de volume do reTONE |
| DAC USB (saída direta ativada, o padrão) | Não | Inalterada, se o DAC suportar | Quando uma faixa sem perdas é enviada sem conversão de taxa | No DAC, ou com os botões de volume (o DAC ou o reTONE ajusta) |
| DAC USB (saída direta desativada) | Sim | Depende das configurações de USB do celular (alguns convertem para 16 bits / 48 kHz) | Não é exibido | Volume do Android |
| Bluetooth | Sim | O celular recodifica para o codec Bluetooth | Não é exibido | Volume 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
- 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.
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ção | Nível | Como converte (Android padrão) | Atenuação da banda de rejeição (projeto) |
|---|---|---|---|
| 1 | LOW | Interpolação linear entre as duas amostras vizinhas; o método mais leve. Usado no Android 4.4 quando não há configuração | Sem filtro dedicado |
| 2 | MED | Interpolação cúbica sobre várias amostras vizinhas | Sem filtro dedicado |
| 3 | HIGH | Usa um filtro sinc | Não informado no código-fonte |
| 4 | VERY_HIGH | Usa um filtro mais longo que o HIGH. Os coeficientes são carregados de um componente do celular (libaudio-resampler.so); sem ele, é igual ao HIGH | Não informado no código-fonte |
| 5 | DYN_LOW | Monta um filtro na hora, de acordo com a razão de conversão | 80 dB |
| 6 | DYN_MED | Igual ao anterior, com um filtro mais longo que o DYN_LOW | 84 dB |
| 7 | DYN_HIGH | Igual ao anterior, com o filtro mais longo | 98 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 tempo | 84 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 reTONEDigital | Volume digital do DACControlado via USB | O próprio DACBotão giratório ou teclas | |
|---|---|---|---|
| DACs com controle de volume via USB | Enviado no máximo | Acompanha os botões de volume | — |
| Quando “reTONE adjusts” é escolhido | Acompanha os botões de volume | Máximo | — |
| DACs sem esse controle | Acompanha os botões de volume | — | — |
| Quando “On the DAC” é escolhido | Enviado no máximo | Máximo | Ajustado 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
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”
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” 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
| Celular | Android | Verificado |
|---|---|---|
| WalkmanSony série NW-Z1000 | 4.0.4 | Inicialização, telas |
| PRADA phone by LGLG L-02D | 4.0.4 | Inicialização, biblioteca, reprodução de FLAC 24 bits/96 kHz |
| MEDIAS XNEC N-07D | 4.0.4 | Inicialização |
| MEDIAS ESNEC N-05D | 4.0.4 | Inicialização |
| Xperia PSony LT22i | 4.1.2 | Principais recursos, uso na prática |
| Xperia goSony ST27i | 4.1.2 | Principais recursos (tela de 320×480), reprodução de DSD, DAC USB (DAC com bateria) |
| AQUOS PHONE ZETASHARP SH-02E | 4.1.2 | Principais recursos, uso na prática |
| Xperia VLSony SOL21 | 4.1.2 | Inicialização, biblioteca, reprodução (ALAC, de-ênfase, ajuste fino do volume) |
| Acoustic Research AR-M20 | 4.3 | Inicialização, reprodução de FLAC 24 bits/96 kHz |
| AQUOS CRYSTALSHARP 305SH | 4.4.2 | Principais recursos, uso na prática |
| URBANO L03KYOCERA KYY23 | 4.4.2 | Principais recursos, uso na prática |
| Raku-Raku SmartphoneFUJITSU F-06F | 4.4.2 | Inicialização, biblioteca, reprodução de FLAC 24 bits/96 kHz (o reTONE não pode ser definido como tela inicial) |
| KYOCERA KCP01K | 4.4.4 | Inicialização |
| Xperia Z4 TabletSony SOT31 | 5.0.2 | Principais recursos, uso na prática |
| VAIO Phone AVAIO VPA051 | 6.0.1 | Inicialização, reprodução |
| Nexus 6Motorola Nexus 6 | 7.1.1 | Inicialização |
| Xperia XA1 PlusSony G3226 | 8.0 | Inicializaçã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-02H | 8.0 | Inicialização, biblioteca, reprodução |
| Galaxy S8Samsung SC-02J | 9 | Principais recursos, uso na prática |
| Xperia XZ1Sony G8341 | 9 | Principais recursos, uso na prática |
| Android One X5LG X5-LG | 11 | Principais recursos, uso na prática |
| Galaxy A41Samsung SC-41A | 12 | Inicialização, biblioteca, reprodução |
| Pixel 3 XLGoogle Pixel 3 XL | 12 | Inicialização, biblioteca, reprodução, controles na notificação, controle remoto |
| Xperia 5 IVSony A204SO | 14 | Instalação pelo Google Play, reprodução, indicação de saída direta |
| Xiaomi 12S UltraXiaomi 2203121C | 15 | Principais recursos, uso na prática |
| Galaxy Z Fold5 Teste de campoSamsung Galaxy Z Fold5 | 16 | Inicialização, layout para dobráveis |
| Pixel 10a Teste de campoGoogle Pixel 10a | 17 | Inicialização |
| Pixel 11 Pro Fold Teste de campoGoogle Pixel 11 Pro Fold | 17 | Inicializaçã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
| Celular | DAC USB | Resultado |
|---|---|---|
| Galaxy S8Android 9 | Hidizs S9 Proalimentado pelo USB | Funciona. PCM (o DAC informa 44.1–768 kHz; testado com faixas de 44.1–192 kHz), DSD nativo, volume do DAC |
| Galaxy S8Android 9 | OPPO HA-2com bateria | Funciona |
| AQUOS PHONE ZETA SH-02EAndroid 4.1 | OPPO HA-2com bateria | Funciona. 24 bits/96 kHz tocado sem reamostragem |
| AQUOS PHONE ZETA SH-02EAndroid 4.1 | Hidizs S9 Proalimentado pelo USB | Funciona. Sem variação de velocidade nem falhas |
| Android One X5Android 11 | Hidizs S9 Proalimentado pelo USB | Funciona |
| Xperia PAndroid 4.1 | OPPO HA-2com bateria | Funciona. 24 bits/192 kHz e 96 kHz tocados sem reamostragem |
| Xperia PAndroid 4.1 | Hidizs S9 Proalimentado pelo USB | Não é reconhecido. O celular não consegue fornecer energia suficiente |
| URBANO L03Android 4.4 | OPPO HA-2com bateria | Nã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.1 | OPPO HA-2com bateria | Funciona |
| Xperia goAndroid 4.1 | Hidizs S9 Proalimentado pelo USB | Não é reconhecido. O celular não consegue fornecer energia suficiente |
| Galaxy A41Android 12 | Hidizs S9 Proalimentado pelo USB | Funciona. Sem falhas, inclusive ao alternar entre 24 bits/192 kHz e 44.1 kHz |
| Xperia XA1 PlusAndroid 8.0 | Hidizs S9 Proalimentado pelo USB | Funciona |
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 controlador | Problemas comuns | O 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 Exynos | As conclusões voltam em lotes; se ficar para trás, parte dos dados é pulada | Avalia por uma média de longo prazo |
| DWC2Rockchip mais antigos, alguns tablets Kirin e Amlogic | Dados não alinhados a 4 bytes podem causar ruído | Prefere 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 pulados | Avalia por uma média de longo prazo e mantém dados suficientes na fila |
| MediaTek xHCICelulares MediaTek recentes | A alocação rígida de banda pode recusar taxas de amostragem altas | Taxas 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”.
| Celular | Tela aberta |
|---|---|
| SHARP AQUOS CRYSTAL 305SH | Harman Clari-Fi/LiveStage |
| KYOCERA URBANO L03 (KYY23) | Dolby |
| Sony Xperia P | Efeitos sonoros (Equalizer, ClearBass, VPT, xLOUD e outros) |
| LG Android One X5 | Qualidade de som e efeitos (Hi-Fi Quad DAC, filtro digital, DTS:X e outros) |
| Samsung Galaxy S8 | SoundAlive |
| Sony Xperia XA1 Plus | Configuraçõ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).