reTONE
ScaricaGratis · Android 4.0+

Per ora l’app reTONE è disponibile in inglese e giapponese. Sono previste altre lingue.

Note tecniche

Specifiche, funzionamento della conversione e dell’uscita, dispositivi provati e altri dettagli. Questa pagina prosegue da Funzionalità.

Specifiche principali

Android4.0 e versioni successive
CPUARM (armeabi-v7a, arm64-v8a). Sono incluse anche le build Intel (x86, x86_64), non ancora provate su un telefono Intel
AutorizzazioniAccesso alla memoria e altre. L’accesso a Internet viene usato solo quando Network features è attivo
Formati letti dal motore di reTONEWAV, AIFF/AIFC, DSF, DFF (non compresso), FLAC, ALAC, Opus (Opus solo sui telefoni ARM)
Brani elaborati dal motore di reTONEAndroid 4.x: tutti i FLAC e i WAV. Android 5 e versioni successive: sui percorsi che passano per il mixer di Android, i FLAC, WAV e ALAC la cui frequenza differisce da quella di uscita o con una profondità di bit superiore a 16 bit (si può disattivare con l’impostazione “Conversion by reTONE”)
Conversione della frequenza di campionamentoFiltro FIR con finestra di Kaiser (polifase). Entro ±0.001 dB fino a 20 kHz (valore di progetto; per conversioni tra frequenze di 44.1 kHz o superiori)
Formato passato dal motore ad AndroidFloat a 32 bit su Android 5 e versioni successive, 16 bit su 4.x (dither solo per i valori che 16 bit non possono rappresentare esattamente). La profondità di bit all’uscita del telefono dipende dal telefono
DAC USBUSB Audio Class 2. È supportata anche la Class 1 (con prove sul campo limitate). I brani a frequenze che il DAC supporta e che il telefono può trasportare vengono inviati senza ricampionamento. Si preferiscono i contenitori a 32 bit (24 o 16 bit se non disponibili). DSD nativo a determinate condizioni
FirmaTutte le versioni distribuite sono firmate con la stessa chiave

Formati supportati

I formati che Android del telefono sa riprodurre vengono riprodotti con il decoder e l’elaborazione audio del telefono. DSD, AIFF e i FLAC e WAV ad alta risoluzione che Android non sa leggere vengono riprodotti dal motore di reTONE.

Riprodotti da AndroidFLAC, AAC, MP3, Ogg Vorbis, WAV, Opus e altri
Riprodotti dal motore di reTONEDSD (DSF, DFF), AIFF, WAV a 32 bit, ALAC (quando il telefono non sa riprodurlo). Su Android 4.x, tutti i FLAC e i WAV, e Opus (sui telefoni ARM). Inoltre, quando Android non riesce a riprodurre FLAC, WAV, AIFF, ALAC o Opus, il motore di reTONE tenta di riprodurli (per ALAC e Opus, anche quando la riproduzione si blocca senza errori)
Non supportatiDFF con compressione DST, APE, WMA Lossless

Dettagli tecnici

Con i brani lossless o non compressi, qualsiasi decoder scritto correttamente ripristina gli stessi dati. A parte gli effetti audio del telefono, il suono cambia principalmente in tre punti: conversione della frequenza di campionamento, troncamento della profondità di bit, calcolo del volume e mixer. reTONE si occupa di questi.

Premessa: che cosa influisce sulla qualità del suono

I brani lossless come FLAC e quelli non compressi come WAV vengono riportati esattamente ai dati originali da qualsiasi decoder scritto correttamente, qualunque sia l’app che li riproduce. Ciò che può cambiare il suono è l’elaborazione dopo la decodifica (i tre passaggi qui sotto, più gli effetti audio del telefono).

Conversione della frequenza di campionamento

Molti telefoni Android fissano l’uscita a una frequenza come 48 kHz. I brani a una frequenza diversa, come l’audio CD o l’audio ad alta risoluzione, vengono ricampionati ogni volta che vengono riprodotti. La qualità di questa conversione varia da telefono a telefono.

Troncamento della profondità di bit

Sulle versioni meno recenti di Android, i brani a 24 bit vengono troncati a 16 bit.

Calcolo del volume e mixer

Anche il calcolo del volume e la miscelazione con l’audio di altre app avvengono subito prima dell’uscita.

reTONE lavora su questa parte. Dove serve una conversione, la esegue da sé, e dove si può evitare, non converte. Con i DAC USB, l’audio arriva al DAC senza passare per l’elaborazione audio di Android. Quando le condizioni sono soddisfatte con un DAC USB (vedere “Volume del DAC USB” più sotto), la schermata del percorso del segnale, che si apre dal lettore, mostra BIT-PERFECT. Con l’altoparlante integrato o la presa per le cuffie non c’è modo di verificare come il telefono tratti l’audio dopo Android, quindi non possiamo garantire un’uscita bit-perfect.

La conversione della frequenza di campionamento varia da telefono a telefono

Prima della riproduzione, Android porta tutto l’audio alla frequenza di uscita del telefono. Questa frequenza varia tra i telefoni: molti funzionano a 48 kHz, ma alcuni a 44.1 kHz. Così lo stesso brano può essere convertito su un telefono e lasciato invariato su un altro.

Frequenza di campionamento del branoTelefono con uscita a 44.1 kHzTelefono con uscita a 48 kHz
44.1 kHz (CD, ecc.)Nessuna conversioneConvertito a 48 kHz
48 kHzConvertito a 44.1 kHzNessuna conversione
88.2, 96, 192 kHzConvertito a 44.1 kHzConvertito a 48 kHz

Esempi che abbiamo verificato: uscita a 44.1 kHz su Sony Xperia P e Xperia go; uscita a 48 kHz su SHARP AQUOS CRYSTAL 305SH, KYOCERA URBANO L03 (KYY23), Raku-Raku Smartphone F-06F e Samsung Galaxy S8. Alcuni telefoni supportano entrambe le frequenze, ma quale usino effettivamente dipende da come è costruito il telefono.

Anche la qualità della conversione di Android dipende dalle impostazioni del telefono. Tra i telefoni che abbiamo verificato, il KYY23 e il 305SH con Android 4.4 erano impostati sulla qualità massima, mentre il Galaxy S8 con Android 9 non aveva alcuna impostazione e usava la qualità media standard (che scende ulteriormente sotto carico elevato). Per i brani riprodotti dal motore di reTONE, quando la conversione non si può evitare, reTONE non la lascia ad Android: converte una sola volta, da sé, e consegna l’audio esattamente alla frequenza di uscita del telefono.

La conversione di Android viene evitata quando il brano corrisponde già alla frequenza di uscita del telefono, sui telefoni con Android 10 e versioni successive che supportano l’uscita diretta, e con un DAC USB. Alcuni dispositivi, tra cui certi DAP, sono inoltre costruiti per non convertire affatto a livello di firmware.

Un’app non può vedere se il chip audio del telefono converte di nuovo internamente dopo l’uscita di Android. La frequenza di uscita mostrata da reTONE è il valore comunicato da Android. Può verificare la frequenza di uscita di un telefono, e se avviene una conversione, in fondo alla schermata Now Playing e in Device & audio.

Il percorso audio

