Misurare la latenza effettiva di una scheda audio e di una DAW

A tre anni di distanza dal tutorial che inaugurò l’omologa sezione del forum di Cubase.it, torniamo ad occuparci della latenza, in modo un pò più approfondito.

Abbiamo visto come la latenza sia il lasso di tempo che i convertitori della scheda e il computer impiegano per acquisire, processare un segnale, e restituirlo all’uscita audio della scheda stessa; esiste un modo per calcolare la latenza e, ancor meglio, esiste un modo per accertarsi che la latenza che i costruttori o Cubase promettono sia quella effettiva?

Un calcolo empirico della latenza è abbastanza facile: posto che la nostra scheda campiona a 44.1 Khz, cioè 44.100 campioni al secondo, e che stiamo usando un buffer ASIO di 512 campioni,
l’operazione di riempimento/svuotatura del nostro buffer avverrà 44.100/512 cioè circa 86 volte in un secondo, il che significa che un ciclo durerà 1000 (ms.)/86 (cicli), vale a dire 11,62 ms..

Naturalmente ci sono DUE convertitori in una scheda audio, per cui avremo una latenza in ingresso e una in uscita che si sommano ai fini della latenza totale. Il treno di campioni in arrivo viene frazionato in pacchetti (buffer) che vengono letti a blocchi. Facciamo il classico esempio del lavandino che si riempie e si svuota allo stesso tempo: per mantenere un uscita costante di acqua, ci deve essere sempre acqua nel lavandino; se per qualche motivo il lavandino rimane vuoto per un momento, il flusso in uscita si interromperà. Il rubinetto è il convertitore analogico digitale, ADC, che garantisce un flusso di campioni al lavandino (buffer) il quale lo convoglia al programma. Se il flusso non è costante, si verificano errori durante la codifica del segnale; questo principio è adottato in vari campi, ad esempio dei lettori cd delle autoradio per evitare i salti del cd dovuti ai sobbalzi dell’auto, o nel sistema di scrittura dei CD nei computer dove, nei primi esemplari, un’interruzione del flusso dei dati, dovuta per esempio alla scarsa velocità di lettura del lettore cd, portava al fallimento della scrittura stessa.

Oltre alla dimensione del buffer, altri fattori possono intervenire a modificare la latenza: principalmente i drivers ASIO e la potenza di calcolo del computer. Buffer grossi vogliono dire latenza più alta, ma meno cicli e quindi un lavoro minore per il processore; al contrario un buffer piccolo assicura una latenza molto bassa, al prezzo di maggior lavoro della CPU per gestire le operazioni più rapide di svuotamento/riempimento del buffer stesso.

C’è poi un ultimo fattore da prendere in considerazione: ogni volta che utilizziamo un plugin, fosse anche un equalizzatore di canale o il volume della traccia, o peggio che mai un’automazione, aumentiamo il carico di lavoro della CPU e quindi introduciamo una ulteriore latenza. Logicamente un equalizzatore avrà un carico di lavoro per la CPU molto inferiore di un riverbero a convoluzione, quindi introdurrà meno latenza di questo; ci troveremmo quindi ad avere una serie di ritardi diversi da traccia a traccia a seconda del tipo di plugin impiegato! Cubase risolve il problema con  una gestione automatica del riallineamento delle latenze (naturalmente al valore più alto).

Veniamo dunque al test:

Il test è stato fatto su tre diverse schede audio, una M-audio Firewire 1814, una Behringer BCA 2000 USB 2.0 e una Steinberg CI 2, USB 1.1.

Questo per capire se il tipo di connessione possa giocare un ruolo nella latenza. È stato usato un progetto a 44.1 Khz/16 bit con un buffer di 128 campioni.

Per iniziare, occorre definire la modalità di misura; nella pagina Periferiche/Impostazioni periferiche/VST Audiosystem troviamo riportata la latenza calcolata da Cubase ad un determinato valore di buffer. Nel nostro caso (il primo test viene effettuato sulla M-Audio 1814) questo valore è 5,351 ms. sia per l’ingresso che per l’uscita.

Latenza Fig 02

Figura 2

Come fare a calcolare il valore effettivo?

Ho generato tramite la funzione Signal Generator di Wavelab una sinusoide molto corta, della durata di due cicli per circa 9 ms., all’atto pratico un rumore impulsivo. Un  metodo simile a quello che viene impiegato per calcolare gli impulsi dei riverberi a convoluzione.

