Lezione 9 Spazializzazione Programmazione timbrica Prof Luca A
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 asig 1, asig 2 ove asig 1 e asig 2 in generale sono indipendenti tra loro. • Il tipo di opcode di scrittura dovrebbe tener conto di nchnls; ma, dalla versione 3. 50, Csound corregge autonomamente eventuali incoerenze nell’uso degli opcode. Programmazione timbrica - Prof. Luca A. Ludovico Spazializzazione
Possibilità offerte 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_2 channels. 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 p 6 il p-field dello score con informazioni sul canale. Si 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 – p 6), aout * p 6 → 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 = k. A 2: – se A = 0 allora A 2 = 0 e P = 0 (ossia P = k. A 2 per def. , ma anche P = k. A) – se A = 1 allora A 2 = 1 e P = k (ossia P = k. A 2 per def. , ma anche P = k. A) – Ma per valori intermedi? • Esempio: ciascun canale presenta A = 0. 5 (segnale al centro), Psx = k. Asx 2 = k 0. 52 = 0. 25 k Pdx = k. Adx 2 = k 0. 52 = 0. 25 k quindi Ptot = Psx + Pdx = 0. 5 k, che è la metà della potenza che si percepirebbe 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: imporre 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 aout * (1 – p 6), aout * sqrt(1 - p 6), aout * p 6 aout * sqrt(p 6) Ad esempio, se p 6 = 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 (che presumibilmente risultano sovradimensionate per lo scopo) o 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 f* (indipendente dalla frequenza f della nota). Deve essere possibile identificare il punto iniziale del posizionamento stereo, nonché fissare f* all’interno dello score. → 09_04_stereo_cyclic. csd Programmazione timbrica - Prof. Luca A. Ludovico Spazializzazione
Quadrifonia, esafonia, ottofonia, … • Csound gestisce un numero di canali arbitrario, ben oltre la stereofonia. Il formato di file prodotto deve però supportarli. – Ad esempio, i formati WAV e AIFF sono tra quelli che supportano più di 2 canali – Per l’ascolto è necessario hardware dedicato, ad esempio una scheda audio multicanale e un numero adeguato di diffusori. – E’ 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 standard per i diffusori acustici (solitamente complanari in orizz. o vert. ); – 6 canali, o esafonia: la configurazione tipica è lo standard surround 5. 1 (Dolby Digital AC 3, DTS e THX), ma altre disposizioni sono possibili; – 8 canali, o ottofonia: a parte lo standard cinematografico 7. 1 Sony S. D. D. S. , non esiste una disposizione prefissata. Programmazione timbrica - Prof. Luca A. Ludovico Spazializzazione
Quadrifonia, esafonia, ottofonia, … • In Csound si deve opportunamente impostare il numero di canali nell’header (è quello che fa fede in caso di incoerenza). • Negli instrument block, è bene usare (coerentemente) gli opcode: outq asig 1, asig 2, asig 3, asig 4 outh asig 1, asig 2, asig 3, asig 4, asig 5, asig 6 outo asig 1, asig 2, asig 3, asig 4, asig 5, asig 6, asig 7, asig 8 outx asig 1, asig 2, asig 3, asig 4, asig 5, asig 6, asig 7, asig 8, …, asig 16 out 32 asig 1, asig 2, asig 3, asig 4, asig 5, asig 6, asig 7, asig 8, …, asig 32 • 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 prende spunto dal nome dell’opcode da usare nel contesto 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. Chiaramente, l’argomento in ingresso è uno solo. • Ad esempio, outs 1 avar invia l’uscita al canale stereo 1, e outs 2 avar al canale stereo 2. Analogamente, in un contesto di quadrifonia outq 3 avar redirige i dati di avar sul 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à di controllare il canale di uscita, anche alla frequenza di controllo. L’identificativo di canale è un intero che parte da 1. • Sintassi: outch kchan 1, asig 1 [, kchan 2] [, asig 2] [. . . ] ove asig 1 viene inviato sul canale individuato – potenzialmente a krate – da kchan 1, asig 2 su kchan 2, 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 segnala un warning ma non genera errore. • Esempio: → 09_08_dynamic_redirect. csd Programmazione timbrica - Prof. Luca A. Ludovico Spazializzazione
Simulazione della spazializzazione 3 D • Spazializzazione binaurale: metodo di registrazione e riproduzione 3 D 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’ 800, ma difficile da proporre a un vasto pubblico prima della diffusione del walkman. Programmazione timbrica - Prof. Luca A. Ludovico Spazializzazione
Simulazione della spazializzazione 3 D • 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 3 D • Alla base del sistema vi è la riproduzione di una serie di dati sperimentali catturati 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
Simulazione della spazializzazione 3 D Misurazione di HRTF con manichino Kemar (Knowles Electronics Mannequin for Acustic Research) 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 alla destra, valori negativi alla sinistra del 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 per la funzione di trasferimento. Esso deve essere passato come costante stringa, denotata da doppi apici. HRTFcompact si può ottenere al seguente link: http: //www. csounds. com/manual/html/examples/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
- Slides: 17