Lezione 10 Sintesi sottrattiva Programmazione timbrica Prof Luca
Lezione 10 Sintesi sottrattiva Programmazione timbrica - Prof. Luca A. Ludovico
Sintesi sottrattiva • Per sintesi sottrattiva si intende un modello di sintesi del suono in cui una sorgente sonora 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. • Il punto di partenza è disporre di un suono complesso, ricco di armoniche, su cui operare attraverso tecniche di filtraggio. • Le principali famiglie di filtri sono: passa-basso, passa-alto, passa-banda e sopprimi-banda. Programmazione timbrica - Prof. Luca A. Ludovico Sintesi sottrattiva
Cenni storici • Nella musica elettronica degli anni ‘ 50 si usavano: – passa-banda a frequenze di taglio fisse, con larghezza di banda di 1 ottava o 1/3 di ottava; – 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=3 tp 05 zqy. ECY Programmazione timbrica - Prof. Luca A. Ludovico Sintesi sottrattiva
Rumore bianco • Rumore bianco: suono che contiene tutte le frequenze udibili con la stessa ampiezza. • Il nome proviene da un’analogia con l’ottica, ove il bianco è il colore che contiene tutti i colori dello spettro visibile. • È una tipologia di suono ampiamente utilizzata nella sintesi audio, sia come oggetto a filtraggio sia per ricreare strumenti a percussione come piatti o rullanti che hanno un alto contenuto di rumore a livello frequenziale. Programmazione timbrica - Prof. Luca A. Ludovico Sintesi sottrattiva
Spettro del rumore bianco Programmazione timbrica - Prof. Luca A. Ludovico Sintesi sottrattiva
Rumore colorato Si parla di rumore colorato quando si ha prevalenza nelle ampiezze di alcune frequenze. Ad esempio, nel rumore rosa e ancor più nel rumore rosso (o marrone) sono prevalenti le basse frequenze. Nel diagramma a lato si presti particolare attenzione alle pendenze. Si è scelto di normalizzare in modo che gli spettri abbiano uguale valore intorno a 1 k. Hz. Programmazione timbrica - Prof. Luca A. Ludovico Sintesi sottrattiva
Come generare rumore bianco in Csound • Per generare rumore bianco è necessario un generatore di sequenze (pseudo)casuali di numeri, che vanno interpretate come ampiezze istantanee di un’onda sonora. • In pratica, in un suono che contiene esclusivamente rumore bianco, i campioni (ossia i valori da calcolare alla frequenza di campionamento) saranno i valori di tali sequenze. • In tal modo, lo spettro risultante contiene statisticamente tutte le frequenze. Infatti, per ottenere rumore bianco non è necessario che siano presenti in ogni istante tutte le frequenze con pari ampiezza, ma che questo avvenga in un intervallo di tempo di qualche millisecondo, di modo che il nostro orecchio percepisca questo effetto. 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 cosinusoidali 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 è un opcode per la sintesi additiva. Spesso si associa alla sintesi sottrattiva in quanto generatore di suoni complessi. Programmazione timbrica - Prof. Luca A. Ludovico Sintesi sottrattiva
Esempio di uso di buzz • Si noti che questo opcode si sovrappone potenzialmente a diverse GEN già viste (e ad alcune ancora da introdurre), ma al contrario di queste dà la possibilità di rendere dinamico lo spettro. • Se lo spettro è statico: Metodo 1: nell’instrument block nello score a 1 f 1 0 buzz 8192 iamp, ifreq, 3, 1 10 1 Metodo 2 (equivalente): nell’instrument block nello score a 1 f 2 0 oscil 8192 iamp, ifreq, 2 9 1 1 90 2 1 90 3 1 90 • 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 dall’ampiezza variabile con l’ordine dell’armonica. – La differenza rispetto a buzz non sta tanto nella generazione di cosinusoidi (sinusoide sfasata di 90°) quanto nel conferimento di ampiezze variabili. • 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 (GEN 11) – klh è la più bassa componente armonica presente da cui inizia l’alterazione delle ampiezze attraverso moltiplicatori (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. • Osservazione: buzz è un caso particolare di gbuzz con klh = kmul = 1 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: ar 1[, ar 2[, ar 3[, . . . a 24]]] 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’energia di un suono dopo il filtraggio, per questo Csound consente misura e regolazione dell’RMS attraverso opportuni opcode. Programmazione timbrica - Prof. Luca A. Ludovico Sintesi sottrattiva
Opcode RMS • Misurazione dell’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 0 dbfs, se questo è stato impostato nell’header. • L’opcode rms può essere utilizzato anche come inseguitore di inviluppo, leggendo valori istantanei di asig a frequenza kr. 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à ( -6 d. B) – una frequenza quadrupla sarà attenuata circa a ¼ (-12 d. B) – una frequenza ottupla sarà attenuata a circa 1/8 (-18 d. B), ecc. • Osservazione: perché un’attenuazione pari a ½ del valore (espresso come grandezza lineare) si traduce in circa – 6 d. B in scala logaritmica? Programmazione timbrica - Prof. Luca A. Ludovico Sintesi sottrattiva
Il decibel • Il legame tra una grandezza A e la sua misura in d. B Ad. B è Ad. B = 20 log 10 A quindi Ad. B / 20 = log 10 A; e infine A = 10 Ad. B / 20 • Considerando A*d. B = (Adb – 6), è vero che A* ≈ A/2? In virtù della relazione sopra definita: A* = 10 A*d. B/20 = = 10 (Ad. B– 6)/20 = = 10 Ad. B/20 – (6/20) = = 10 Ad. B/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 3 d. B. • 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 (-12 d. B per ottava), un filtro del III ordine tripla (-18 d. B 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. • Tale diagramma 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 grafico, 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 rappresentate in forma logaritmica. Il comportamento apparentemente lineare di alcuni filtri risulta tale per via delle scale adottate. – Ad esempio, risulta graficamente lineare un’attenuazione di 6 d. B 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 lineare equivalente al valore di x espresso in decibel. • Sintassi: ampdb(x) senza alcuna restizione sulla frequenza di calcolo. La sintassi per il passaggio degli argomenti è quella delle funzioni. • Si osservi che 60 d. B = 1000, 66 d. B = 1995. 262, 72 d. B = 3891. 07, 78 d. B = 7943. 279, 84 d. B = 15848. 926, 90 d. B = 31622. 764 Quindi 60 d. B : 90 d. B = 1000 : 31622. 764 • L’opcode complementare ad ampdb è dbamp, che trasforma il valore lineare passato come argomento in un valore espresso in decibel. • Esempio: → 10_04_ampdb. csd Programmazione timbrica - Prof. Luca A. Ludovico Sintesi sottrattiva
Opcode ampdb e dbamp Esempio: → 10_04_ampdb. csd Confronta un ramping lineare sulle ampiezze, espresse in valore assoluto, con un ramping lineare sulle ampiezze espresse in decibel e opportunamente convertite nell’instrument block attraverso ampdb. Programmazione timbrica - Prof. Luca A. Ludovico Sintesi sottrattiva
- Slides: 23