Quando la frequenza di uscita del telefono è fissata a 48 kHz o simili, non la si può cambiare senza root, quindi i brani a una frequenza diversa (audio CD a 44.1 kHz, o audio ad alta risoluzione a 88.2, 96 o 192 kHz) non possono essere riprodotti senza conversione. Su Android 4.x, e sui percorsi che passano per il mixer su Android 5 e versioni successive, reTONE ricampiona con alta qualità i brani riprodotti dal suo motore prima di passarli ad Android, così la conversione di Android non entra in gioco (per la qualità della conversione, vedere “Filtro di ricampionamento” più sotto). Con i DAC USB non viene eseguita alcuna conversione alle frequenze che il DAC supporta e che il telefono può trasportare; quando si usa l’uscita diretta, Android non esegue alcuna conversione (per ciò che avviene dopo, vedere “Che cosa salta l’uscita diretta” più sotto).

Android 4.xFLAC, WAV, DSD, AIFF
File del brano Motore di reTONERicampiona al posto di Android (solo quando serve) AndroidRiceve 16 bit, nessuna conversione Altoparlante / auricolari
Android 5 e successiviPercorsi che passano per il mixer. DSD, AIFF e FLAC/WAV/ALAC che richiedono conversione
File del brano Motore di reTONERicampiona al posto di Android AndroidRiceve float, nessuna conversione di frequenza (sui telefoni con uscita a 16 bit, qui ridotto a 16 bit) Altoparlante / auricolari
Android 10 e versioni successiveTelefoni che supportano l’uscita diretta
File del brano reTONEReimpacchetta l’audio lossless a 16 bit come 24 bit AndroidUscita diretta Altoparlante / auricolariCiò che accade dopo dipende dal telefono
DAC USBCollegato tramite OTG (tutti i brani)
File del brano reTONELe frequenze supportate dal DAC sono inviate così come sono, le altre ricampionateAggira Android DAC USB

Gestito da reTONEGestito da Android

I brani la cui frequenza di campionamento corrisponde all’uscita del telefono non richiedono conversione, quindi non ne avviene alcuna nemmeno con la riproduzione standard di Android. I formati che non passano per il motore di reTONE, come MP3 e AAC, usano la riproduzione standard di Android, e Android li ricampiona se la loro frequenza differisce dall’uscita del telefono (quando si riproduce tramite un DAC USB, reTONE invia anche questi). DSD e AIFF vengono riprodotti dal motore di reTONE anche su Android 10 e versioni successive.

Nel dettaglio

reTONE modifica quanto gestisce in base al formato del brano, alla versione di Android e all’uscita. Per i brani PCM, la conversione della frequenza di campionamento avviene al massimo una volta sui percorsi gestiti da reTONE (internamente, una conversione può usare più stadi di filtro) (per il DSD, al massimo una volta dopo lo stadio DSD-PCM). Con il Bluetooth, il telefono e il codec Bluetooth elaborano ulteriormente l’audio dopo questo punto. La riproduzione si basa su MediaPlayer e AudioTrack di Android, e il motore di reTONE (scritto in C) si occupa della decodifica e della conversione prima di essi.

Android 4.x: molti telefoni Android 4.x aprono il thread di uscita della musica a una frequenza fissa come 48 kHz, e i brani a una frequenza diversa, come 44.1 kHz o 96 kHz, vengono ricampionati all’interno del mixer di Android prima della riproduzione. Le app non hanno modo di impedire questa conversione. Inoltre il decoder standard di 4.x può ridurre i FLAC a 24 bit a 16 bit, o non riuscire ad aprire i FLAC a 192 kHz. Per questo su 4.x il motore di reTONE legge tutti i FLAC e i WAV, oltre a DSF, DFF e AIFF, li converte una sola volta alla frequenza di uscita del telefono (il valore di AudioTrack.getNativeOutputSampleRate) e li passa a 16 bit. Il mixer di Android accetta così com’è l’audio a 16 bit alla stessa frequenza, quindi dal lato di Android non avviene alcuna conversione della frequenza di campionamento. Nel ridurre a 16 bit, i valori che 16 bit possono rappresentare esattamente (come l’audio CD passato senza conversione) vengono consegnati invariati; altrimenti reTONE applica il dither TPDF e, quando l’uscita è a 44.1 kHz o 48 kHz, usa il noise shaping a retroazione dell’errore (il filtro a 5 coefficienti con ponderazione E di Lipshitz, Vanderkooy e Wannamaker) per spostare il rumore di quantizzazione verso frequenze meno udibili. Se si verifica clipping, l’errore retroazionato viene limitato a ±4 LSB per evitare oscillazioni. I coefficienti sono stati progettati per 44.1 kHz e si usano anche a 48 kHz. La quantità totale di rumore aumenta, ma viene spostata sulle alte frequenze, dove l’orecchio è meno sensibile. Tuttavia, se imposta il volume di Android sotto il massimo, il mixer di Android arrotonda di nuovo a 16 bit dopo aver applicato il volume, il che riduce il vantaggio del noise shaping. Ciò non vale per i telefoni che regolano il volume via hardware. In ogni caso non avviene alcuna conversione della frequenza di campionamento. MP3, AAC e formati simili passano per il percorso standard di Android anche su 4.x.

Android 5 e successivi (percorsi che passano per il mixer): su Android 10 e versioni successive rientrano qui anche i percorsi che non usano l’uscita diretta. Il mixer di Android di questa generazione accetta il float, quindi il motore di reTONE passa audio float ad AudioTrack senza dither. Sui telefoni con uscita a 16 bit, Android lo arrotonda poi a 16 bit (in questo punto Android non applica dither). I brani FLAC, WAV e ALAC la cui frequenza di campionamento differisce da quella di uscita del telefono verrebbero ricampionati dal mixer di Android se passati così come sono, e i brani oltre i 16 bit verrebbero troncati a 16 bit. Il ricampionatore predefinito di AOSP usa la qualità dinamica media (DYN_MED) quando l’impostazione di qualità (af.resampler.quality) non è definita, e scende a una qualità ancora inferiore quando il carico stimato dei ricampionatori in uso contemporaneamente supera un limite. Sul telefono che abbiamo controllato, questa impostazione non era definita. Il motore di reTONE ricampiona solo i brani che soddisfano queste condizioni, e si può disattivare con l’impostazione “Conversion by reTONE”. I brani a 16 bit alla frequenza di uscita del telefono (come l’audio CD su un telefono a 44.1 kHz) non richiedono conversione, quindi passano per il percorso standard di Android.

Uscita diretta (Android 10 e versioni successive; disponibilità secondo il telefono): la disponibilità dell’“uscita diretta”, che invia l’audio alla frequenza del brano senza passare per il mixer, e dell’“offload”, che decodifica l’audio compresso sul chip, dipende dal telefono e dall’uscita. Su Android 10 e versioni successive, un’app può chiedere al telefono con AudioTrack.isDirectPlaybackSupported se un dato formato, una data frequenza e una data profondità di bit possano essere inviati direttamente all’uscita attuale. reTONE usa questo percorso solo quando il telefono risponde di sì e la politica audio del telefono instrada davvero il PCM verso l’uscita diretta; altrimenti riproduce attraverso il percorso standard di Android. La risposta cambia a seconda dell’uscita, quindi reTONE chiede di nuovo ogni volta che si collegano o scollegano gli auricolari o l’USB. Sui telefoni la cui politica audio instrada il PCM verso l’uscita diretta, i formati principali che non potevano essere inviati direttamente erano il PCM a 16 bit a 44.1, 48 e 88.2 kHz (l’audio CD rientra in questo gruppo). I 24 bit e il float potevano essere inviati direttamente alla frequenza del brano, mentre MP3 e AAC (brani di 60 secondi o più) andavano in offload. Per questo reTONE decodifica l’audio lossless a 16 bit (FLAC, ALAC, WAV) in PCM (ALAC con il decoder proprio di reTONE se il telefono non ne ha uno) e lo passa a MediaPlayer tramite MediaDataSource come WAV a 24 bit con gli 8 bit inferiori riempiti di zeri. I 16 bit superiori restano invariati. Prima di passare a questo percorso, decodifica davvero il primo blocco per verificare che esca PCM a 16 bit autentico, e torna al percorso standard se non riesce a confermarlo. L’audio lossless a 24 bit e ad alta frequenza, e MP3 e AAC, vanno già in uscita diretta od offload, quindi vengono passati così come sono. Le app non hanno modo di leggere quale uscita il telefono abbia effettivamente usato, quindi “DIRECT” nella schermata del lettore è una previsione. In passato reTONE si fidava della sola risposta del telefono, ma Android standard può comunque inviare il PCM al mixer anche quando risponde di sì, e alcuni telefoni mostravano DIRECT quando l’audio non era davvero diretto. Dalla 0.92.48, reTONE controlla anche la politica audio del telefono. Dalla 0.90.1, “DIRECT” compare solo per i brani lossless e mai con il Bluetooth. Con l’offload, inoltre, non possiamo verificare se la frequenza di campionamento cambi all’interno del chip. Su questo percorso gli effetti sonori lato Android non vengono applicati (su alcuni telefoni gli effetti girano dentro il chip), mentre le impostazioni hardware del DAC (come i filtri) restano in vigore. Si può attivare o disattivare nelle impostazioni.

