martedì 12 ottobre 2010

Problemi Di latenza della Libreria "Native Instruments - Alicia's Keys": i miei test

Dalla discussione su FACEBOOK sulla libreria in oggetto:
Cercherò scendere un po'più nei dettagli. La premessa è che la latenza se analizzata dal punto di vista personale è un difetto dei sw synth che è avvertita in maniera maggiore o minore a secondo delle abitudini di chi suona. Per suoni percussivi e con un attacco minimo (vedi il piano),ovviamente è molto più avvertibile e fastidiosa; al contrario per un suono di pad dall'attacco non immediato qualche ms in + o in - sono assolutamente innavvertibili.
C'è gente che suona tranquillamente con 20-30 ms di latenza senza avvertirne il disagio; c'è chi superati i 5-6 ms (io sono tra questi) ne avverte fortemente il fastidio. Comunque con un minimo senso di adattamento è possibile suonare anche con una latenza di 80-100 ms, senza avvertire grosse difficoltà ritmiche. Ne sanno qualcosa gli organisti classici dove le canne degli organi possono essere a più di 30 m di distanza, cosa che fa appunto 100 ms di latenza.
Per un pianoforte reale la latenza (il tempo tra l'istante in cui si percuote il tasto e quello in cui si ascolta il suono) è pari a circa 1 ms, nel momento in cui il suono in un ms percorre 34 cm, e le orecchie sono più o meno a quella distanza dalle corde (cm più, cm meno :-)).
In un sintetizzatore HW la latenza è il tempo che intercorre tra quando viene schiacciato il testo e quando prodotto il suono. Idem la definizione per i moduli Synth con input MIDI per i quali occorre aggiungere 1 ms di ritardo dovuto al fatto che il messaggio midi di NOTE ON ha la durata di circa 1 ms (il midi funziona a 31.25 kbits/sec e occorrono tre Byte per il Note ON). Se si analizzano i vari synth Hardware le latenze medie sono attorno ai 3 o al max 4 ms (ho provato con la mia Sy85 o il vecchio Roland D110) e leggendo sui forum tale dato è confermato anche per altri synth.
Passiamo ai sw synth nell'ipotesi in cui ho una scheda Hardware con ingresso MIDI: qui la latenza è la somma
- del ritardo del midi per il messaggio NOte ON (almeno 1 ms + eventuale Jitter)
- il ritardo introddotto dal Bus della scheda Audio (minore di 1 ms per le PCI e PCIEX), mediamente uno o due ms per schede Fireware (IEEE-1394) e spesso qualcosa in più per quelle USB a cui occorre aggiungere l'inevitabile Jitter che nei casi migliori più essere trascurabile e al contrario pesante per configurazioni HW non ottimizzate
- la latenza dovuta al buffer usato dalla scheda Audio. Questa è per SR di 48000 pari alla accoppiata BUFFER-Ritardo pari a 96Sample(2ms), 144Sample(3ms), 240Sample(5ms), 480Sample(10ms), etc, etc
- il tempo che il software impiega Creare il suono del Synth che dipende dal tipo di sintesi, dalla sua implementazione e ovviamente dalla potenza della CPU
Con il metodo che poi accennerò e con la mia configurazione HW (Processore Core2Duo a 2,4 GHz + Scheda Audio PCI EMU1212M + MasterKeyboard (è un piano) Yamaha P155, ottengo con un Buffer di 144 sample (3 ms) una latenza MISURATA pari a 6 ms per software quali il campionatore native instruments Kontakt, 7 ms per software synth quale Native Instrument FM8 e 8 ms per il "vecchio" Korg M1 software.Provando con il buffer minimo , ovvero 96sample(2ms), ottengo sempre 2 ms in meno di latenza, ovvero 4ms per Kontakt, 5ms per FM8 e 6ms per M1
Per misurare la latenza utilizzo un metodo documentato sul web che è in assoluto il più sicuro, ovvero quello di prelevare dal cavo Midi il segnale "audio" degli impulsi binari digitali (avendo cura ad non alzare di molto il volume per non recare danni all'impianto audio) e ovviamente di campionare (a 48000 Hz) suono prodotto + impulso midi. Il risulato è un Wave da cui con un banale sw audio (wavelab nel mio caso) si misura il ritardo tra il momento dell'impulso e la produzione del suono. Per la cronaca, gli impulsi midi sono facilmente riconoscibili e quelli di NOTE ON misurano esattamente 1 ms, come previsto dalla teoria.
Ora passiamo alla libreria Alicia's Keys Piano: procedendo con il buffer di 144 sample (3 ms), valore che con Kontakt che suona un sample di test produce una latenza di 6ms, con il preset Flat di Alicia's Keys Piano ottengo una latenza misurata pari a 26 ms. Ciò è perfettamente coerente con il fatto che visualizzando i vari sample della librerie si vede che tra il Sample Start e l'inizio del suono ci sono all'incirca 20 ms; ciò è ESATTAMENTE il ritardo che si aggiunge ai 6ms dovuti al mio sistema HW+SW e che produce la fastidiosa latenza: 6ms+20ms=26ms.
Non contento sono andato a curiosare sui vari paramente di Editing e ho trovato il parametro Finger Attack - Latency (0 % - 100% con Default= 50%). Bene variando tale paramentro da 50 a 100, ho misurato un incremento di latenza da 26 ms a 36 ms per Finger Attack=100% e un decremento da 26 a 16 ms per Finger Attack=0%. In pratica si riesce a ridurre il ritardo ad un valore più accettabile anche se ancora troppo alto rispetto ai 6ms che potrebbe dare il mio sistema (valore misurato per altre librerie). Sono andato a curiosare negli script per cercare di capire come ridurre ancora tale valore: ho trovato quello che cercavo , ovvero una certa variabile $bq2cx, descritta come "Latency: Select a low number for low latency. Select a high number for a larger part of the original attack of the note to be included." Evidentemente tale parametro incrementa il valore di Start Sample incrementandolo fino al max 10ms; mi sono fermato senza riuscire a trovare la maniera per incrementare questo valore sino ad un max di 20 ms, cosa che risolverebbe il problema. La sintassi dello script è complicata ...e ci sono ben 144 KByte di codice !!!
A proposito:mi sono divertito a crearmi un nuovo piano, prendendo 2 layer della Alicia's Keys (che è una libreria a 8 livelli) e per una ottava correggendo a mano per ogni sample lo start. Per quella ottava la latenza sono riuscita a ridurla ai tanto desiderati 8ms !!! E a suonarlo si sentiva: eccome!

Benny