Lezione 6
Uso delle variabili di controllo
Programmazione timbrica - Prof. Luca A. Ludovico
Introduzione
• Durante l’esercitazione scorsa, si sono visti esempi semplici di
strumenti musicali (generatori di sinusoidi) il cui comportamento era
predefinito (ampiezza e frequenza prefissati) o al più reso parametrico
e definito a init-time.
• Introducendo l’utilizzo delle variabili di controllo – il cui valore viene
ricalcolato a k-rate – sarà possibile far variare il comportamento dello
strumento durante l’emissione dell’evento sonoro. Ci si concentrerà
dunque sulla sezione di orchestra.
• Si ricorda che le variabili di controllo:
–
–
–
vengono adottate quando la risoluzione del parametro da calcolare non deve essere
elevata quanto quella dell’output audio
fanno risparmiare tempo di calcolo
hanno una convenzione di naming per cui le etichette identificative iniziano con k
Programmazione timbrica - Prof. Luca A. Ludovico
Uso delle variabili di controllo
Interpolazione lineare: opcode line
• Per generare un’interpolazione lineare all’interno di un instrument
block dell’orchestra si può usare l’opcode line.
• Sintassi:
ares line ia, idur, ib
kres line ia, idur, ib
ove ia è il valore iniziale dell’interpolazione e ib è il valore assunto
dopo idur secondi.
• Attenzione: ib non è (necessariamente) il valore finale che assume la
variabile.
–
–
Se infatti la durata dell’emissione dell’evento sonoro è inferiore a idur,
l’interpolazione viene interrotta.
Se invece è superiore, vengono calcolati nuovi valori sulla base della pendenza
della retta (quindi l’interpolazione prosegue oltre idur).
Programmazione timbrica - Prof. Luca A. Ludovico
Uso delle variabili di controllo
Interpolazione esponenziale: opcode expon
• Per generare un’interpolazione esponenziale all’interno di un
instrument block dell’orchestra si può usare l’opcode expon.
• Sintassi:
ares expon ia, idur, ib
kres expon ia, idur, ib
ove ia è il valore iniziale dell’interpolazione e ib è il valore assunto
dopo idur secondi.
• Ancora una volta, ib non è (necessariamente) il valore finale che
assume la variabile.
• Attenzione: non sono ammessi valori nulli. Si può ovviare
all’inconveniente usando valori piccoli a piacere (ad es. 0.0001).
Programmazione timbrica - Prof. Luca A. Ludovico
Uso delle variabili di controllo
Esempi di utilizzo
• E’ possibile creare uno strumento che fa variare l’ampiezza della
sinusoide per avere un decadimento lineare a partire dal valore
impostato come parametro in ingresso.
Scegliendo opportunamente la valorizzazione di kr nell’header si
determina la risoluzione delle variabili di controllo.
Esempio: → 06_01_kamplitude.csd
• E’ possibile creare uno strumento che, data in ingresso un’altezza
espressa in Hz, generi in uscita una sinusoide che glissa fino alla metà
della suddetta frequenza con interpolazione esponenziale.
Il glissando suona più naturale in quanto la percezione delle frequenze
(e la loro mappatura su semitoni «uguali») ha una logica logaritmica.
Esempio: → 06_02_kfreq.csd
Programmazione timbrica - Prof. Luca A. Ludovico
Uso delle variabili di controllo
Interpolazione a segmenti: linseg ed expseg
• L’opcode linseg disegna una serie di segmenti di retta tra i punti
specificati. La variante a interpolazione esponenziale è expseg.
• Sintassi:
ares linseg ia, idur1, ib [, idur2] [, ic] [...]
kres linseg ia, idur1, ib [, idur2] [, ic] [...]
ove ia è il valore iniziale, e ib, ic ecc. sono i valori rispettivamente
raggiunti dopo idur1, idur2 ecc. Secondi
• L’ultimo segmento, con la propria pendenza, viene mantenuto
indefinitamente finché si prolunga l’esecuzione dell’evento sonoro.
Sono consentiti punti di discontinuità, ossia valori distinti separati da
idurn = 0.
• Esempio: → 06_03_segments.csd
Programmazione timbrica - Prof. Luca A. Ludovico
Uso delle variabili di controllo
Inviluppi d’ampiezza: opcode linen
• L’opcode linen permette di specificare un valore di riferimento
(tipicamente l’ampiezza di un segnale), la durata complessiva
dell’inviluppo, il tempo di raggiungimento del valore a regime e il
tempo di decadimento del valore a 0.
• Sintassi:
ares linen xamp, irise, idur, idec
kres linen kamp, irise, idur, idec
• Possibile applicazione: inviluppo d’ampiezza tipico delle note
musicali, in cui si riconosce una fase crescente (attack), una fase
costante (sustain) e una fase calante (decay).
• Esempio: → 06_04_amplitude_envelope.csd
Programmazione timbrica - Prof. Luca A. Ludovico
Uso delle variabili di controllo
Osservazione: ampiezze negative
•
Cosa succede quando si utilizza per il parametro di ampiezza di una sinusoide
un’interpolazione che assume valori negativi (in quanto esplicitamente indicati o come
risultato del prosieguo di un’interpolazione)?
•
Si genera una
sinusoide con picchi
prima negativi e poi
positivi, quindi una
sinusoide in
controfase.
•
A parte il punto di
discontinuità (che
comunque si
raggiunge ad
ampiezza 0), il nostro
orecchio non è
sensibile alla fase.
Programmazione timbrica - Prof. Luca A. Ludovico
Uso delle variabili di controllo
ESERCIZIO
Si scrivano due strumenti nell’orchestra che implementano un
comportamento simile per quanto riguarda l’inviluppo
dell’ampiezza delle note (sinusoidi pure).
Tale inviluppo deve essere trapezoidale, con una fase crescente
che si prolunga per ¼ della nota, la fase costante per ¼ della
nota e la fase decrescente per il restante ½ della nota.
I due strumenti devono implementare tale comportamento
rispettivamente facendo uso dell’opcode linseg e dell’opcode
linen.
Programmazione timbrica - Prof. Luca A. Ludovico
Uso delle variabili di controllo
Inizializzazione delle variabili di controllo
• Come visto durante l’esercitazione, inizializzare una variabile da
ricalcolare a init-time può essere svolto indifferentemente tramite
l’operatore = o tramite la parola riservata init.
In entrambi i casi, il right value (costante, variabile, espressione)
viene assegnato al left value (variabile di inizializzazione).
• Nel caso di variabili di controllo, il comportamento di = e init invece
differisce:
– init agisce solo all’istante di calcolo delle variabili di inizializzazione, dopo
di che viene ignorato;
– al contrario, l’operatore = effettua l’assegnamento a ogni passo di
ricalcolo delle variabili di controllo.
• Esempio: → 06_05_initialize.csd
Programmazione timbrica - Prof. Luca A. Ludovico
Uso delle variabili di controllo
Scarica

Presentazione del corso