Uscita diretta verso DAC USB: quando collega un DAC USB a un telefono con supporto USB host (OTG), reTONE invia i dati direttamente al DAC senza passare per il percorso audio di Android. Sul telefono che abbiamo verificato, il percorso standard di Android convertiva l’audio a 16 bit/48 kHz per il DAC USB (era aperta anche un’uscita a 32 bit/192 kHz, ma non veniva usata per la musica). L’uscita diretta di reTONE funziona come segue.

  • Tramite l’API host USB del telefono, reTONE trova il DAC, ottiene la Sua autorizzazione e legge i descrittori USB (per USB Audio Class 2.0: l’ID del clock, le impostazioni alternative dell’interfaccia di riproduzione, l’endpoint di uscita e l’endpoint di feedback; per la Class 1.0: le frequenze di campionamento e la dimensione dei pacchetti di ciascuna impostazione alternativa).
  • Prende il controllo del DAC dal driver di Android (claimInterface) e preferisce un’impostazione alternativa PCM, a 2 canali e 32 bit (24 o 16 bit se non disponibile).
  • Legge le frequenze di campionamento supportate con GET RANGE della sorgente di clock. Se la frequenza del brano rientra nell’intervallo, la imposta con SET CUR e la conferma con GET CUR. Solo i brani a frequenze non supportate, o a frequenze che l’USB del telefono si rifiuta di trasportare (dalla 0.92.68), vengono ricampionati, una volta, da reTONE a una frequenza accettata dal DAC. I brani a frequenze supportate dal DAC non subiscono conversione della frequenza di campionamento né dither. I brani fino a 24 bit vengono inviati con i dati originali collocati invariati nei bit alti di una parola a 32 bit (quando si usa il volume del DAC o quando il volume si regola sul DAC stesso). Anche i brani a 32 bit interi seguono un percorso che li mantiene come interi (dalla 0.92.65). Vengono arrotondati solo i valori che la profondità di bit del DAC non può rappresentare esattamente, con dither TPDF quando il DAC è a 24 bit o meno.
  • I trasferimenti sono gestiti lato C con trasferimenti isocroni usbdevfs. Per i DAC High Speed che acquisiscono l’audio ogni 0.125 ms (la maggior parte), 1 ms di audio (8 microframe) viene raggruppato in un unico trasferimento, e se ne tengono accodati 64 in anticipo. Per i DAC con un intervallo più lungo, ogni trasferimento contiene 32 pacchetti e se ne accodano meno, mantenendo circa 64 ms di anticipo. I DAC asincroni comunicano dall’endpoint di feedback il numero di frame per microframe, e reTONE adegua la quantità inviata di conseguenza. Il formato di quel valore varia da DAC a DAC, quindi reTONE lo riconosce da ciò che arriva. Quando è reTONE ad applicare il volume, lo fa subito prima dell’invio, quindi le modifiche hanno effetto immediato (ogni modifica viene raccordata in circa 5 ms per evitare scalini bruschi).
  • In questo periodo anche MP3, AAC e formati simili vengono decodificati in PCM con il decoder del telefono (MediaCodec) prima dell’invio, quindi reTONE riproduce ogni brano. Scollegando il DAC la riproduzione va in pausa. Quando un’altra app inizia a riprodurre, reTONE va in pausa e restituisce il DAC ad Android, e lo riprende quando riproduce di nuovo in reTONE. Se il DAC non viene restituito ad Android, ad esempio dopo un arresto forzato, reTONE lo restituisce subito dopo un aggiornamento, e quando apre reTONE con “USB DAC direct output” disattivato.

Molti telefoni della generazione Android 4.1 non possono usare un DAC USB come uscita audio, ma l’uscita diretta di reTONE usa solo la funzione host USB, quindi riesce comunque a inviare l’audio. Con il nostro telefono di prova del 2012 (Android 4.1) e un DAC a batteria, 24 bit/192 kHz sono stati riprodotti senza conversione. Abbiamo provato di persona DAC USB Audio Class 2.0. I DAC Class 1.0 sono supportati, ma finora le prove sul campo provengono solo dalle segnalazioni degli utenti. I telefoni più vecchi possono fornire via USB solo una piccola corrente, quindi i DAC alimentati dal bus potrebbero non essere riconosciuti. Abbiamo visto anche un caso in cui le interferenze radio del Wi-Fi raggiungevano il DAC attraverso il cavo USB e causavano un rumore intermittente. La riproduzione non richiede una connessione, quindi consigliamo di passare alla modalità aereo quando si ascolta tramite un DAC USB.

Come differisce ogni uscita

“Dedicated music player” e “Music app” usano lo stesso percorso audio. Le uniche differenze sono se HOME apre reTONE, il valore predefinito di Silent DAP mode e la schermata di blocco di reTONE. L’uscita diretta (Android 10 e versioni successive) e l’uscita diretta verso DAC USB funzionano in entrambe le modalità.

UscitaMixer di AndroidFrequenza di campionamentoDIRECT nel lettoreVolume
Altoparlante integrato e uscita cuffieSì (tranne quando si usa l’uscita diretta)Adattata alla frequenza di uscita del telefono (come nello schema sopra)Brani lossless che probabilmente usano l’uscita diretta, su Android 10 e versioni successiveVolume di Android più i passi di volume fini di reTONE
DAC USB (uscita diretta attiva, impostazione predefinita)NoInvariata se il DAC la supportaQuando un brano lossless viene inviato senza conversione di frequenzaSul DAC, o con i tasti del volume (regola il DAC o reTONE)
DAC USB (uscita diretta disattivata)SìDipende dalle impostazioni USB del telefono (alcuni convertono a 16 bit / 48 kHz)Non mostratoVolume di Android
BluetoothSìIl telefono ricodifica nel codec BluetoothNon mostratoVolume di Android (collegato al dispositivo su alcuni telefoni)

Il DSD viene convertito in PCM, tranne quando viene inviato tramite uscita diretta a un DAC con supporto DSD nativo. Mentre reTONE usa il DAC, i suoni delle altre app, come le notifiche, escono dall’altoparlante integrato. Quando un’altra app inizia a riprodurre, reTONE restituisce il DAC ad Android. Molti telefoni Android 4.x non possono usare da soli un DAC USB come uscita audio, quindi il DAC funziona solo tramite uscita diretta. Toccando la riga in basso della schermata del lettore si apre la schermata del percorso del segnale. Per ogni fase (file, decodifica, frequenza di campionamento, volume, uscita), mostra se l’audio passa invariato o viene modificato, in base all’elaborazione di reTONE e a ciò che Android riferisce. L’elaborazione all’interno del DSP del telefono o del DAC non può essere mostrata.

