Lezione 16 Analisi a eterodina e predizione lineare Programmazione timbrica - Prof. Luca A. Ludovico Analisi e risintesi in Csound • Esistono numerosi metodi e algoritmi di analisi e risintesi. • Csound ne supporta nativamente 3: – Phase vocoder (basato su FFT) – Analisi con filtro a eterodina – Predizione lineare, o LPC • L’analisi con PVANAL è adatta per qualsiasi tipo di suono, a spettro armonico o inarmonico, ma è lenta nella risintesi con pvoc. Programmazione timbrica - Prof. Luca A. Ludovico Analisi e risintesi: analisi a eterodina e predizione lineare Analisi con filtro a eterodina • L’analisi con filtro a eterodina ricerca un certo numero di componenti armoniche, stabilito dall’utente, e per ogni armonica misura l’ampiezza e la frequenza con un intervallo di tempo anch’esso stabilito dall’utente. • Misurando anche la frequenza, l’analisi è in grado di seguire anche le componenti non perfettamente armoniche, come spesso accade nella fase iniziale di emissione di un suono. • Al contrario della sintesi e risintesi con phase vocoder, in questo caso l’analisi con HETRO è adatta solo a spettri armonici o quasi armonici ma la risintesi con adsyn è molto rapida. Programmazione timbrica - Prof. Luca A. Ludovico Analisi e risintesi: analisi a eterodina e predizione lineare Analisi con HETRO • Anche HETRO, come PVANAL e LPANAL, appartiene alla famiglia di Analysis File Generation di Csound. • Il suo obiettivo è decomporre un file audio in ingresso in componenti sinusoidali. Il file generato servirà poi come argomento dell’opcode Csound di generazione del suono chiamato adsyn. • Sintassi: csound -U hetro [flags] infilename outfilename hetro [flags] infilename outfilename • Tra identificatori dei flag e valori loro assegnati lo spazio è sempre opzionale, per tutti i comandi della famiglia di Analysis File Generation. Programmazione timbrica - Prof. Luca A. Ludovico Analisi e risintesi: analisi a eterodina e predizione lineare Flag per HETRO -s srate – frequenza di campionamento dell’input (sovrascrive header, se assenti entrambe le indicazioni default = 10000 Hz). Non è richiesto che questo valore sia allineato con l’sr specificato nell’orchestra -c channel – canale analizzato (default = canale 1) -b begin – istante iniziale in secondi del segmento da analizzare (default = 0.00) -d duration – durata in secondi del segmento, di default 0.0 che significa l’intero file, valore massimo 32.766 secondi -f begfreq – frequenza iniziale stimata per la fondamentale (default = 100 Hz) -h partials – numero di armoniche ricercato (default = 10) -M maxamp – ampiezza di picco sommando tutte le tracce concorrenti (default = 32767) -m minamp – soglia minima al di sotto della quale una coppia ampiezze/frequenza viene ignorata nella somma risultante. Valori tipici: 128 (-48dB), 64 (-54 dB), 32 (-60dB), 0 (nessuna soglia). Default = 64. -n brkpts – numero iniziale di punti di analisi equidistribuiti per ciascuna traccia di ampiezza/frequenza, prima dell’applicazione delle soglie (default = 256) -l cutfreq – usa passabasso Butterworth di 3o ordine con freq. di taglio cutfreq (in Hz) anziché il filtro a pettine (default = 0, ossia non usare) Programmazione timbrica - Prof. Luca A. Ludovico Analisi e risintesi: analisi a eterodina e predizione lineare Esempio 1 • Si consideri il comando: hetro -s44100 -b.5 -d2.5 -h16 -M24000 audiofile.test adsynfile7 • Questo comando analizzerà 2.5 secondi del canale 1 di un file chiamato "audiofile.test", registrato a 44.1 kHz, partendo a 0.5 secondi dall’inizio. Nell’analisi si chiede di valutare l’andamento delle prime 16 armoniche del suono. L’ampiezza di picco per la somma è pari a 24000. • Il risultato sarà salvato in un file chiamato "adsynfile7". • I restanti valori, non specificati e quindi impostati al default, sono: – 256 punti di analisi per traccia di frequenza/ampiezza – stima della fondamentale a 100 Hz – soglia minima di ampiezza a -54dB Programmazione timbrica - Prof. Luca A. Ludovico Analisi e risintesi: analisi a eterodina e predizione lineare Esempio 2 • E’ molto importante stabilire un numero congruo di punti di analisi (breakpoint), soprattutto quando i suoni hanno attacco rapido o complesso: un numero troppo piccolo di breakpoint potrebbe semplificare troppo l’analisi, perdendo dati significativi per la risintesi. • Ad esempio, si consideri l’inviluppo d’ampiezza della fondamentale a 430 Hz di un pizzicato di viola, rispettivamente analizzata con –n30 e –n200 (a lato: l’originale, la prima e la seconda analisi) Programmazione timbrica - Prof. Luca A. Ludovico Analisi e risintesi: analisi a eterodina e predizione lineare n = 30, eccessiva semplificazione Il file di analisi prodotto • Il file di output contiene serie temporali di valori di ampiezza e frequenza per ciascuna parziale. • L’informazione è codificata come serie di punti (detti breakpoint) nella forma (time, value, time, value, ....) usando interi a 16 bit nell’intervallo [0..32767]. • Gli istanti temporali sono espressi in millisecondi e le frequenze in Hertz (cps). I dati dei breakpoint sono sempre non negativi, e i valori -1 e -2 implicano l’inizio di una nuova traccia di ampiezza e di frequenza. Una traccia viene sempre conclusa dal valore 32767. Prima di essere scritta, ogni traccia subisce il calcolo delle soglie. • Ciascuna componente parziale viene definita da due insiemi di breakpoint, uno per le ampiezze e uno per le frequenze. Programmazione timbrica - Prof. Luca A. Ludovico Analisi e risintesi: analisi a eterodina e predizione lineare Il file di analisi prodotto Un file di analisi può presentarsi come segue: -1 -2 -1 -2 -2 -2 -1 -1 time1 time1 time1 time1 time1 time1 time1 time1 value1 value1 value1 value1 value1 value1 value1 value1 ... timeK valueK 32767 ... timeL valueL 32767 ... timeM valueM 32767 ... timeN valueN 32767 .......... .......... .......... .......... ; ; ; ; amplitude breakpoints for partial 1 frequency breakpoints for partial 1 amplitude breakpoints for partial 2 frequency breakpoints for partial 2 ; pairable tracks for partials 3 and 4 Si noti come si possono interpolare le sequenze di breakpoint, alternando ampiezze e frequenze per ciascuna traccia e/o elencando tutte le frequenze seguite da tutte le ampiezze o viceversa (se sono in ugual numero, come previsto, si possono ricostruire gli accoppiamenti). Programmazione timbrica - Prof. Luca A. Ludovico Analisi e risintesi: analisi a eterodina e predizione lineare Opcode adsyn • L’opcode adsyn è la controparte di risintesi, interna all’orchestra di Csound, dell’analisi condotta precedentemente con HETRO. La risintesi ha luogo come un insieme additivo di sinusoidi controllate singolarmente, usando un banco di oscillatori. • Sintassi: ares adsyn kamod, kfmod, ksmod, ifilcod ove – kamod è il coefficiente di ampiezza delle parziali – kfmod è il moltiplicatore di frequenza, ricalcolato a k-rate (ad es. 1 = nessuna traspozionione, 1.5 = una quinta sopra, ecc.) – ksmod è il moltiplicatore della velocità di lettura del file di analisi (ad es. 1 = nessuna modifica, 2 = velocità di lettura doppia) – ifilcod è l’identificatore del file di analisi (stringa o numero) Programmazione timbrica - Prof. Luca A. Ludovico Analisi e risintesi: analisi a eterodina e predizione lineare Esempi • Gli esempi sotto riportati richiedono di estrarre dall’archivio ZIP i file audio e di collocarli in un’apposita cartella (ad es. C:\test) per poi invocare il comando di analisi HETRO, con o senza specifici parametri. • Analisi e risintesi con parametri di default (file .het incluso nello ZIP): → 16_01_eterodina_kick.csd • Fine tuning dell’analisi con il commando HETRO, con impostazione esplicita di una frequenza fondamentale all’incirca alla metà di quella reale: "C:\Program Files (x86)\Csound6\bin\hetro" -f420 -n4096 bell.wav bell.het → 16_02_eterodina_campana.csd Programmazione timbrica - Prof. Luca A. Ludovico Analisi e risintesi: analisi a eterodina e predizione lineare Codifica per predizione lineare • La codifica per predizione lineare (linear predictive coding, LPC) viene utilizzata principalmente per la sintesi della voce parlata, ma anche per la voce cantata e per altri suoni. • L’approccio è simile alla sintesi per modelli fisici: si tenta di riprodurre il comportamento del tratto vocale umano partendo da due possibili fonti di eccitazione: – – Eccitazione armonica, prodotta dalle corde vocali e corrispondente ai suoni vocalizzati Eccitazione inarmonica, tipicamente rumore bianco, dato dal flusso d’aria in uscita dai polmoni e corrispondente ai suoni consonantici • In questo caso l’analisi avviene con LPANAL. Il file di analisi ottenuto contiene i dati per guidare un banco di filtri per la risintesi, che ha luogo in Csound attraverso la coppia di opcode lpread/lpreson. Programmazione timbrica - Prof. Luca A. Ludovico Analisi e risintesi: analisi a eterodina e predizione lineare Risultati dell’analisi LPC • Durante la fase di analisi del suono originario, vengono estrapolate per ciascuna finestra di analisi le seguenti caratteristiche: – ampiezza efficace (o RMS) del segnale – individuazione della frequenza fondamentale – errore commesso nel calcolo della frequenza, utile per discriminare tra suoni vocalizzati (errore piccolo) e suoni non vocalizzati (errore grande) – ampiezza efficace dei residui dell’analisi, ossia la misura dell’imprecisione della risintesi effettuata con eccitazione armonica • Anticipazione: queste 4 sequenze di valori verranno riportate a k-rate in uscita dall’opcode lpread, effettuando interpolazione tra i frame letti dal file di analisi. Programmazione timbrica - Prof. Luca A. Ludovico Analisi e risintesi: analisi a eterodina e predizione lineare Analisi con LPANAL • L’analisi con LPANAL effettua sia pitch tracking sia predizione lineare a n poli sullo spettro, producendo in uscita una sequenza di frame ordinati nel tempo con informazioni di controllo per la risintesi Csound. • Sintassi: csound -U lpanal [flags] infilename outfilename lpanal [flags] infilename outfilename • Principali flag: -s srate – frequenza di campionamento dei file audio -c channel – numero del canale da analizzare -b begin, -d duration – inizio e durata in secondi del segmento da analizzare -p npoles – numero di poli per l’analisi (default = 34, max = 50) -h hopsize – num. punti tra frame consecutivi (default = 200, max = 500) -P mincps, -Q maxcps – frequenza minima e massima (in Hz) del pitch tracking. -P0 implica nessun pitch tracking. Più è stretto l’intervallo di pitch, più è accurata la stima. I valori di default sono -P70, -Q200. Programmazione timbrica - Prof. Luca A. Ludovico Analisi e risintesi: analisi a eterodina e predizione lineare Esempi di analisi con LPANAL lpanal -p26 -d2.5 -P100 -Q400 audiofile.test lpfil22 analizza i primi 2.5 secondi di un file audio chiamato "audiofile.test“. Vengono prodotti (sr/200) frame al secondo, essendo 200 l’hopsize di default. Il valore di sr, non essendo specificato, viene letto dall’header del file audio e, in assenza di questo, impostato al valore di default di 10000 Hz. Ogni frame di analisi contiene coefficienti di filtri a 26 poli, e il pitch viene stimato tra i 100 e i 400 Hz. Il file derivante dall’analisi viene salvato come "lpfil22" nella cartella corrente. Programmazione timbrica - Prof. Luca A. Ludovico Analisi e risintesi: analisi a eterodina e predizione lineare Risintesi LPC: opcode lpread • Per la risintesi di file ottenuti con LPANAL sono necessari due opcode Csound: lpread, che legge il file di analisi, e lpreson, che implementa il banco di filtri. Il segnale di eccitazione va fornito dall’esterno. • Sintassi di lpread: krmsr, krmso, kerr, kcps lpread ktimpnt, ifilcod [, inpoles] [, ifrmrate] • Argomenti in ingresso: – ktimpnt – istante di lettura del file di analisi (puntatore), necessariamente positivo ma con possibilità di muoversi avanti e indietro; – ifilcod – identificatore del file di analisi; – inpoles (opzionale, default = 0) – numero di poli nell’analisi. Necessario solo se il file di analisi non ha header, in caso contrario ignorato; – ifrmrate (opzionale, default = 0) – frame rate al secondo nell’analisi. Necessario solo se il file di analisi non ha header, in caso contrario ignorato. Programmazione timbrica - Prof. Luca A. Ludovico Analisi e risintesi: analisi a eterodina e predizione lineare Risintesi LPC: opcode lpread • Sintassi di lpread: krmsr, krmso, kerr, kcps lpread ktimpnt, ifilcod [, inpoles] [, ifrmrate] • Uscite: – krmsr – root mean square (rms) del residuo di analisi – krmso - rms del segnale originale – kerr – segnale di errore normalizzato (tra 0 e 1) derivato durante l’analisi predittiva, basso per materiali intonati (periodici) e alto per rumori – kcps - pitch in Hz • Ad ogni periodo di controllo, lpread interpola i frame adiacenti per determinare in modo più accurato i valori in uscita e l’impostazione dei coefficienti dei filtri passati internamente a lpreson. Programmazione timbrica - Prof. Luca A. Ludovico Analisi e risintesi: analisi a eterodina e predizione lineare Risintesi LPC: opcode lpreson • L’opcode lpreson risintetizza un segnale partendo dai dati passati internamente da un precedente opcode lpread. In generale, lpreson permette di controllare contenuto tempo-variante e modellazione spettrale di un segnale composto attraverso il contenuto spettrale dinamico di un altro segnale. • Ci può essere un numero arbitrario di coppie lpread/lpreson in uno strumento o in un’orchestra, e questi opcode possono leggere dallo stesso file di analisi o da file diversi in modo indipendente. • Sintassi: ares lpreson asig • Nella risintesi vocale, l’ingresso intonato di lpreson è un segnale periodico a banda ampia o un treno di impulse ottenuto tramite buzz, mentre la sorgente non intonata viene prodotta con rand. Programmazione timbrica - Prof. Luca A. Ludovico Analisi e risintesi: analisi a eterodina e predizione lineare Esempi • Gli esempi sotto riportati richiedono di estrarre dall’archivio ZIP i file audio e di collocarli in un’apposita cartella (ad es. C:\test) per poi invocare il comando di analisi LPANAL, con o senza specifici parametri. • Orchestra “parlante”: un’orchestra “legge” un messaggio vocale. Il segnale di eccitazione cui si applica il risultato dell’analisi è fornito da un file audio ricco di frequenze). → 16_03_talking_orchestra.csd • Esempio con eccitazione di tipo armonico e non armonico. Richiede l’uso di salti condizionati e incondizionati (vedi prossime lezioni). → 16_04_lpc_vocale.csd Programmazione timbrica - Prof. Luca A. Ludovico Analisi e risintesi: analisi a eterodina e predizione lineare