Lezione 23 Tecniche di sintesi avanzate Programmazione timbrica - Prof. Luca A. Ludovico Sommario della lezione • Nella lezione odierna verranno analizzate principalmente 2 tecniche di sintesi: 1. Sintesi vettoriale 2. Sintesi granulare • Si farà cenno a tecniche avanzate basate sull’uso di specifici opcode, in particolare la sintesi granulare con caricamento di suoni campionati e la sintesi per modelli fisici. Programmazione timbrica - Prof. Luca A. Ludovico Tecniche di sintesi avanzate Sintesi vettoriale • Un metodo semplice per generare suoni a spettro variabile consiste nell’utilizzare - anziché una singola tabella - una dissolvenza incrociata tra tabelle, ciascuna contenente un diverso modello timbrico. Può essere considerata una variante della sintesi additiva. • Esempio semplice: dissolvenza lineare tra 2 timbri Il passaggio tra l’una e l’altra sorgente è dato dal movimento su un segmento di retta che ha per estremi il 100% di un timbro e il 100% dell’altro. →23_01_sintesi_vettoriale_lin.csd • Esempio complesso: quando le sorgenti sono più di 2, il movimento ha luogo su un piano o nello spazio. Nell’esempio si ha movimento ciclico tra 4 sorgenti disposte ai punti cardinali di una circonferenza. →23_02_sintesi_vettoriale_circ.csd Programmazione timbrica - Prof. Luca A. Ludovico Tecniche di sintesi avanzate Sintesi granulare • Il suono in generale è un fenomeno dinamico, in continua evoluzione. L’approccio della sintesi granulare consiste nell’identificare brevi lassi di tempo durante i quali i parametri del suono non variano, e dunque la sensazione di movimento si ottiene attraverso il susseguirsi di brevi momenti di staticità (analogia con i fotogrammi di una pellicola). • La sintesi granulare nasce dalla possibilità di generare un’alta densità di piccoli eventi acustici, detti grani, la cui durata in genere varia da 10 a 100 ms. • La caratteristica di un grano di suono è quella di avere un inviluppo generalmente simmetrico Programmazione timbrica - Prof. Luca A. Ludovico Tecniche di sintesi avanzate Caratteristiche del grano • La caratteristica di un grano di suono è quella di avere un inviluppo generalmente simmetrico (campana di tipo gaussiano, attack-sustain-decay, attack-decay, ecc.). • I grani possono essere: – intervallati da pause, e in tal caso verranno percepiti come eventi singoli; – accostati, dando un senso di continuità, di flusso sonoro ininterrotto al cui interno si percepisce comunque della discontinuità; – parzialmente sovrapposti tra loro, aumentando la sensazione di rugosità del suono. Programmazione timbrica - Prof. Luca A. Ludovico Tecniche di sintesi avanzate Realizzazione in Csound • Un metodo piuttosto complesso per emulare la sintesi granulare è utilizzare la reinizializzazione all’interno del singolo evento sonoro. Attraverso opportuni parametri è possibile impostare il comportamento della sintesi granualare, in merito a: – – – – Inviluppo del grano Durata della fase di attacco e rilascio del grano Ampiezza del grano Frequenza base del grano e percentuale di scostamento randomico dalla frequenza base – Distanza temporale tra grani • Esempio: →23_03_granulare_reinit.csd Programmazione timbrica - Prof. Luca A. Ludovico Tecniche di sintesi avanzate Realizzazione in Csound: opcode grain • Un metodo molto più compatto consiste nell’utilizzare l’opcode grain, dotato di numerosi argomenti per fissarne il comportamento. • Sintassi: ares grain xamp, xpitch, xdens, kampoff, kpitchoff, kgdur, \ igfn, iwfn, imgdur [, igrnd] • Principali argomenti: – xamp – ampiezza di ciascun grano; – xpitch – altezza di ciascun grano. Per usare la frequenza di un suono campionato in ingresso, utilizzare la seguente formula sndsr / ftlen(igfn) ove sndsr è la frequenza di campionamento originaria del suono igfn; – xdens – densità del grano misurata in grani al secondo (può essere costante o variabile, come del resto iI precedenti argomenti); Programmazione timbrica - Prof. Luca A. Ludovico Tecniche di sintesi avanzate Realizzazione in Csound: opcode grain • Sintassi: ares grain xamp, xpitch, xdens, kampoff, kpitchoff, kgdur, \ igfn, iwfn, imgdur [, igrnd] • Altri argomenti: – kampoff – massima deviazione di ampiezza da xamp. Quindi il valore massimo di ampiezza per un grano è xamp + kampoff, mentre il minimo è xamp. Se kampoff è posto a 0, non c’è componente randomica per l’ampiezza dei grani; – kpitchoff – massima deviazione da xpitch in Hz. Le considerazioni sono simili a kampoff; – kgdur – durata del grano in secondi. Il valore massimo dovrebbe essere dichiarato in imgdur. Infatti se kgdur a un certo istante diventa maggiore di imgdur, la durata viene troncata a imgdur. Programmazione timbrica - Prof. Luca A. Ludovico Tecniche di sintesi avanzate Realizzazione in Csound: opcode grain • Sintassi: ares grain xamp, xpitch, xdens, kampoff, kpitchoff, kgdur, \ igfn, iwfn, imgdur [, igrnd] • Altri argomenti: – igfn – l’identificativo della tabella funzione contenente la forma d’onda del grano. Può essere una semplice sinusoide come pure un suono campionato, caricato in tabella tramite GEN01 (ma questo dà numerosi problemi > vedi opcode granule); – iwfn - l’identificativo della tabella funzione contenente l’inviluppo d’ampiezza del grano; – imgdur – massima durata in secondi del grano, cioè il massimo valore che è possibile assegnare a kgdur; – igrnd (opzionale) – se diverso da zero, disattiva la randomizzazione dell’offset nella lettura dalla tabella igfn, cioé tutti i grani partono leggendo l’inizio della tabella igfn anziché una posizione casuale. Programmazione timbrica - Prof. Luca A. Ludovico Tecniche di sintesi avanzate Realizzazione in Csound: opcode granule • Per un controllo ancora più raffinato, e soprattutto per gestire meglio i suoni contenuti in un file audio, è possibile utilizzare l’opcode granule, che rappresenta un’implementazione più recente. Il numero di argomenti associato è molto alto (più di 20). • Esempio di uso di grain con forma d’onda sinusoidale per il grano: →23_04_granulare_grain.csd • Esempio di uso di granule con suono campionato: →23_05_granulare_granule.csd Programmazione timbrica - Prof. Luca A. Ludovico Tecniche di sintesi avanzate Sintesi per modelli fisici • La sintesi per modelli fisici (physical modeling) permette la produzione di suoni con alto grado di similitudine rispetto ai suoni reali, o caratterizzati da elevato realismo anche se non si tratta di imitazioni di timbriche esistenti. • Altre tecniche hanno come obiettivo riprodurre le caratteristiche del suono, mentre la sintesi per modelli fisici parte dalle caratteristiche fisiche dello strumento generatore di suono e ne costruisce un modello matematico. Programmazione timbrica - Prof. Luca A. Ludovico Tecniche di sintesi avanzate Paradigma della massa e della molla Paradigma della massa e della molla (Hiller e Ruiz, 1971) • Si specificano le dimensioni fisiche e le caratteristiche degli oggetti vibranti (lunghezza, larghezza, spessore, massa, elasticità, ecc.). • Si specificano poi le condizioni al contorno, cioè in che modo tali corpi sono vincolati tra loro e ai loro supporti (supposti fissi). • Si specificano le condizioni iniziali, ad es. la posizione di partenza di una corda. • Si applica una eccitazione, descritta matematicamente, e si studia il suo effetto sul sistema tramite equazioni differenziali, ottenendo l’equazione d’onda che descrive il suono risultante. Programmazione timbrica - Prof. Luca A. Ludovico Tecniche di sintesi avanzate Sintesi modale Sintesi modale (Calvet, Laurens e Adrien, 1990) • Premessa: un oggetto vibrante può essere rappresentato come un insieme di sottostrutture semplici (il ponticello del violino, l’archetto, ecc.). • Con questo approccio, ciascuna sottostruttura è caratterizzata da un insieme di dati detti modali, che consistono di due elementi: – – frequenze proprie e coefficienti di smorzamento dei modi di risonanza della struttura; insieme di coordinate che rappresentano la forma dei modi di vibrazione della sottostruttura. • Vantaggio: approccio modulare, che permette ad esempio di modellare una corda di violoncello percossa con mazza di tamburo. Programmazione timbrica - Prof. Luca A. Ludovico Tecniche di sintesi avanzate Modello MSW Modello di McIntyre, Schumacher e Woodhouse (1983) • Studia in dettaglio la nascita e l’evoluzione delle forme d’onda e i meccanismi fisici che le governano. • La sintesi che ne deriva presuppone: – un’eccitazione non lineare (ad es. oscillatore + blocco di distorsione per simulare ancia, che genera un segnale e lo distorce); – un risuonatore lineare (ad es. un filtro di complessità arbitraria). Programmazione timbrica - Prof. Luca A. Ludovico Tecniche di sintesi avanzate Modello a guida d’onda (waveguide) Modello a guida d’onda (Smith, Cook et al., 1982-93) • Ha applicazioni commerciali, essendo alla base dei sintetizzatori Yamaha, Korg e Roland. • E’ molto complesso da trattare, quindi verrà solo citato. • Per approfondimenti: https://en.wikipedia.org/wiki/Digital_waveguide_synthesis Programmazione timbrica - Prof. Luca A. Ludovico Tecniche di sintesi avanzate Algoritmo di Karplus e Strong • Si tratta di uno dei primi algoritmi di sintesi per modelli fisici, o meglio di un precursore. Idea di base: partire da un rumore e operare un filtraggio ricorsivo fino ad ottenere un suono a spettro molto più semplice, al limite una sinusoide. • Vincolo: scarsa potenza computazionale dei microcomputer di inizio anni ‘80. Quindi implementazione semplice ed efficace: – – – – tabella riempita inizialmente da generatore di rumore con valori casuali; lettura circolare da tabella, mandando il valore in uscita; il valore viene anche ritardato di un campione, invertito di segno e sommato al campione successivo, il cui valore viene scritto in tabella; nel tempo il segnale si attenua perdendo armoniche alte fino a scomparire. • La frequenza del suono prodotto dipende dalla lunghezza della tabella e dalla frequenza di campionamento. Programmazione timbrica - Prof. Luca A. Ludovico Tecniche di sintesi avanzate Algoritmo di Karplus e Strong Programmazione timbrica - Prof. Luca A. Ludovico Tecniche di sintesi avanzate Implementazione in Csound: opcode pluck • Csound prevede l’opcode pluck che implementa l’algoritmo di Karplus e Strong con alcuni perfezionamenti. • Sintassi: ares pluck kamp, kcps, icps, ifn, imeth [, iparm1] [, iparm2] – – – – – kamp, kcps – ampiezza e frequenza del suono icps – valore di pitch atteso in Hz, usato per impostare un buffer di 1 ciclo di campioni audio che saranno smorzati nel tempo. Di solito è legato a kcps (ha uguale valore), ma può essere volutamente alterato; ifn – numero di funzione per inizializzare il buffer di decadimento ciclico. Se pari a 0, si utilizza una sequenza random; imeth – metodo di decadimento naturale. Ne esistono 6 predefiniti, numerati da 1 a 6: media semplice, media forzata, percussione, percussione forzata, media pesata, filtro ricorsivo del primo ordine. Si veda l’esempio sotto. Alcuni metodi sfruttano i valori espressi in parm1 e parm2 come argomenti. iparm1, iparm2 (opzionali) – valori il cui significato cambia a seconda del metodo di decadimento naturale prescelto. • Esempio: →23_06_pluck.csd Programmazione timbrica - Prof. Luca A. Ludovico Tecniche di sintesi avanzate