Che cosa salta l’uscita diretta

Quando si usa l’uscita diretta, ciò che viene saltato è la miscelazione e la conversione della frequenza di campionamento all’interno di Android. Ciò che accade all’audio dopo dipende dal telefono e dall’uscita.

L’audio che un’app consegna attraversa Android in questo ordine.

1. Il centro audio di Android (AudioFlinger)
Su un’uscita normale, qui il mixer combina il suono di più app, lo converte alla frequenza di uscita del telefono (di solito 48 kHz) e applica il volume. L’uscita diretta salta principalmente questa fase: niente miscelazione e niente conversione. Il volume è affidato all’hardware audio del telefono se ha un controllo del volume; in caso contrario può essere applicato ai campioni in questa fase (a volume massimo i valori non cambiano).

2. I componenti audio del produttore → il processore audio (DSP) all’interno del chip
Sulla maggior parte dei telefoni l’audio non va direttamente al DAC; passa per un DSP all’interno del chip, che ha fasi proprie.

  • Elaborazione per flusso (conversione di formato, volume)
  • Elaborazione per uscita (protezione dell’altoparlante, effetti audio del produttore, limitatori)
  • Lo stadio di uscita finale. Ogni uscita ha la propria frequenza, e se quella del brano è diversa, il DSP la converte
  • L’“offload” di MP3 e AAC viene decodificato da questo DSP

3. Il DAC (integrato nel chip, o un chip DAC separato)
È qui che l’audio diventa per la prima volta analogico. Il filtro digitale interno del DAC (sovracampionamento) viene attraversato allo stesso modo anche con un DAC USB, quindi non viene considerato quando ci si chiede se i dati siano stati modificati.

Che cosa si può dire

  • Ciò che è certo quando si usa l’uscita diretta: salta la miscelazione e la conversione della frequenza di campionamento all’interno di Android
  • Se il telefono adatta la frequenza di uscita del DSP al brano, come nei percorsi cuffie progettati pensando alla musica, il DSP si limita a formattare i dati e a passarli oltre, quindi probabilmente arrivano al DAC vicini all’originale
  • Sui telefoni la cui frequenza di uscita è fissata a 48 kHz, il DSP converte l’audio anche se la conversione di Android viene saltata
  • Gli altoparlanti ricevono quasi sempre protezione o correzione. Alcuni telefoni mostrano DIRECT anche per l’altoparlante, ma si deve presumere che i dati siano cambiati
  • Su alcuni telefoni gli effetti audio del produttore funzionano all’interno del DSP
  • Un’app non può verificare nulla di tutto questo. Da Android 9, le app normali non hanno modo di leggere le impostazioni del DSP né quale percorso sia stato usato. L’indicazione DIRECT di reTONE è una previsione basata sulla risposta di Android e sulla politica audio del telefono (compare solo per i brani lossless e mai con il Bluetooth)

Differenza rispetto a un DAC USB
Con un DAC USB, reTONE aggira il percorso audio di Android e dialoga direttamente con il DAC via USB. reTONE gestisce i dati fino al DAC; ciò che avviene dentro il DAC non si può verificare. Quando il brano viene inviato alla propria frequenza di campionamento e il volume è impostato sul lato del DAC, reTONE non altera i valori.

Filtro di ricampionamento

0-20-40-60-80-100-120-1400102030 Frequency (kHz) dB Flat to 20 kHz Stopbandfrom 24.1 kHz
Risposta del filtro usato per la conversione 44.1 kHz → 48 kHz (calcolata con le stesse formule dell’app).Telefoni con uscita float (obiettivo 120 dB) Telefoni con uscita a 16 bit (obiettivo 100 dB)
  • Piatta fino a 20 kHzLo scostamento fino a 20 kHz è inferiore a 0.001 dB (calcolato). Non attenua alcun suono udibile.
  • Attenuazione in banda di arresto di almeno 120 dB / 100 dBValori calcolati per i telefoni con uscita float e per quelli con uscita a 16 bit (circa −122 dB / circa −102 dB per 44.1 kHz → 48 kHz). L’aliasing misurato con un segnale in ingresso a 30 kHz (la quantità che compare tra 0 e 20 kHz, prima dell’arrotondamento a 16 bit) era almeno 104.6 dB sotto il segnale originale.
  • −1 dB solo durante il ricampionamentoQuesto lascia margine per i picchi tra i campioni oltre 0 dBFS (il più alto che abbiamo misurato su registrazioni commerciali era +0.59 dB). I brani ricampionati suonano 1 dB più piano di quelli non ricampionati.
Nel dettaglio

La conversione della frequenza di campionamento ricalcola la forma d’onda tra i campioni originali, quindi la qualità del filtro si riflette direttamente sul suono. Il filtro di reTONE è un filtro FIR ottenuto applicando una finestra di Kaiser a una funzione sinc. Usa una struttura polifase, che divide i coefficienti in gruppi secondo il rapporto di conversione e calcola solo ciò che serve. Il progetto si basa su due criteri: non attenuare il suono udibile e tenere ben soppresso l’aliasing causato dalla conversione.

  • Banda passante: piatta fino a 20 kHz (entro ±0.001 dB per progetto; per conversioni tra frequenze di 44.1 kHz o superiori).
  • Banda di arresto: inizia da “la frequenza più bassa − 20 kHz”. Tra 44.1 kHz e 48 kHz, cioè 24.1 kHz. L’aliasing che cade in questo intervallo compare sopra i 20 kHz e resta fuori dalla banda udibile (fino a 20 kHz).
  • Attenuazione (obiettivo di progetto): 120 dB per i telefoni con uscita float (Android 5 e versioni successive), 100 dB per quelli con uscita a 16 bit (Android 4.x). La lunghezza del filtro e la finestra sono progettate con un margine di 2 dB sull’obiettivo, così il valore calcolato supera l’obiettivo per ogni conversione (per 44.1 → 48 kHz, i valori calcolati sono circa 122 dB e circa 102 dB). L’aliasing residuo a −100 dB è ben al di sotto del rumore di fondo a 16 bit (circa −93 dBFS su tutta la banda, dither compreso), quindi un’attenuazione di 100 dB non è udibilmente diversa da 120 dB.
  • Tap: determinati dall’attenuazione e dalla banda di transizione con la formula della finestra di Kaiser (86 tap per 44.1 ↔ 48 kHz a 120 dB).
  • Stadi 2:1: gli stadi che dimezzano esattamente la frequenza, come 96 → 48 kHz, usano un filtro half-band, in cui metà dei coefficienti è zero e il resto è simmetrico, riducendo le moltiplicazioni a circa un quarto di un filtro normale. 192 → 48 kHz usa due stadi half-band, e i rapporti rimanenti come 88.2 → 48 kHz sono gestiti da un filtro polifase.

Nelle misure, i segnali a 1 kHz, 19 kHz e 19.9 kHz sono usciti allo stesso livello entro 0.01 dB. Con un ingresso a 30 kHz, l’aliasing comparso tra 0 e 20 kHz era almeno 104.6 dB sotto il segnale originale con uscita a 44.1 kHz e 48 kHz, e almeno 116 dB sotto per la conversione da 192 kHz (misurato prima dell’arrotondamento a 16 bit). Questi sono valori a una singola frequenza. Per progetto, l’intera banda di arresto viene soppressa almeno fino agli obiettivi di attenuazione indicati sopra.

