Lezione 2 Basi sintattiche orchestra Programmazione timbrica Prof
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 emissione sonora (si può ad es. creare uno strumento che genera accordi) • 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): le pause sono date dall’interruzione nell’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 e le sintassi del file-orchestra (Instruments) e del file-partitura (Score) sono rimaste invariate, ma da due file distinti si è passati a due sezioni di un unico file. Il formato unificato facilita il lavoro perché è un singolo documento, ma – all’interno dei tag – la sintassi è identica. Programmazione timbrica - Prof. Luca A. Ludovico Basi sintattiche: orchestra
Template CSD <Csound. Synthesizer> <Cs. Options>/* opzioni */</Cs. Options> <Cs. Instruments> sr = 44100 ksmps = 128 nchnls = 2 0 dbfs = 1. 0 ORC CSD ; strumenti </Cs. Instruments> <Cs. Score> ; partitura </Cs. Score> </Csound. Synthesizer> 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, e continua fino al ritorno a capo ; anche questo è un commento • Commenti multi-riga o parziali in stile C: aperti da /* e chiusi da */ /* questo è un commento che continua alla riga sottostante */ i 1 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 le sintassi csound [flags] [orchname] [scorename] csound [flags] [csdfilename] oppure all’interno dell’elemento apposito del formato. csd, in particolare tra le etichette <Cs. Options> … </Cs. Options> Programmazione timbrica - Prof. Luca A. Ludovico Basi sintattiche: orchestra
Le opzioni • Le opzioni permettono di: – Variare i parametri del file audio prodotto; ad es. , generare campioni a 8 o a 24 bit anziché 16, produrre file audio senza header (in formato RAW), cambiare il formato del file prodotto da WAV a OGG o AIFF, ecc. – Inserire nel file prodotto i tag id 3 – 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/Command. Flags. Category. html Programmazione timbrica - Prof. Luca A. Ludovico Basi sintattiche: orchestra
Le opzioni Csound. QT di default inserisce le opzioni: <Cs. Options> -odac -d </Cs. Options> • -odac o -o dac richiede di scrivere il suono sul dispositivo audio di uscita • -d sopprime le visualizzazioni, ma (da specifiche) se inserito tra le Cs. Options non dovrebbe funzionare In caso di conflitto tra quanto specificato in Cs. Options e a riga di commando, prevale quest’ultima. Ad esempio, se in prova. csd si scrive <Cs. Options>--output="pippo. wav"</Cs. Options> • l’invocazione di csound prova. csd genera su disco pippo. wav; • l’invocazione di csound --output="topolino. wav" prova. csd genera su disco topolino. wav, e dunque prevale su Cs. Options. Programmazione timbrica - Prof. Luca A. Ludovico Basi sintattiche: orchestra
Tornando al template CSD… <Csound. Synthesizer> <Cs. Options>/* vedi slide precedente */</Cs. Options> <Cs. Instruments> sr = 44100 ksmps = 128 nchnls = 2 0 dbfs = 1. 0 ORC CSD ; strumenti </Cs. Instruments> <Cs. Score> ; partitura </Cs. Score> </Csound. Synthesizer> Programmazione timbrica - Prof. Luca A. Ludovico Basi sintattiche: orchestra SCO
Sintassi dell’orchestra • Un file. orc o la sezione <Cs. Instruments> 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, 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 generico: etichetta: risultato opcode argomento 1, argomento 2, . . . ; commenti Programmazione timbrica - Prof. Luca A. Ludovico Basi sintattiche: orchestra
Sintassi dell’orchestra • Un’istruzione di orchestra in Csound ha il formato generico: etichetta: risultato opcode argomento 1, argomento 2, . . . ; commenti • L’etichetta è opzionale e non ha valore in sè, serve solo per istruzioni di go-to. Analogamente, i commenti sono opzionali. • A seconda della funzione svolta, alcuni opcode non producono output, cioè non hanno un valore-risultato. Altri opcode non richiedono argomenti in ingresso. • Ogni istruzione dell’orchestra dovrebbe rimanere su un’unica riga di codice, terminata dal ritorno a capo (Carriage Return + Line Feed). Istruzioni lunghe possono comunque essere suddivise grazie al carattere “” (attenzione, diverso dal simbolo di divisione “/”) 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); – 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
Sulla frequenza di calcolo delle variabili All’accensione di un evento sonoro che dura 18 campioni: In teoria, le variabili audio vengono calcolate ad ogni campione, mentre le variabili di controllo a frequenza inferiore e le variabili di inizializzazione una sola volta, all’accensione dell’evento sonoro. In realtà, anche le variabili audio vengono calcolate a frequenza k, ma calcolando istantaneamente tutto l’array che riempie il buffer fino al prossimo istante di ricalcolo. 0 1 2 3 4 5 6 7 8 9 a 0 a 1 a 2 a 3 a 4 a 5 a 6 a 7 a 8 a 9 a 10 a 11 a 12 a 13 a 14 a 15 a 16 a 17 a 18 k 0 10 11 12 13 14 15 16 17 18 19 20 … k 1 i 0 0 1 2 3 4 5 6 7 8 9 10 11 a 0. . a 9 a 10. . a 18 k 0 k 1 i 0 Programmazione timbrica - Prof. Luca A. Ludovico Basi sintattiche: orchestra 12 13 14 15 16 17 18
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, essendo situata all’inizio del sorgente dell’orchestra. Però si comporta come uno strumento che non effettua elaborazioni alla frequenza di controllo o di campionamento. • Quindi l’intestazione supporta 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 <Cs. Instruments> ; a seguire, alcune tipiche istruzioni di intestazione dell’orchestra sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 0 dbfs = 32767 /* dopo l’intestazione, detta anche instr 0, si dovrebbero definire gli strumenti veri e propri*/ </Cs. Instruments> 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. Da Csound 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 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. • 0 dbfs imposta il valore di 0 d. B 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[, Name 2[, Name 3[, . . . ]]] • 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
- Slides: 19