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