Poiché la conversione crea nuovi punti tra i campioni originali, i brani con livello alto possono ritrovarsi con punti oltre 0 dBFS. Convertendo a 48 kHz diverse registrazioni commerciali in nostro possesso, i punti oltre 0 dBFS costituivano lo 0.0001–0.001% del totale, con massimi da +0.38 a +0.59 dB. Questi vengono tagliati con l’uscita a 16 bit o nel mixer del telefono, quindi durante il ricampionamento, e solo allora, reTONE abbassa il livello di 1 dB, lasciando un margine oltre il massimo misurato. I brani che non vengono ricampionati restano invariati, quindi sullo stesso telefono i brani ricampionati suonano 1 dB più piano. Passando senza interruzioni al brano successivo, lo stato del ricampionatore viene riportato avanti, così l’inizio e la fine dei brani non vengono tagliati dall’elaborazione (dalla 0.92.57).

Il volume non viene applicato all’interno del motore di reTONE. Viene applicato nel mixer di Android (il volume di AudioTrack). Applicarlo all’interno del motore ritarderebbe le modifiche finché non finisce di suonare il circa mezzo secondo (500 ms) di audio accumulato in AudioTrack, rendendo lenta la risposta dei tasti del volume. Sui telefoni con uscita a 16 bit, abbassando il volume Android arrotonda di nuovo a 16 bit (in questo punto Android non applica dither).

I calcoli sono scritti in C e usano le istruzioni ARM NEON per elaborare insieme i canali sinistro e destro. Il ciclo interno del filtro legge i coefficienti come vettori e usa quattro accumulatori per nascondere la latenza. Anche il dither, compresi numeri casuali, arrotondamento, clipping e retroazione dell’errore, avviene interamente in NEON, evitando i trasferimenti tra NEON e registri generici, che sono lenti sui core più vecchi (Cortex-A9). Le build Intel (x86) usano un percorso in C semplice senza NEON. I valori di carico riportati sotto provengono dai telefoni ARM che abbiamo provato.

Lo sapeva?La qualità del ricampionamento di Android la sceglie il produttore del telefono

La parte di Android che converte le frequenze di campionamento offre diversi livelli di qualità, da calcoli semplici a quelli più pesanti che usano più calcolo per una maggiore precisione. Quale venga usato è determinato da un’impostazione del telefono, e questa impostazione la decide il produttore.

Sui telefoni con Android 5 o versioni successive in cui il produttore non l’ha impostata, viene usato il livello medio, DYN_MED (su Android 4.4, il livello più semplice, LOW). Inoltre, quando il carico stimato dei ricampionatori in uso contemporaneamente supera un limite, i ricampionatori oltre il limite scendono al livello immediatamente inferiore (il carico effettivo della CPU non viene misurato). Tra i telefoni che abbiamo verificato, due telefoni Android 4.4 avevano il valore impostato a 4 (VERY_HIGH), e un telefono Android 9 non aveva alcuna impostazione, quindi usava DYN_MED. Ciò significa che lo stesso brano riceve una qualità di ricampionamento diversa a seconda del telefono.

Valore dell’impostazioneLivelloCome converte (Android standard)Attenuazione in banda di arresto (progetto)
1LOWInterpolazione lineare tra i due campioni adiacenti; il metodo più leggero. Usato su Android 4.4 quando non impostatoNessun filtro dedicato
2MEDInterpolazione cubica su diversi campioni adiacentiNessun filtro dedicato
3HIGHUsa un filtro sincNon indicata nel codice sorgente
4VERY_HIGHUsa un filtro più lungo di HIGH. I coefficienti vengono caricati da un componente del telefono (libaudio-resampler.so); senza di esso, come HIGHNon indicata nel codice sorgente
5DYN_LOWCostruisce al volo un filtro adatto al rapporto di conversione80 dB
6DYN_MEDCome sopra, con un filtro più lungo di DYN_LOW84 dB
7DYN_HIGHCome sopra, con il filtro più lungo98 dB
Non impostato—DYN_MED su Android 5 e versioni successive (LOW su Android 4.4). Scende al livello immediatamente inferiore quando molti sono in uso contemporaneamente84 dB
reTONE—Progettato indipendentemente dall’impostazione del telefono. Piatto fino a 20 kHz (l’obiettivo di attenuazione dipende dal formato di uscita)100 dB (uscita a 16 bit)
120 dB (uscita float)

L’impostazione si chiama af.resampler.quality. La tabella si basa sul codice sorgente standard di Android 13 (le voci di Android 4.4 si basano sul sorgente di Android 4.4) e potrebbe non valere se il produttore l’ha modificato. Tutti i valori di “Attenuazione in banda di arresto (progetto)” sono obiettivi di progetto del filtro. reTONE è progettato in modo che il valore calcolato superi l’obiettivo per ogni conversione.

Quando la conversione è affidata a reTONE, si usa il ricampionamento di reTONE indipendentemente da questa impostazione.

Volume del DAC USB

Il volume può essere abbassato in tre punti. Quale si usa dipende da come è costruito il DAC e da ciò che sceglie al primo collegamento.

All’interno di reTONEDigitaleVolume digitale del DACControllato via USBIl DAC stessoManopola o pulsanti
DAC con controllo del volume via USBInviato al massimoSegue i tasti del volume—
Quando è scelto “reTONE adjusts”Segue i tasti del volumeMassimo—
DAC senza questo controlloSegue i tasti del volume——
Quando è scelto “On the DAC”Inviato al massimoMassimoRegolato sul DAC
Nel dettaglio

Ci sono tre punti in cui abbassare il volume: ① dentro reTONE, applicato ai dati (digitale), ② il volume digitale interno del DAC, controllato via USB, e ③ la manopola o i tasti sul DAC stesso. Quale viene usato dipende dal metodo di regolazione scelto quando collega il DAC per la prima volta e dal fatto che il DAC supporti o meno il controllo del volume via USB.

② Volume via USB: la USB Audio Class prevede un meccanismo per il volume chiamato Feature Unit, e GET RANGE ne legge minimo, massimo e passo (in unità di 1/256 dB). reTONE converte in dB il proprio volume (un unico guadagno che combina i livelli di Android e il volume fine). Se rientra in questo intervallo, reTONE lo invia al DAC e mantiene al massimo la propria uscita. Solo quando il volume scende sotto l’intervallo, la differenza viene applicata al PCM con ①. 0 è il silenzio.

① Dentro reTONE: per i DAC senza volume Feature Unit, e per i DAC impostati su “reTONE adjusts”, reTONE applica il volume ai dati prima di inviarli, raccordando ogni modifica in circa 5 ms. Viene applicato subito prima dell’invio, quindi i tasti del volume rispondono immediatamente.

③ Il DAC stesso: se il DAC ha un proprio controllo del volume non si può leggere via USB. Per questo, la prima volta che collega un DAC, reTONE Le chiede una sola volta come regolare il volume del DAC, con tre scelte: “On the DAC itself”, “Volume keys (DAC adjusts)” e “Volume keys (reTONE adjusts)”. Alcuni DAC dichiarano di aver accettato un comando di volume senza cambiarlo davvero; per questi, scegliendo “reTONE adjusts” il volume del DAC viene fissato al massimo e abbassato con ①. Se sceglie “On the DAC”, sia ② sia ① restano fissi al massimo e premere i tasti del volume non cambia nulla (un messaggio lo segnala). Con i DAC dotati di controllo del volume analogico, evitare l’attenuazione digitale permette di sfruttare al meglio il DAC. La scelta viene memorizzata per ogni modello di DAC (ID del produttore e ID del prodotto USB) e si può cambiare con l’impostazione “DAC volume”.

