Lezione 2
Basi sintattiche: orchestra
Programmazione timbrica - Prof. Luca A. Ludovico
Eventi sonori e silenzi
• Data la sua natura di linguaggio di programmazione
timbrica, in Csound si parla più propriamente di
emissione di eventi sonori che di «note»; infatti:
– non è detto che l’evento corrisponda a un suono riconoscibile
come una nota
– non è detto che l’evento corrisponda a un’unica entità sonora
• Come nella maggior parte dei linguaggi di sintesi e di
performance, non esiste un modo per codificare
esplicitamente le pause (ossia l’assenza di suono): i
silenzi emergono dall’interruzione dell’emissione di
suono
Programmazione timbrica - Prof. Luca A. Ludovico
Basi sintattiche: orchestra
Sorgenti Csound: ORC + SCO vs. CSD
• Un sorgente di CSound si può presentare come coppia di file ORC
e SCO o sotto forma di un unico file CSD diviso in sezioni da tag.
• Le due sezioni più importanti sono gli Instruments e la Score;
questi due termini, quando non esisteva ancora il formato
unificato .csd, davano il nome ai due file sorgenti separati:
.orc (orchestra = strumenti) e .sco (score = partitura).
Il formato unificato è stato introdotto nella versione 3.50.
• Ancora oggi le funzioni del file-orchestra (Instruments) e del filepartitura (Score) sono rimaste invariate: semplicemente, da due
file distinti si è passati a due sezioni di un unico file. Il formato
unificato è infatti nato soltanto per la praticità di lavorare su un
singolo documento. All’interno dei tag, la sintassi è identica.
Programmazione timbrica - Prof. Luca A. Ludovico
Basi sintattiche: orchestra
Template CSD
<CsoundSynthesizer>
<CsOptions>/* opzioni */</CsOptions>
<CsInstruments>
sr = 44100
ksmps = 128
nchnls = 2
0dbfs = 1.0
ORC
CSD
; strumenti
</CsInstruments>
<CsScore>
; partitura
</CsScore>
</CsoundSynthesizer>
Programmazione timbrica - Prof. Luca A. Ludovico
Basi sintattiche: orchestra
SCO
Commenti in Csound
• I commenti si possono inserire secondo diverse modalità, come nella
maggior parte dei linguaggi di programmazione
• Commenti su un’unica riga (terminati dal carattere di ritorno a capo
nel codice): cancelletto # oppure punto e virgola ;
# questo è un commento
; questo è un altro commento
• Commenti multi-riga o parziali in stile C: aperti da /* e chiusi da */
/* questo è un commento
che continua alla riga sottostante */
i1 0 3 /* solo questa parte è commentata */ 5
Programmazione timbrica - Prof. Luca A. Ludovico
Basi sintattiche: orchestra
Le opzioni
• In Csound è possibile invocare dei flag a linea di
comando (command line flags)
• Lo si può fare quando si lancia l’eseguibile Csound a
riga di comando, utilizzando la sintassi
csound [flags] [orchname] [scorename]
csound [flags] [csdfilename]
oppure all’interno dell’elemento opzioni del formato
.csd, in particolare tra le etichette
<CsOptions> </CsOptions>
Programmazione timbrica - Prof. Luca A. Ludovico
Basi sintattiche: orchestra
Le opzioni
• Le opzioni permettono di:
– Variare i parametri del file audio prodotto (ad esempio, generare
campioni a 8 o a 24 bit, produrre file audio senza header ossia in
formato RAW, cambiare il formato del file in OGG o AIFF, …)
– Inserire nel file prodotto i tag id3
– Gestire il comportamento in real time di Csound
– Gestire l’input/output MIDI
– Cambiare le opzioni di visualizzazione e di verbosità
– Configurare e controllare le performance
– …
• Elenco completo dei flag:
http://www.csounds.com/manual/html/CommandFlagsCategory.html
Programmazione timbrica - Prof. Luca A. Ludovico
Basi sintattiche: orchestra
Tornando al template CSD…
<CsoundSynthesizer>
<CsOptions>/* vedi slide precedente */</CsOptions>
<CsInstruments>
sr = 44100
ksmps = 128
nchnls = 2
0dbfs = 1.0
ORC
CSD
; strumenti
</CsInstruments>
<CsScore>
; partitura
</CsScore>
</CsoundSynthesizer>
Programmazione timbrica - Prof. Luca A. Ludovico
Basi sintattiche: orchestra
SCO
Sintassi dell’orchestra
• Un file .orc o la sezione <CsInstruments> di un file .csd contengono:
– Una sezione di intestazione (header), che specifica le opzioni globali per
l’esecuzione da parte degli strumenti
– Una lista di codici operativi definiti dall’utente (user defined opcodes, o
UDO) e di definizioni di strumenti.
• Ciascuna delle tre entità, ossia intestazione, blocchi di definizione
degli strumenti e UDO contengono istruzioni di orchestra (orchestra
statements).
• Un’istruzione di orchestra in Csound ha il formato:
etichetta: risultato opcode argomento1, argomento2, ... ; commenti
Programmazione timbrica - Prof. Luca A. Ludovico
Basi sintattiche: orchestra
Sintassi dell’orchestra
• Un’istruzione di orchestra in Csound ha il formato:
etichetta: risultato opcode argomento1, argomento2, ... ; commenti
• L’etichetta è opzionale e non ha valore in sè, serve solo per operazioni
di go-to. Analogamente, i commenti sono opzionali.
• A seconda della funzione svolta, alcuni opcode non producono output
quindi non hanno un valore-risultato. Altri opcode non richiedono
argomenti in ingresso.
• Ogni istruzione dell’orchestra dovrebbe rimanere su un’unica riga di
codice, essendo terminata dal ritorno a capo (Carriage Return + Line
Feed). Istruzioni lunghe possono comunque essere suddivise grazie al
carattere “\”.
Programmazione timbrica - Prof. Luca A. Ludovico
Basi sintattiche: orchestra
Opcode
• Un opcode determina l’operazione da svolgere. Solitamente un opcode:
–
–
accetta un certo numero di parametri in ingresso – detti anche argomenti – e limitati
a un valore massimo di circa 800;
supporta una variabile in cui depositare il risultato dell’operazione, con una
frequenza di calcolo del risultato prefissata.
• Per quanto riguarda la frequenza di calcolo dei risultati di un opcode,
esistono 4 possibilità:
–
–
una sola volta quando l’orchestra viene impostata (di fatto, un assegnamento
permanente);
una sola volta all’attacco di ciascuna nota (ossia all’istante di inizializzazione, a
frequenza i-rate);
–
una volta per ciclo di controllo durante l’esecuzione della nota (ossia alla frequenza
di controllo k-rate);
–
una volta per calcolo del singolo campione audio (ossia alla frequenza di
campionamento a-rate).
Programmazione timbrica - Prof. Luca A. Ludovico
Basi sintattiche: orchestra
Intestazione del file orchestra
• L’intestazione del file orchestra (orchestra header)
contiene informazioni globali che si applicano a tutti
gli strumenti e definiscono aspetti dell’output Csound.
• Alle volte viene detta instr 0, in quanto si situa
all’inizio del sorgente relativo all’orchestra,
comportandosi però come uno strumento che non
effettua elaborazioni alla frequenza di controllo o di
campionamento.
• Di fatto, l’intestazione consente solo opcode e
istruzioni che operano all’istante di inizializzazione.
Programmazione timbrica - Prof. Luca A. Ludovico
Basi sintattiche: orchestra
Intestazione del file orchestra
• Un’istruzione di intestazione del file orchestra agisce
un’unica volta, all’istante di setup dell’orchestra.
Comunemente si tratta di assegnamento di valori a un
simbolo globale riservato, ad esempio per impostare la
frequenza di campionamento (vedi slide successiva)
• Tutte le istruzioni nell’intestazione appartengono a
uno pseudo-strumento 0, la cui inizializzazione ha
luogo prima di qualsiasi altro strumento all’istante 0
della partitura.
• Qualsiasi istruzione può essere inserita
nell’intestazione, purché sia di sola inizializzazione.
Programmazione timbrica - Prof. Luca A. Ludovico
Basi sintattiche: orchestra
Esempio in formato CSD
<CsInstruments>
; a seguire, alcune tipiche istruzioni di intestazione dell’orchestra
sr = 44100
kr = 4410
ksmps = 10
nchnls = 1
0dbfs = 32767
/* dopo l’intestazione, detta anche instr 0, si definiscono gli strumenti
veri e propri*/
</CsInstruments>
Nota: in formato ORC, sr=44100 sarebbe stata la prima riga.
Programmazione timbrica - Prof. Luca A. Ludovico
Basi sintattiche: orchestra
Le più comuni istruzioni di intestazione
• sr sta per sampling rate ed è la frequenza di campionamento audio espressa
in Hz. Dalla versione 3.46 può essere omessa, calcolandola a partire da kr e
ksmps o – in assenza di tali valori – fissandola al default 44100.
• kr sta per control rate ed è la frequenza di campionamento dei parametri di
controllo espressa in Hz. Dalla versione 3.46 può essere omessa, calcolandola
a partire da sr e ksmps o – in assenza di tali valori – fissandola al default 4410.
• ksmps imposta il numero di campioni per periodo di controllo, e dunque
esprime il rapporto sr/kr. Dalla versione 3.46 può essere omessa,
calcolandola a partire da sr e kr o – in assenza di tali valori – fissandola al
default 10. Deve comunque essere un valore intero.
• nchnls è il numero di canali; 1 per mono, 2 per stereo, 4 per stereofonia, ecc.
Il valore di default è 1.
• 0dbfs imposta il valore di 0 dB per i picchi di ampiezza. E’ opzionale, il valore
di default è 215 – 1 = 32767, congruente con la rappresentazione a 16 bit.
Programmazione timbrica - Prof. Luca A. Ludovico
Basi sintattiche: orchestra
Definizione degli strumenti
• Dopo l’intestazione, in un file o in una sezione orchestra si trovano i blocchi
di definizione degli strumenti.
• Un blocco-strumento comprende istruzioni che impostano valori, controllano
il flusso logico, invocano comandi di elaborazione del segnale che portano a
un output audio.
• Un blocco viene racchiuso dalle seguenti istruzioni:
instr n
/* istruzioni che definiscono il comportamento dello strumento */
endin
• Esempio:
instr 1
aout oscils 10000, 440, 0
out aout
endin
Programmazione timbrica - Prof. Luca A. Ludovico
Basi sintattiche: orchestra
Osservazioni sugli strumenti
• Sintassi dell’istruzione instr: instr i[, j[, k[, ...]]]
i, j, ... devono essere valori numerici e non espressioni. Si può
utilizzare un qualsiasi intero positivo, possibilmente evitando numeri
troppo alti. Tale sintassi consente di attribuire più nomi allo stesso
strumento.
• Novità recente: possibilità di attribuire – e richiamare – nomi testuali
anziché numerici: instr Name[, Name2[, Name3[, ...]]]
• Un’orchestra può contenere qualsiasi numero di strumenti. Gli
strumenti possono essere definiti in qualsiasi ordine, ma verranno
inizializzati ed eseguiti in ordine numerico crescente. La sequenza
numerica può contenere dei buchi.
• I blocchi di definizione degli strumenti non possono essere annidati.
Programmazione timbrica - Prof. Luca A. Ludovico
Basi sintattiche: orchestra
Scarica

Presentazione del corso