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
Scarica

Presentazione del corso