Lezione 10 Sintesi sottrattiva Programmazione timbrica - Prof. Luca A. Ludovico Sintesi sottrattiva • Per sintesi sottrattiva ci si riferisce ad un modello di sintesi sonora nella quale una sorgente sonora, ricca di armoniche, viene filtrata da un punto di vista spettrale "sottraendo" da essa bande di frequenze o singole parziali. Sottrarre significa diminuire o annullare l’ampiezza di alcune componenti. Quindi il punto di partenza è disporre di un suono complesso su cui operare attraverso tecniche di filtraggio. • Le principali famiglie di filtri sono: passa-basso, passa-alto, passabanda e sopprimi-banda. • Storicamente, nella musica elettronica degli anni ‘50 si usavano passa-banda a freq. fisse (con larghezza di banda di 1 ottava o 1/3 di ottava) e passa-basso e passa-alto con frequenza di taglio regolabile – Esempi: Gesang der Jünglinge e Kontakte di K. Stockhausen; Notturno di B. Maderna (il primo suono è ottenuto con il filtro a banda strettissima di Lietti) https://www.youtube.com/watch?v=3tp05zqyECY Programmazione timbrica - Prof. Luca A. Ludovico Sintesi sottrattiva Rumore bianco • Rumore bianco: suono che contiene tutte le frequenze udibili con la stessa ampiezza. – – In analogia con l’ottica, ove il bianco è il colore che contiene tutti i colori dello spettro visibile. Si parla di rumore colorato quando si ha prevalenza nelle ampiezze di alcune frequenze. Ad esempio, nel rumore rosa sono prevalenti le basse frequenze. • In Csound: opcode rand In realtà è un generatore di sequenze casuali di numeri, per cui se queste vengono interpretate come ampiezze istantanee di un’onda sonora lo spettro risultante contiene statisticamente tutte le frequenze. Infatti nel rumore bianco non sono presenti in ogni istante contemporaneamente tutte le frequenze con pari ampiezza, ma in un intervallo di tempo di qualche millisecondo il nostro orecchio le percepisce come tali. Programmazione timbrica - Prof. Luca A. Ludovico Sintesi sottrattiva Opcode rand Programmazione timbrica - Prof. Luca A. Ludovico Sintesi sottrattiva Importanza del seed e del numero di bit • L’impostazione del seed permette di creare sequenze pseudo-casuali che partano da valori sempre diversi. Lasciando il valore di default 0.5 o impostandone uno nell’intervallo [0..1] si ottengono sequenze sempre identiche. • Il numero di bit determina la lunghezza della sequenza di numeri. Con 16 bit si producono sequenze di 2^16 = 65’536 numeri diversi, dopodichè la sequenza si ripeterà uguale. Invece con 31 bit si tratta di 2^31 = 2’147’483’648 numeri diversi. • Considerando sr = 44100 Hz, con 16 bit la sequenza si ripete dopo circa 1,486 secondi (quindi si avverte periodicità), mentre con 31 dopo circa 13 ore e 20 minuti. • Esempio: → 10_01_rand.csd Programmazione timbrica - Prof. Luca A. Ludovico Sintesi sottrattiva Oscillatori complessi: opcode buzz • L’opcode buzz produce in output un insieme di parziali sinusoidali in rapporto armonico e di pari ampiezza. • Sintassi: ares buzz xamp, xcps, knh, ifn [, iphs] ove – – – – – xamp è l’ampiezza xcps è la frequenza knh è il numero totale di armoniche (default = 1, se negativo viene considerato il valore assoluto) ifn è il numero della tabella-funzione contenente una sinusoide, di lunghezza raccomandata pari ad almeno 8192 punti iphs (opzionale, default=0) è la fase iniziale della fondamentale, espressa come frazione di ciclo nell’intervallo [0..1] • Buzz e gbuzz sono opcode da sintesi additiva. Spesso si associano alla sintesi sottrattiva in quanto generatori di suoni complessi. Programmazione timbrica - Prof. Luca A. Ludovico Sintesi sottrattiva Esempio di uso di buzz • Si noti che questo opcode si sovrappone a diverse GEN, già viste o ancora da introdurre, ma fornendo la possibilità di rendere dinamico lo spettro. • Se lo spettro è statico: Metodo 1: nell’instrument block nello score a1 buzz iamp, ifreq, 10, 1 f1 0 8192 10 1 Metodo 2 (equivalente): nell’instrument block nello score a1 oscil iamp, ifreq, 2 f2 0 8192 10 1 1 1 1 1 1 1 1 1 1 • Altro esempio: → 10_02_buzz.csd Programmazione timbrica - Prof. Luca A. Ludovico Sintesi sottrattiva Oscillatori complessi: opcode gbuzz • L’opcode gbuzz produce in output una serie di cosinusoidi in rapporto armonico di ampiezza variabile con l’ordine dell’armonica. La differenza rispetto a buzz non consiste tanto nella generazione di cosinusoidi (una cosinusoide è una sinusoide sfasata di 90°) quanto nell’ampiezza variabile. L’opcode buzz è un caso particolare di gbuzz con klh = kmul = 1; • Sintassi: ares gbuzz xamp, xcps, knh, klh, kmul, ifn [, iphs] ove – – – – xamp, xcps, knh e iphs hanno lo stesso significato e comportamento che in buzz ifn è una tabella di almeno 8192 punti contenente una cosinusoide (GEN11) klh è la più bassa componente armonica presente da cui partire (essendo il coseno una funzione pari, se il valore è negativo si riflette in un valore positivo) kmul specifica il moltiplicatore nella serie di coefficienti di ampiezza. Si tratta di una serie esponenziale: se la k-esima parziale ha coefficiente A, la (k+n)-esima ha coefficiente A * kmuln, con kmul potenzialmente positivo, negativo o nullo, non necessariamente intero e potenzialmente variabile nel tempo. Programmazione timbrica - Prof. Luca A. Ludovico Sintesi sottrattiva Lettura di dati audio: opcode soundin • L’opcode soundin legge dati audio da un dispositivo esterno o da uno stream. Fino alla versione 5.14 era limitato a 24 canali, ora ne gestisce fino a 40. • Sintassi: ar1[, ar2[, ar3[, ... a24]]] \ soundin ifilcod [, iskptim] [, iformat] [, iskipinit] [, ibufsize] – – – – – ifilcod è un intero o una stringa che denotano il file sorgente iskptim (opzionale, default=0) è il tempo in secondi da saltare. Da Csound 5.00 sono ammessi valori negativi, che aggiungono ritardo. iformat (opzionale, default=0) specifica il formato del file audio Altri argomenti opzionali riguardano l’inizializzazione e la dimensione del buffer in campioni mono (default = 2048) Ci deve essere corrispondenza tra il numero di canali e il numero di var audio • Osservazione: l’apertura, la lettura e la chiusura del file in ingresso hanno luogo ad ogni attivazione dello strumento. Programmazione timbrica - Prof. Luca A. Ludovico Sintesi sottrattiva Valore quadratico medio • Il Root Mean Square (RMS), o valore quadratico medio, è il valore efficace di un segnale, ossia il valore che avrebbe un segnale costante di pari potenza media. • Ad esempio, in una sinusoide: 1. 2. 3. 4. Ampiezza di picco (peak) Ampiezza picco-picco (peak to peak) Valore efficace (RMS) Periodo d'onda • Filtrando un suono si riduce l’ampiezza di un certo numero di componenti frequenziali. Può essere difficile prevedere l’ampiezza complessiva di un suono dopo il filtraggio. Programmazione timbrica - Prof. Luca A. Ludovico Sintesi sottrattiva Opcode RMS • Csound mette a disposizione alcuni opcode per la misura e la regolazione dell’ampiezza efficace. • Per l’RMS: kres rms asig [, ihp] [, iskip] ove asig è il segnale in ingresso e kres è il suo valore di RMS (filtrato con un filtro passa-basso la cui frequenza di taglio è regolabile tramite ihp, default = 10 Hz). Il passa-basso serve a rendere la risposta più morbida (valori maggiori di ihp rendono la misura più responsiva). • L’output è un’ampiezza il cui valore assoluto dipende da 0dbfs. • Questo opcode può essere utilizzato anche come inseguitore di inviluppo. Programmazione timbrica - Prof. Luca A. Ludovico Sintesi sottrattiva Opcode gain e balance • L’opcode gain riaggiusta l’ampiezza di un segnale audio in base a un valore di RMS. Questo opcode implica una modifica dell’ampiezza di modo che l’output ares abbia lo stesso RMS di krms. Normalmente rms e gain vengono utilizzati contestualmente. • Sintassi: ares gain asig, krms [, ihp] [, iskip] • Una sintassi compatta per rms e gain (con stesso valore di ihp) è: ares balance asig, acomp [, ihp] [, iskip] che regola l’ampiezza di un segnale in ingresso asig sulla base di un secondo segnale in ingresso acomp. • Esempio: → 10_03_balance.csd Programmazione timbrica - Prof. Luca A. Ludovico Sintesi sottrattiva Attenuazione dei filtri • Secondo quale curva le frequenze al di sopra della frequenza di taglio ft vengono attenuate? Dipende dall’ordine del filtro. • Se il filtro è del I ordine: – una frequenza doppia rispetto a ft viene attenuata circa alla metà (-6dB) – una frequenza quadrupla sarà attenuata circa a ¼ (-12dB) – una frequenza ottupla sarà attenuata a circa 1/8 (-18dB), ecc. • Osservazione: perché un’attenuazione a circa ½ del valore (espresso come grandezza lineare) implica -6dB in scala logaritmica? Programmazione timbrica - Prof. Luca A. Ludovico Sintesi sottrattiva Il decibel • Il legame tra una grandezza A e la sua misura in dB AdB è AdB = 20 log10 A quindi anche A = 10 AdB / 20 • Considerando A*dB = (Adb – 6), è vero che A* ≈ A/2? In virtù della relazione sopra definita: A* = 10 A*dB/20 = = 10 (AdB–6)/20 = = 10 AdB/20 – (6/20) = = 10 AdB/20 / 10 0.3 = = A / 1,995 ≈ A/2 Programmazione timbrica - Prof. Luca A. Ludovico Sintesi sottrattiva Ordine dei filtri • Si osservi in figura la differenza tra il comportamento ideale e quello reale di un filtro. Nei filtri reali (come quelli modellati in Csound) la frequenza di taglio è quella frequenza alla quale si ha attenuazione di 3dB. • Per ottenere curve di attenuazione con pendenza maggiore, si possono utilizzare filtri di ordine superiore. Un filtro del II ordine ad esempio applicherà un’attenuazione doppia (-12dB per ottava), un filtro del III ordine tripla (-18dB per ottava), ecc. Programmazione timbrica - Prof. Luca A. Ludovico Sintesi sottrattiva Diagramma di Bode • Un diagramma di Bode è una rappresentazione grafica della risposta in frequenza di un sistema lineare stazionario, sollecitata da un ingresso di tipo sinusoidale con pulsazione ω al variare di questa. • Un diagramma di Bode si compone solitamente di due grafici, che rappresentano rispettivamente l'ampiezza (o modulo) e la fase della funzione di risposta in frequenza. Noi mostreremo l’influenza dei filtri sugli spettri utilizzando il primo diagramma, che pone in ascissa le frequenze e in ordinata le ampiezze (vedi prossima slide). • Si osservi che normalmente sia le ascisse sia le ordinate sono diagrammate in forma logaritmica. Il comportamento apparentemente lineare tipico di alcuni filtri risulta tale solo sotto questa precisa ipotesi. – Infatti ad esempio risulta graficamente lineare un’attenuazione di 6dB per ottava Programmazione timbrica - Prof. Luca A. Ludovico Sintesi sottrattiva Esempio di diagramma di Bode Rappresentazione frequenza-ampiezza di un filtro passa-basso Si osservi la scala logaritmica utilizzata per le frequenze. Sulle ampiezze la scala è apparentemente lineare, ma si tratta di decibel. Programmazione timbrica - Prof. Luca A. Ludovico Sintesi sottrattiva Opcode ampdb e dbamp • L’opcode ampdb restituisce l’ampiezza equivalente al valore di x espresso in decibel. • Sintassi: ampdb(x) senza alcuna restizione sulla frequenza di calcolo. • Si osservi che 60 dB = 1000, 66 dB = 1995.262, 72 dB = 3891.07, 78 dB = 7943.279, 84 dB = 15848.926, 90 dB = 31622.764 Quindi 60dB : 90 dB = 1000 : 31622.764 • L’opcode complementare, che trasforma valori lineari in valori espressi in decibel, è dbamp(x) • Esempio: → 10_04_ampdb.csd Programmazione timbrica - Prof. Luca A. Ludovico Sintesi sottrattiva