Quando è scelto “On the DAC”, oppure quando si usa il volume del DAC (entro il suo intervallo di volume), i brani a frequenze supportate dal DAC vengono inviati senza modificare i dati. Solo quando imposta il volume sotto l’intervallo del DAC, reTONE applica la parte restante. In questo caso, se il brano è lossless (compreso il DSD nativo) e la sua profondità di bit rientra in quella del DAC, la schermata del percorso del segnale mostra BIT-PERFECT (i brani a 32 bit interi solo se seguono il percorso intero). Ciò che avviene dentro il DAC non si può verificare.

DSD nativo

Brani DSF/DFF
Il DAC supporta il DSD nativo
e il suo volume si può controllare via USB
e il volume non è impostato su “reTONE adjusts”
e “Sending DSD” è impostato su “Send as DSD”
SìInvio come DSDes. DSD64 → USB AUDIO • DSD64 DIRECT
NoConversione in PCMPCM a 88.2 kHz per DSD64

reTONE non può modificare il volume del DSD in sé, quindi il DAC deve consentire il controllo del volume. Se i brani DSD si interrompono, scelga “Convert to PCM” nell’impostazione “Sending DSD”. Il DoP non è supportato.

Nel dettaglio

I brani DSF e DFF vengono inviati come DSD, senza conversione in PCM, solo quando il DAC supporta il DSD nativo e il suo volume si può controllare via USB (e il DAC non è impostato su “reTONE adjusts”). reTONE non può modificare il volume del DSD stesso, quindi è necessario il controllo del volume lato DAC. La schermata del lettore mostra qualcosa come “DSD64 → USB AUDIO • DSD64 DIRECT”.

Viene inviato come segue.

  • Il DSD nativo funziona con i DAC i cui descrittori USB includono un’impostazione alternativa per i dati grezzi (TYPE I RAW DATA).
  • I bit del DSD vengono impacchettati 4 byte alla volta in una parola a 32 bit per canale, con il bit più vecchio in cima. Il DSF memorizza i bit partendo dal meno significativo, quindi l’ordine dei bit in ogni byte viene invertito prima dell’impacchettamento. Le parole vengono inviate in big-endian (la stessa ipotesi del DSD_U32_BE di Linux). Questo reimpacchettamento è fatto in C, e il buffer circolare di trasferimento contiene circa 500 ms.
  • Il clock del DAC è impostato su “frequenza DSD ÷ 32” (88.2 kHz per DSD64, 176.4 kHz per DSD128).
  • Silenzi, pause e fine dei brani vengono riempiti con lo schema di silenzio DSD 0x69.

Questo ordine dei byte e dei bit è stato verificato con una riproduzione corretta sul DAC che abbiamo provato. Non è ancora stato controllato con altri DAC, e il DoP (DSD over PCM) non è supportato. Non si possono leggere nemmeno i DFF compressi in DST.

Sending DSD (impostazione): “Sending DSD” compare sotto “Sound” nelle impostazioni solo mentre è collegato un DAC in grado di usare il DSD nativo. L’impostazione predefinita è “Send as DSD” (il DAC riproduce direttamente il DSD), e può passare a “Convert to PCM” (reTONE lo converte in PCM). Se i brani DSD si interrompono, o se preferisce la riproduzione in PCM, scelga la conversione in PCM. La scelta viene memorizzata per ogni modello di DAC, e il cambio riapre il brano corrente nella stessa posizione. Abbiamo trovato un DAC che si interrompeva per un istante con registrazioni DSD la cui modulazione superava il livello di riferimento del 50%. Il trasferimento era normale, quindi sembra dipendere dal progetto del DAC. Anche in quel caso la conversione in PCM evita le interruzioni.

Conversione DSD → PCM: quando il DSD nativo non è usato (con DAC che non soddisfano le condizioni, quando è scelto “Convert to PCM”, e per l’uscita verso Bluetooth, auricolari o altoparlante), reTONE converte il DSD in PCM in due fasi.

  • Fase 1: il flusso di bit DSD viene decimato di un fattore 32, 64 e così via in PCM a circa 88.2 kHz o più (DSD64 di 32 a 88.2 kHz, DSD128 di 64 a 88.2 kHz). Il filtro è un FIR con finestra di Kaiser. La banda passante arriva al maggiore tra 20 kHz e un quarto della frequenza di uscita, la banda di arresto inizia da “frequenza di uscita − banda passante”, e l’attenuazione è di 100 dB per l’uscita a 16 bit e 110 dB per float e USB. Il numero di coefficienti è determinato dalla formula della finestra di Kaiser. Il calcolo usa consultazioni di tabelle a 16 bit, e le tabelle vengono costruite una volta per configurazione e riutilizzate. Nelle misure, la risposta a 20 kHz era 0.000 dB e l’aliasing sotto i 20 kHz era −101 dB (progetto a 100 dB) / da −110 a −117 dB (progetto a 110 dB).
  • Fase 2: se necessario, lo stesso ricampionatore descritto nella sezione sui filtri converte una sola volta alla frequenza di uscita del telefono (ad esempio 44.1 kHz o 48 kHz per l’uscita integrata).
  • Livello: convertito in modo che lo 0 dB SACD (modulazione al 50%) diventi −6 dBFS (una convenzione diffusa; dalla 0.69.0. Le versioni precedenti usavano −12 dBFS e suonavano 6 dB più piano).

Quando invia PCM a un DAC USB, reTONE invia il PCM a “frequenza DSD ÷ 32” (88.2 kHz per DSD64, 176.4 kHz per DSD128, 352.8 kHz per DSD256) così com’è, senza la conversione della fase 2, se il DAC lo supporta. Poiché il DSD viene convertito in PCM, in questo caso DIRECT non compare.

Carico

Uso della CPU da parte di reTONE, rispetto a un core, sul nostro telefono di prova del 2012 (Android 4.1, 2 core).

Ridisegno della schermata del lettore (durante la riproduzione reale)Circa 2%
Uscita dell’audio CD così com’è (al clock massimo)Circa 2%
Conversione da 24 bit/192 kHz a 44.1 kHz (al clock massimo)Circa 10%
0%50%100%

“Ridisegno della schermata del lettore” è stato misurato durante la riproduzione reale e non include la decodifica. Gli altri due derivano dall’esecuzione degli stessi calcoli del motore di reTONE al clock massimo, convertiti in percentuale del tempo reale. Durante la riproduzione reale il telefono abbassa il clock, quindi i valori mostrati sul telefono sembrano da 2 a 3 volte più alti.

Nel dettaglio

reTONE punta a “non fare nulla quando è fermo” e a “non disegnare nulla durante la riproduzione a schermo spento”. Le attività periodiche avvengono solo durante la riproduzione: ogni secondo a schermo acceso e ogni 5 secondi a schermo spento, e la barra di avanzamento nella schermata del lettore ridisegna solo sé stessa ogni 250 ms. Orologio e batteria si aggiornano tramite notifiche del sistema, senza interrogazioni periodiche.