Ho creato nella pagina Connessioni VST due bus mono di ingresso, assegnati agli inputs 1 e 2, e due bus mono di uscita, assegnati alle uscite fisiche 1 e 2 della scheda.

L’impulso viene caricato sulla traccia 1, con l’ingresso di registrazione scollegato, il cui output è il bus di uscita 1; ho collegato fisicamente con un jack l’uscita fisica 1 della scheda con l’ingresso 1.

Ho quindi creato una nuova traccia, che ha come ingresso di registrazione l’input 1 e come uscita il bus 2; il monitor di traccia di questa traccia è attivato.

Per ultimo, ho creato una terza traccia, con ingresso di registrazione l’input 2 e nessun bus di uscita (per evitare il possibile feedback), su cui verrà riregistrato l’impulso ritardato della latenza generata dal monitor di traccia della traccia 2.

Latenza Fig 03

Figura 3

Sembra un pò cervellotico? L’impulso esce dalla traccia 1 attraverso l’uscita 1 e rientra nella scheda tramite l’ingresso 1, da questo viene indirizzato alla traccia 2 che, essendo in monitor, lo restituirà al suo bus di uscita con un ritardo pari alla latenza; a questo punto, facendo rientrare nuovamente l’impulso ritardato, tramite l’uscita 2 della scheda, nell’ingresso 2, lo riregistreremo nel programma. La differenza temporale sarà così visibile direttamente confrontando il punto di start dei due campioni.

Latenza Fig 04

Figura 4

A questo punto, esporto il file come file stereo, mettendo a sinistra l’impulso originale e a destra quello riregistrato, e importo in Wavelab per una misurazione più accurata del ritardo effettivo: 11,746 ms.

Latenza Fig 05

Figura 5

se consideriamo il valore indicato da Cubase, 5,371, il risultato è abbastanza congruo ( latenza di uscita + latenza di ingresso 5,371 x 2  =  10,742)

La cosa interessante è che in questo modo è possibile misurare la latenza dei plugins.

Mettendo in insert nella traccia 2 T-Racks 3, ad esempio, si ottiene un valore reale totale di ben 458 ms. (il che fa pensare che sia piuttosto pesantino), mentre REVerence totalizza un lusinghiero 19,819 ms., cioè una latenza propria di soli 8 ms., e Amplitube 2  11,701 ms., cioè praticamente un’elaborazione istantanea (qualche centesimo di ms. in più o in meno può anche essere dovuto ad errori di codifica della scheda o semplicemente a markers collocati male dal sottoscritto!).

Se passiamo alla scheda Behringer BCA 2000, le impostazioni di Cubase mostrano una latenza di ingresso di 4.989 ms. e una di uscita di 11.565 ms. (tiratina di orecchie agli ingegneri Behringer), mentre il valore reale è di 17,778 ms., grossomodo pari alla latenza totale indicata, 16,554. L’entità dello scarto è paragonabile alla 1814.

Esaminiamo per ultima la CI 2, trovando un valore teorico di 5,034 ms. per l’ingresso, e 6,757 per l’uscita; il valore reale misurato è 11,837 ms., a fronte di un totale teorico di  11,791. malgrado la piccola discrepanza tra valore teorico di ingresso e di uscita, sembrerebbe la scheda con i valori più realistici.

In conclusione, al netto dei possibili errori dell’operatore e di calcolo del PC (in teoria, avrei dovuto ripetere il test un certo numero di volte per avere statisticamente i valori medi),  mi sento comunque di affermare che:

  • il bus di comunicazione fra la scheda e il computer è ininfluente ai fini del calcolo della latenza;
  • in genere, il calcolo teorico è abbastanza accurato, e quindi può tranquillamente essere preso per buono (differenze di un ms., o pochi cents, mi sembrano del tutto irrilevanti).

Se volete sbizzarrirvi a provare la latenza reale della vostra scheda e dei vostri plugins preferiti, siete i ben accetti!

Postate i vostri esperimenti e potremo raccoglierne una casistica più generale.

cubaser

Valerio Nigrelli inizia prestissimo a farsi le ossa nei service audio scaricando furgoni di attrezzature. Appassionato di home recording lavora nel campo ormai da circa 20 anni. Dal giugno del 2005 ha raggiunto col nickname cubaser (visto il suo sviscerato amore per questo software) la comunità dei forum di cubase.it.