Lezione 9
Spazializzazione
Programmazione timbrica - Prof. Luca A. Ludovico
Orchestre stereofoniche: opcode outs
• Finora nell’header: nchnls = 1 → ogni strumento era monofonico.
Opcode per valorizzare il buffer di accumulazione: out avar.
• In Csound è possibile utilizzare un numero n di canali con n > 1. Per le
orchestre stereofoniche: nchnls = 2. Opcode di output: outs, che scrive
dati audio stereo (cioè in un buffer di accumulazione stereo)
• Sintassi: outs asig1, asig2
ove asig1 e asig2 in generale sono totalmente indipendenti tra loro.
• Il tipo di opcode di scrittura dovrebbe tener conto di nchnls. Ma dalla
versione 3.50, Csound cerca di correggere eventuali errori nell’uso
degli opcode autonomamente.
Programmazione timbrica - Prof. Luca A. Ludovico
Spazializzazione
Possibilità fornite dalla stereofonia
In un contesto stereofonico, è possibile:
1. definire uno strumento le cui caratteristiche timbriche variano di
canale in canale, e/o…
2. … considerare un timbro monofonico (ossia le cui caratteristiche
risulterebbero identiche sui due canali) e stabilire il posizionamento
di ogni evento sonoro prodotto sul fronte stereo.
–
Se tale impostazione è fissa per tutta la durata dell’evento sonoro, è possibile
esprimere questa informazione all’interno dello score, attraverso la valorizzazione
di un opportuno pn con n > 3.
–
Se invece si vuole far variare il posizionamento durante l’emissione, bisogna
affidarsi a opportune variabili di controllo o audio all’interno dell’instrument block
dell’orchestra.
• Esempio: → 09_01_2channels.csd
Programmazione timbrica - Prof. Luca A. Ludovico
Spazializzazione
Posizionamento «statico» nel fronte stereo
• Si consideri uno strumento che supporta il posizionamento di ogni
evento sonoro sul fronte stereo in modo statico, ossia senza variazioni
per tutta l’accensione dell’evento stesso.
• Un possibile approccio è calcolare opportunamente la variabile audio
d’uscita e pesarne la presenza sul canale destro e sinistro attraverso
un fattore moltiplicativo.
• Ad esempio, sia p6 il p-field dello score con informazioni sul canale. Ci
consideri una valorizzazione normalizzata sull’intervallo [0..1], ove 0
significa suono presente tutto e solo sul canale sinistro e 1 sul canale
destro. Allora si può scrivere: outs aout * (1 – p6), aout * p6
→ 09_02_stereo_position_1.csd
Programmazione timbrica - Prof. Luca A. Ludovico
Spazializzazione
Osservazioni
• Il metodo descritto è molto semplice, ma non è del tutto
soddisfacente. Infatti, mano a mano che il segnale si avvicina alla
posizione centrale si percepisce un’intensità minore. Questo perché
l’intensità percepita è proporzionale alla potenza del segnale, ossia al
quadrato dell’ampiezza.
• Poiché P = A2:
– se A = 0 allora P = A = A2 = 0 (nessuna differenza rispetto a prima)
– se A = 1 allora P = A = A2 = 1 (nessuna differenza rispetto a prima)
– se però le sorgenti sono 2, e per ciascuna si ha A = 0.5 (segnale al centro),
Psx = Asx2 = 0.52 = 0.25
e analogamente
Pdx = Adx2 = 0.52 = 0.25
quindi Ptot = Psx + Pdx = 0.5, che è la metà della potenza che si
registrerebbe concentrando il segnale su un solo canale.
Programmazione timbrica - Prof. Luca A. Ludovico
Spazializzazione
Posizionamento «statico» nel fronte stereo
• Esistono varie soluzioni al problema.
Proposta semplice ma efficace di Charles Dodge: definire i fattori
moltiplicativi per i canali sinistro e destro, sempre definiti
nell’intervallo [0..1], come la radice quadrata del segnale di controllo
per lo stereo.
• In Csound il calcolo della radice quadrata si effettua tramite la
funzione matematica sqrt (square root).
• Prima:
Ora:
outs
outs
aout * (1 – p6),
aout * sqrt(1 - p6),
aout * p6
aout * sqrt(p6)
Ad esempio, se p6 = 0.5, la radice è circa 0.71 quindi l’attenuazione dovuta al fattore moltiplicativo
è inferiore a 0.5.
→ 09_03_stereo_position_2.csd
Programmazione timbrica - Prof. Luca A. Ludovico
Spazializzazione
Posizionamento «dinamico» nel fronte stereo
• Se si vuole implementare uno strumento che supporta variazioni del
posizionamento di ogni evento sonoro sul fronte stereo durante
l’accensione dell’evento stesso, è necessario basarsi su variabili audio
(presumibilmente sovradimensionate per lo scopo) o – meglio ancora –
su variabili di controllo.
• Ad esempio, si voglia implementare nota per nota un posizionamento
che varia ciclicamente dal canale sinistro al canale destro a una data
frequenza. Deve essere possibile identificare il punto iniziale del
posizionamento stereo, nonché fissare la frequenza nota per nota
all’interno dello score.
• Nell’esempio → 09_04_stereo_circles.csd si affronta prima
quest’ultimo problema (instr 1), per poi introdurre il secondo aspetto
(instr 2).
Programmazione timbrica - Prof. Luca A. Ludovico
Spazializzazione
Quadrifonia, esafonia, ottofonia, …
• Se il formato scelto per l’output li supporta, Csound gestisce un numero
di canali maggiore di 2.
–
–
Ad esempio, i formati WAV e AIFF sono tra quelli che supportano più di 2 canali
Per l’ascolto è però necessario hardware dedicato, ad esempio una scheda audio
multi-canale e un numero adeguato di diffusori. In alternativa, è possibile aprire il
file con un editor di forma d’onda per «vedere» il risultato.
• Casi notevoli
– 4 canali, o quadrifonia: non esiste un’unica disposizione delle casse;
– 6 canali, o esafonia: la configurazione tipica è lo standard surround
5.1 (Dolby Digital AC3, DTS e THX), ma anche altre disposizioni sono
possibili;
– 8 canali, o ottofonia: a parte lo standard cinematografico 7.1 Sony
S.D.D.S., non esiste una disposizione tipica.
Programmazione timbrica - Prof. Luca A. Ludovico
Spazializzazione
Quadrifonia, esafonia, ottofonia, …
• Sintassi in Csound: innanzi tutto, il numero di canali nell’header deve
essere opportunamente valorizzato.
• Negli instrument block, vanno usati gli opcode:
outq asig1, asig2, asig3, asig4
outh asig1, asig2, asig3, asig4, asig5, asig6
outo asig1, asig2, asig3, asig4, asig5, asig6, asig7, asig8
outx asig1, asig2, asig3, asig4, asig5, asig6, asig7, asig8, …, asig16
out32 asig1, asig2, asig3, asig4, asig5, asig6, asig7, asig8, …, asig32
• L’opcode outc scrive in uscita il numero di canali forniti in ingresso.
Ogni canale che supera nchnls viene ignorato. Se invece nchnls è
maggiore, vengono aggiunti degli 0.
• Esempi: → 09_05_fourchannels.csd, 09_06_fivechannels.csd
Programmazione timbrica - Prof. Luca A. Ludovico
Spazializzazione
Output indirizzato al canale n
• Esistono opcode per redirigere il suono su un particolare canale scelto
tra quelli disponibili nel contesto multi-canale corrente.
• La sintassi degli opcode necessari allo scopo prende spunto dal nome
dell’opcode da usare nel contesto multi-canale corrente (quindi outs
per la stereofonia, outq per la quadrifonia, ecc.), ma prevede un
suffisso con il numero di canale su cui operare la redirezione,
numerato a partire da 1. Inoltre, l’argomento in ingresso è uno solo.
• Ad esempio, outs1 avar invia l’uscita al canale stereo 1, e outs2 avar
al canale stereo2. Analogamente, in un contesto di quadrifonia
outq3 avar scrive i dati relativi al canale 3.
• Esempio: → 09_07_incrementalchannels.csd
Programmazione timbrica - Prof. Luca A. Ludovico
Spazializzazione
Output indirizzato al canale n
• L’opcode outch scrive dati audio multicanale con la possibilità per di
controllare il canale di uscita, anche alla frequenza di controllo.
• Sintassi: outch kchan1, asig1 [, kchan2] [, asig2] [...]
ove asig1 viene inviato sul canale individuato – potenzialmente a krate - da kchan1, asig2 su kchan2, e via dicendo.
• Osservazione: il massimo valore ammesso per kchanX dipende da
nchnls. Se kchanX supera nchnls, asigX verrà silenziato. In tal caso,
l’opcode outch segnalerà un warning ma non una condizione di errore.
• Esempio: → 09_08_dynamic_redirect.csd
Programmazione timbrica - Prof. Luca A. Ludovico
Spazializzazione
Simulazione della spazializzazione 3D
• Spazializzazione binaurale (ovvero a due orecchie): metodo di
registrazione e riproduzione 3D del suono per riprodurre in cuffia il più
fedelmente possibile le percezioni acustiche di un ascoltatore situato
nell'ambiente originario di ripresa dell'evento sonoro, mantenendone
le caratteristiche direzionali a 360° sferici.
• Si utilizzano i 2 canali stereo per ricreare lo spazio tridimensionale.
L’ascolto deve avvenire in cuffia, perché i
dettagli dell’immagine spaziale
andrebbero perduti a causa degli effetti
dell’ambiente di ascolto (riverberi,
filtraggi, ecc.)
• Tecnica nota dall’ottocento, ma difficile da
riprodurre prima della diffusione del walkman.
Programmazione timbrica - Prof. Luca A. Ludovico
Spazializzazione
Simulazione della spazializzazione 3D
• Varie tecniche di registrazione tridimensionale:
– due microfoni posti su un sostegno in direzione reciprocamente
divergente, a circa 18 cm di distanza l'uno dall'altro. Tecnica
semplice, ma non tiene conto dell’effetto della fisica della testa;
– utilizzo di una testa di manichino (dummy head), costruita
con dimensioni e materiali atti a riprodurre fedelmente
l'assorbimento sonoro di una vera testa umana e la sua funzione di
separatore naturale tra i due canali uditivi (destro e sinistro). La
testa riproduce con particolare fedeltà la forma dei padiglioni
auricolari e i canali uditivi, all'interno dei quali vengono posti due
microfoni ad alta fedeltà. In tal modo i microfoni captano il suono
come risulta equalizzato e modificato in fase dalla testa, e quindi
nel modo più simile a come l'avrebbe percepito un ascoltatore
reale.
Programmazione timbrica - Prof. Luca A. Ludovico
Spazializzazione
Simulazione della spazializzazione 3D
• Alla base del sistema vi è la riproduzione di una serie di dati
sperimentali attraverso microfoni ad alta fedeltà. I suoni impulsivi
vengono emessi a distanza ed angolazione differente.
• In tal modo si costruisce
una base di dati con i
parametri per il filtraggio
in funzione della direzione
del suono da ricostruire.
• Il modello di testa
artificiale è detto HRTF,
ossia Head-Related
Transfer Function.
Programmazione timbrica - Prof. Luca A. Ludovico
Spazializzazione
Implementazione in Csound: opcode hrtfer
• Sintassi: aleft, aright hrtfer asig, kaz, kelev, “HRTFcompact”
dove
– asig è il segnale audio monofonico da posizionare;
– kaz è il valore di azimuth (posizione orizzontale) in gradi. Valori
positivi rappresentano posizioni sulla destra, valori negativi sulla
sinistra rispetto al punto di vista dell’ascoltatore;
– kelev è il valore di elevazione (posizione verticale) in gradi. Valori
positivi rappresentano posizioni sopra l’orizzonte, negativi sotto
l’orizzonte;
– HRTFcompact è al momento l’unico file supportato che contiene la
funzione di trasferimento. Esso deve essere passato come costante
stringa, denotata da doppi apici.
HRTFcompact si può inoltre ottenere via FTP al seguente link:
ftp://ftp.cs.bath.ac.uk/pub/dream/utilities/Analysis/HRTFcompact
Programmazione timbrica - Prof. Luca A. Ludovico
Spazializzazione
Implementazione in Csound: opcode hrtfer
• Sintassi: aleft, aright
hrtfer
asig, kaz, kelev, “HRTFcompact”
• I segnali di uscita sono contenuti in aleft e aright. Spesso tali valori
devono essere riscalati in ampiezza (attraverso la moltiplicazione per
una costante) per poter risultare apprezzabili.
• Limitazioni:
–
–
Per poter apprezzare la spazializzazione binaurale, il file prodotto deve essere
stereo e deve essere ascoltato in cuffia;
La frequenza di campionamento deve necessariamente valere sr = 44100 Hz, in
quanto il file con la funzione di trasferimento è stato generato a questa frequenza.
• Esempio: → 09_09_hrtf.csd
Programmazione timbrica - Prof. Luca A. Ludovico
Spazializzazione
Scarica

Presentazione del corso