Uso della CPU da parte di reTONE, rispetto a un core, sul nostro telefono di prova del 2012 (Android 4.1, Cortex-A9 a 2 core).

  • Fermo: 0%.
  • In riproduzione a schermo spento: il disegno si ferma. I brani riprodotti con la riproduzione standard di Android usano quasi lo 0%, mentre quelli riprodotti dal motore di reTONE (FLAC, WAV e altri su Android 4.x) aggiungono il carico di decodifica e conversione indicato sotto.
  • In riproduzione con la schermata del lettore visibile: circa 2% (misurato durante la riproduzione reale; soprattutto il ridisegno della barra di avanzamento, decodifica esclusa).
  • Il motore di reTONE che emette l’audio CD (16 bit/44.1 kHz) così com’è a 44.1 kHz: circa 2%. Con conversione a 48 kHz in uscita: circa 4%.
  • Conversione da 24 bit/96 kHz a 48 kHz: circa 5%. A 44.1 kHz: circa 7%.
  • Conversione da 24 bit/192 kHz a 44.1 kHz: da circa 10% (solo calcolo) a circa 15% (stima approssimativa del carico totale di riproduzione, riportata al clock massimo).
  • Invio di 24 bit/192 kHz a un DAC USB senza conversione: circa 20% (misurato durante la riproduzione reale, schermo acceso, thread di trasferimento incluso).

I valori del motore da “audio CD” a “24 bit/192 kHz” derivano dall’esecuzione degli stessi calcoli a piena velocità al clock massimo, convertiti in percentuale del tempo reale. Durante la riproduzione reale il telefono abbassa il clock tra 200 MHz e 1 GHz, quindi i valori mostrati sul telefono sembrano da 2 a 3 volte più alti (20–29% per 24 bit/192 kHz). Anche il modo in cui è scritto il codice fa una grande differenza: l’attuale implementazione in C e NEON aveva da un terzo a un quinto del carico di un primo prototipo scritto in Java.

Per la conversione da DSD a PCM, con quel telefono del 2012 e un DAC a batteria, convertire DSD64 in PCM a 88.2 kHz e inviarlo via USB richiedeva circa l’11.8% per la conversione e circa il 5.8% per il trasferimento USB (a circa 1 GHz). Quando DSD64 veniva riprodotto tramite l’uscita integrata (48 kHz) su un telefono Android 4.4, il thread di decodifica usava il 23.8%, ma il telefono manteneva il clock al minimo di 300 MHz, quindi, riportando semplicemente in proporzione al clock, si ottiene circa il 3% al clock massimo.

Sui telefoni che abbiamo provato, il carico a schermo acceso dipendeva più dalla risoluzione dello schermo che dalla velocità della CPU (Android 4.x sembra ridisegnare l’intero schermo anche per piccoli aggiornamenti). Un telefono 1080 × 1920 usava circa il 4% nella schermata del lettore, e un telefono 1440 × 3120 con Android 11 circa l’8.5% (rispetto a uno dei suoi 8 core; circa l’1% dell’intero telefono). I telefoni più vecchi hanno schermi piccoli e quelli ad alta risoluzione hanno più potenza di calcolo, quindi per ora la frequenza di ridisegno è la stessa su tutti i telefoni.

Dispositivi provati

TelefonoAndroidVerificato
WalkmanSony serie NW-Z10004.0.4Avvio, schermate
PRADA phone by LGLG L-02D4.0.4Avvio, libreria, riproduzione FLAC 24 bit/96 kHz
MEDIAS XNEC N-07D4.0.4Avvio
MEDIAS ESNEC N-05D4.0.4Avvio
Xperia PSony LT22i4.1.2Funzioni principali, prova sul campo
Xperia goSony ST27i4.1.2Funzioni principali (schermo 320×480), riproduzione DSD, DAC USB (DAC a batteria)
AQUOS PHONE ZETASHARP SH-02E4.1.2Funzioni principali, prova sul campo
Xperia VLSony SOL214.1.2Avvio, libreria, riproduzione (ALAC, de-enfasi, regolazione fine del volume)
Acoustic Research AR-M204.3Avvio, riproduzione FLAC 24 bit/96 kHz
AQUOS CRYSTALSHARP 305SH4.4.2Funzioni principali, prova sul campo
URBANO L03KYOCERA KYY234.4.2Funzioni principali, prova sul campo
Raku-Raku SmartphoneFUJITSU F-06F4.4.2Avvio, libreria, riproduzione FLAC 24 bit/96 kHz (reTONE non può essere impostato come schermata Home)
KYOCERA KCP01K4.4.4Avvio
Xperia Z4 TabletSony SOT315.0.2Funzioni principali, prova sul campo
VAIO Phone AVAIO VPA0516.0.1Avvio, riproduzione
Nexus 6Motorola Nexus 67.1.1Avvio
Xperia XA1 PlusSony G32268.0Avvio, libreria, riproduzione FLAC a 24 bit/192 kHz, Sound settings (apre le impostazioni audio di Sony)
Galaxy S7 edgeSamsung SC-02H8.0Avvio, libreria, riproduzione
Galaxy S8Samsung SC-02J9Funzioni principali, prova sul campo
Xperia XZ1Sony G83419Funzioni principali, prova sul campo
Android One X5LG X5-LG11Funzioni principali, prova sul campo
Galaxy A41Samsung SC-41A12Avvio, libreria, riproduzione
Pixel 3 XLGoogle Pixel 3 XL12Avvio, libreria, riproduzione, controlli nelle notifiche, telecomando
Xperia 5 IVSony A204SO14Installazione da Google Play, riproduzione, indicazione dell’uscita diretta
Xiaomi 12S UltraXiaomi 2203121C15Funzioni principali, prova sul campo
Galaxy Z Fold5 Prova sul campoSamsung Galaxy Z Fold516Avvio, layout per pieghevoli
Pixel 10a Prova sul campoGoogle Pixel 10a17Avvio
Pixel 11 Pro Fold Prova sul campoGoogle Pixel 11 Pro Fold17Avvio, layout per pieghevoli

Prova sul campo Risultati di volontari che hanno provato reTONE sui propri telefoni.

Uscita diretta al DAC USB: combinazioni provate

TelefonoDAC USBRisultato
Galaxy S8Android 9Hidizs S9 Proalimentato via busFunziona. PCM (il DAC dichiara 44.1–768 kHz; provato con brani da 44.1 a 192 kHz), DSD nativo, volume del DAC
Galaxy S8Android 9OPPO HA-2a batteriaFunziona
AQUOS PHONE ZETA SH-02EAndroid 4.1OPPO HA-2a batteriaFunziona. 24 bit/96 kHz riprodotto senza ricampionamento
AQUOS PHONE ZETA SH-02EAndroid 4.1Hidizs S9 Proalimentato via busFunziona. Nessuna deriva di velocità né interruzioni
Android One X5Android 11Hidizs S9 Proalimentato via busFunziona
Xperia PAndroid 4.1OPPO HA-2a batteriaFunziona. 24 bit/192 kHz e 96 kHz riprodotti senza ricampionamento
Xperia PAndroid 4.1Hidizs S9 Proalimentato via busNon riconosciuto. Il telefono non riesce a fornire abbastanza energia
URBANO L03Android 4.4OPPO HA-2a batteriaNon funziona. Android dichiara il supporto USB host, ma il telefono non fa da host tramite OTG
AQUOS CRYSTAL 305SHAndroid 4.4—Non funziona. Nessun supporto USB host
Xperia goAndroid 4.1OPPO HA-2a batteriaFunziona
Xperia goAndroid 4.1Hidizs S9 Proalimentato via busNon riconosciuto. Il telefono non riesce a fornire abbastanza energia
Galaxy A41Android 12Hidizs S9 Proalimentato via busFunziona. Nessuna interruzione, nemmeno passando da 24 bit/192 kHz a 44.1 kHz
Xperia XA1 PlusAndroid 8.0Hidizs S9 Proalimentato via busFunziona

DAC USB e telefoni: perché i risultati variano

Il comportamento dell’uscita diretta al DAC USB dipende dal telefono e dal DAC. La parte del telefono che funge da host USB (il controller host) varia a seconda dell’epoca e del produttore, e queste differenze emergono soprattutto nei trasferimenti isocroni, in cui l’audio deve scorrere a ritmo costante e senza vuoti. Anche i DAC differiscono: quanto spesso ricevono l’audio, come comunicano la frequenza che desiderano e da dove prendono l’alimentazione. reTONE non fa distinzioni in base al modello di telefono. Misura ciò che accade realmente al collegamento e si adatta. Nella tabella seguente, musb, EHCI e xHCI sono stati provati su telefoni reali; gli altri si basano sulla documentazione pubblicata.

Famiglia di controllerProblemi comuniCosa fa reTONE
musbAlcuni telefoni del 2010–2013 circa (TI, ST-Ericsson, MediaTek meno recenti)I vuoti tra i trasferimenti lasciano il DAC leggermente a corto di dati (crepitii, interruzioni)Misura l’intervallo di ritorno reale e invia più dati per compensare la mancanza
EHCIQualcomm meno recenti, Tegra, alcuni ExynosI completamenti tornano a gruppi; se resta indietro, alcuni dati vengono saltatiValuta in base a una media di lungo periodo
DWC2Rockchip meno recenti, alcuni tablet Kirin e AmlogicI dati non allineati a 4 byte possono causare rumorePreferisce i formati a 32 bit (4 byte)
xHCIQuasi tutti i telefoni USB-C (dal 2015 circa)I completamenti tornano a gruppi; i ritardi fanno saltare datiValuta in base a una media di lungo periodo e mantiene in coda abbastanza dati in anticipo
MediaTek xHCITelefoni MediaTek recentiL’allocazione rigida della banda può rifiutare le frequenze di campionamento elevateLe frequenze rifiutate vengono convertite da reTONE nella frequenza immediatamente inferiore che il DAC accetta (dalla 0.92.68; non abbiamo ancora visto un rifiuto su un telefono reale)
  • Intervallo di servizio: la maggior parte dei DAC riceve audio ogni 0.125 ms; alcuni ogni 0.25 ms o 1 ms. reTONE dimensiona ogni pacchetto di conseguenza.
  • Feedback della frequenza: la maggior parte dei DAC indica al telefono a che velocità inviare (modalità asincrona), e il formato di questa segnalazione varia da dispositivo a dispositivo. reTONE riconosce automaticamente la maggior parte di questi formati e vi si adatta (dalla 0.88.0). Alcuni non hanno feedback e seguono invece la frequenza del telefono (modalità adattiva). Alcuni DAC asincroni che segnalano la frequenza tramite il flusso di registrazione (feedback implicito) non sono ancora supportati.
  • Alimentazione: alcuni DAC hanno una propria batteria o alimentazione; i DAC alimentati via bus funzionano solo con l’energia del telefono e potrebbero non essere riconosciuti dai telefoni più vecchi che non ne forniscono abbastanza. Anche un DAC a batteria può ricaricarsi dal telefono e scaricarlo più in fretta.
  • DSD: la maggior parte dei DAC che accettano il DSD nativo usa la stessa disposizione (32 bit, big-endian), ma ci sono eccezioni.

Impostazioni audio del produttore

“Sound” nel menu in basso apre la schermata delle impostazioni audio del produttore, se il telefono ne ha una, altrimenti le impostazioni audio di Android. Può scegliere quale schermata si apre con l’impostazione “Sound settings”.

TelefonoSchermata aperta
SHARP AQUOS CRYSTAL 305SHHarman Clari-Fi/LiveStage
KYOCERA URBANO L03 (KYY23)Dolby
Sony Xperia PEffetti audio (Equalizzatore, ClearBass, VPT, xLOUD e altri)
LG Android One X5Qualità del suono ed effetti (Hi-Fi Quad DAC, filtro digitale, DTS:X e altri)
Samsung Galaxy S8SoundAlive
Sony Xperia XA1 PlusImpostazioni audio di Sony

Se le impostazioni del produttore si applichino alla riproduzione di reTONE dipende dal telefono.

Cosa non fa

  • Non ci sono equalizzatore, crossfade né visualizzazione della forma d’onda. reTONE mette la leggerezza al primo posto e non applica effetti al suono. È disponibile il ReplayGain (livellare il volume usando i valori memorizzati nei tag); è disattivato per impostazione predefinita, non riscrive i file e si limita ad abbassare il volume di riproduzione.
  • reTONE non riproduce direttamente lo streaming. Il suo ruolo si ferma all’apertura dell’app di streaming, e la riproduzione e la sua qualità audio dipendono da quell’app e dal telefono.
  • Per impostazione predefinita reTONE non usa affatto la rete. Si connette solo se attiva “Network features” nelle impostazioni, e anche allora solo quando lo chiede Lei o per i controlli che ha scelto. Mentre la condivisione è attiva, accetta anche connessioni dai telefoni che ha autorizzato. Non raccoglie alcun dato su di Lei.
  • I controlli da Android Auto o Wear OS non sono supportati. (I controlli di riproduzione nelle notifiche, nella schermata di blocco di Android e dai dispositivi Bluetooth sono supportati dalla 0.87.0.)
  • Il motore di reTONE non può riprodurre DFF compressi in DST, APE o WMA Lossless, e non è previsto di supportarli. La preghiamo di convertirli in FLAC o in un formato simile.
  • Non funziona su Android 3.x o versioni precedenti.
  • Sui telefoni senza supporto USB host (OTG), l’uscita diretta al DAC USB non è disponibile. L’impostazione “USB DAC direct output” appare in grigio, con il messaggio “This device does not support USB devices.”
  • Le combinazioni di telefono e DAC provate con l’uscita diretta al DAC USB sono limitate. Non abbiamo verificato se altri telefoni o DAC funzionino. Alcuni telefoni dichiarano ad Android il supporto USB host ma non riescono a fare da host tramite OTG. Le combinazioni provate sono elencate in “Uscita diretta al DAC USB: combinazioni provate”.
  • Il DoP non è supportato. Il DSD nativo richiede un DAC che supporti il DSD nativo e consenta il controllo del volume via USB. Con gli altri DAC, il DSD viene convertito in PCM prima dell’invio.
  • Mentre è in uso l’uscita diretta al DAC USB, l’audio delle altre app non passa dal DAC USB. Viene riprodotto dall’altoparlante del telefono.
  • Con l’altoparlante integrato o la presa per le cuffie non possiamo garantire un’uscita bit-perfect, perché le app non hanno modo di verificare come il telefono emetta davvero l’audio. Con un DAC USB, BIT-PERFECT compare solo quando le condizioni sono soddisfatte.
  • reTONE non modifica il percorso audio verso il DAC integrato del telefono (ad esempio aggirando la conversione della frequenza di campionamento o forzando la riproduzione in offload), perché richiederebbe il root o la firma del produttore del telefono.
  • A schermo spento, tenere premuto un tasto del volume per una variazione continua, o usare i tasti del volume per cambiare brano, non è supportato, perché Android non passa i tasti alle app.
  • La modifica dei tag e l’eliminazione o lo spostamento dei file non sono supportati.
  • Su Android 10 e versioni successive, i brani FLAC, MP3 e altri su una chiavetta USB non compaiono nella libreria, perché Android non li elenca.
  • Alcuni DAC USB asincroni che segnalano la frequenza tramite il flusso di registrazione (feedback implicito) non sono supportati. L’audio può interrompersi ogni qualche decina di secondi o ogni pochi minuti.
  • Su Android 4.0, tra i brani nei formati riprodotti da Android, come MP3 e AAC, c’è una breve interruzione (i formati riprodotti dal motore di reTONE sono senza interruzioni anche su 4.0).