Lezione 4
Basi sintattiche: score
Programmazione timbrica - Prof. Luca A. Ludovico
Riassunto
<CsoundSynthesizer>
<CsOptions>/* opzioni */</CsOptions>
<CsInstruments>
; header
; strumenti
ORC
CSD
; UDO
</CsInstruments>
<CsScore>
; partitura
</CsScore>
</CsoundSynthesizer>
Programmazione timbrica - Prof. Luca A. Ludovico
Basi sintattiche: score
SCO
Partitura numerica standard
• La sezione di score contiene eventi che istanziano strumenti
dell’orchestra. Il termine più corretto è eventi (sonori) anziché note.
• Attualmente, la lunghezza massima consentita per la partitura è 231-1
periodi di controllo.
–
Ad esempio, se kr=1500, si tratta di circa 16.5 giorni prima che si verifichino
problemi a causa dell’overflow delle variabili intere (con segno) a 32 bit.
• Inoltre, utilizzando valori numerici con virgola a precisione singola
anziché doppia, l’accuratezza delle temporizzazioni peggiora con
l’avanzare della performance, effetto che diventa percepibile solo con
esecuzioni lunghe.
Programmazione timbrica - Prof. Luca A. Ludovico
Basi sintattiche: score
Preprocessing delle partiture numeriche
• Una partitura – intesa come una collezione di istruzioni di partitura – è
divisa in sezioni ordinate temporalmente attraverso istruzioni s.
In altre parole, un’istruzione s apre una nuova sezione della partitura,
al cui interno la temporizzazione degli eventi riparte dall’istante 0
(che però è successivo a un generico istante n della sezione
precedente)
Prima di leggere l’orchestra, una partitura viene pre-elaborata
(preprocessing) una sezione alla volta.
L’ultima sezione è denotata dall’istruzione e (end).
• Ogni sezione viene poi elaborata da 3 routine:
Carry, Tempo, e Sort.
Prima di descriverne il significato, introduciamo l’istruzione i
Programmazione timbrica - Prof. Luca A. Ludovico
Basi sintattiche: score
Istruzione i (instrument statement)
• L’istruzione i – detta anche istruzione strumento o istruzione nota – è
fondamentale per la definizione di una partitura, che in termini
semplici può essere vista essenzialmente come una sequenza di tali
istruzioni.
• L’istruzione i rende attivo un determinato strumento a un dato istante
di tempo e per una certa durata.
• I valori dei parametri vengono passati allo strumento prima della sua
inizializzazione, e rimangono validi e fissati per tutta la sua
esecuzione (nota per nota).
• Sintassi
i p1 p2 p3 p4 ...
Programmazione timbrica - Prof. Luca A. Ludovico
Basi sintattiche: score
Parametri dell’istruzione i
• Sintassi
i p1 p2 p3 p4 ...
• p1: Numero dello strumento, tipicamente intero non negativo.
Questo parametro crea il legame tra il sorgente dello score e quello
dell’orchestra, di fatto assegnando l’evento sonoro corrente a un dato
strumento.
–
–
Un’eventuale parte frazionaria può specificare un tag per stabilire una legatura tra
note di cluster consecutivi.
Un valore negativo può essere utilizzato per spegnere una nota tenuta.
• p2: Istante di inizio/accensione dell’evento (start time), espresso in
unità di tempo arbitrarie chiamate beat.
Programmazione timbrica - Prof. Luca A. Ludovico
Basi sintattiche: score
Parametri dell’istruzione i
• Sintassi
i p1 p2 p3 p4 ...
• p3 – Durata dell’evento (duration time) in beat, tipicamente positiva.
–
–
Un valore negativo può essere utilizzato per dare avvio a una nota tenuta (si veda
ihold), oppure per contrassegnare strumenti “always on” quali un riverberatore.
Queste note non vengono terminate da istruzioni s.
Un valore zero invocherà un passo di inizializzazione senza esecuzione associata.
• p4 ...: Parametri opzionali il cui significato viene determinato dal
singolo strumento. Ad esempio, può trattarsi dell’intensità iniziale che
si vuole assegnare alla nota, o delle frequenze di taglio di un banco di
filtri, ecc.
–
Tali valori dovranno essere letti e gestiti all’interno dello strumento.
Programmazione timbrica - Prof. Luca A. Ludovico
Basi sintattiche: score
Esempio
• Sintassi
i
p1
p2
p3
p4
...
• Esempio
;p1 p2
p3
i1 0
.5
i1 0.5
.5
i1 1.0
.5
i1 1.5
.5
; silenzio/pausa
i1 3.0
1
p4
p5
0
8.01
0
8.03
0
8.06
0
8.08
di 1 beat
0
8.10
Programmazione timbrica - Prof. Luca A. Ludovico
Basi sintattiche: score
(il primo p è spesso contiguo a i)
(non sono propriamente secondi)
Temporizzazione dell’istruzione i
• Gli istanti di start degli eventi sono relativi all’inizio della sezione
corrente, cui è assegnato un (nuovo) istante 0.
• Di deafault, i beat presentano come unità di misura il secondo, a meno
che all’interno della sezione corrente si trovi un’istruzione t (o un flag
–t nell’invocazione a riga di comando o nelle opzioni del CSD).
• Di fatto, il metronomo di default (che può essere variato attraverso
un’istruzione t, ed è contestuale alla singola sezione dello score) è
60 BPM (beats per minute).
• L’istruzione t verrà trattata nel seguito della presentazione.
Programmazione timbrica - Prof. Luca A. Ludovico
Basi sintattiche: score
Esecuzione dell’istruzione i
• Le istruzioni i all’interno di una sezione possono trovarsi in qualsiasi
ordine. Prima di essere inviate all’orchestra, vengono processate dal
modulo detto Sorter che le riordina in base al valore crescente di p2.
–
Eventi con lo stesso valore di p2, sono ordinati per p1 crescente, e infine per p3
crescente.
• Un singolo strumento può eseguire un numero a piacere di note
simultanee, che comportano invocazioni “indipendenti” dello
strumento
–
Lo spazio dati per ogni copia dello strumento viene allocato dinamicamente dal
modulo Loader dell’orchestra
• Ogni evento verrà normalmente spento quando si consuma la durata
specificata da p3.
–
Uno strumento può comunque forzare questo vincolo modificando il p3
all’inizializzazione della nota, o utilizzando opcode quali linenr o xtratim.
Programmazione timbrica - Prof. Luca A. Ludovico
Basi sintattiche: score
Routine di riporto (carry)
• In un gruppo di istruzioni i consecutive aventi lo stesso p1, ogni campo
p lasciato vuoto sarà valorizzato copiando il valore dall’istruzione
precedente.
Per rendere esplicito questo comportamento, si può utilizzare la
notazione con un singolo . separato da spazi
• Dopo la pre-elaborazione della routine, i valori compariranno nello
score in modo esplicito.
• L’output non viene influenzato da eventuali commenti o righe vuote.
L’operazione di riporto viene invece interrotta da qualsiasi istruzione
diversa da i e da istruzioni i con p1 differente, cioè riferite a un altro
strumento
Programmazione timbrica - Prof. Luca A. Ludovico
Basi sintattiche: score
Routine di riporto (carry)
• Per il solo parametro p2 (quello legato allo start time dell’evento)
sono consentiti altri 3 operatori:
–
L’operatore + attribuisce al nuovo start time lo start time p2 dell’evento
precedente incrementato del p3 precedente. In pratica, la nuova nota inizia
immediatamente dopo lo spegnimento di quella precedente.
L’operatore + viene a sua volta riportato, come mostrato dall’esempio sotto
i
i
i
–
1
.
0
+
.5
100
diventa
i
i
i
1
1
1
0
.5
1
.5
.5
.5
100
100
100
Gli operatori ^+x e ^-x, ove x è un valore numerico con virgola, determina il p2
dell’evento corrente sommando o sottraendo il valore di x dal p2 dell’evento
precedente. Per questi operatori non è ammesso il riporto.
i
i
i
1
.
.
0
^+1
^+1
.5
100
Programmazione timbrica - Prof. Luca A. Ludovico
Basi sintattiche: score
diventa
i
i
i
1
1
1
0
1
2
.5
.5
.5
100
100
100
Routine di tempo e ordinamento (sort)
• La routine di tempo converte gli start time p2, e per le
istruzioni I anche p3, da beat a secondi, essendo
quest’ultima l’unità di misura richiesta dall’orchestra.
– Perché non usare direttamente i secondi nello score? Diventerà chiaro
affrontanto l’istruzione t (vedi slide successive)
• La routine di ordinamento riordina tutte le istruzioni
presenti nel codice a seconda del loro valore di p2.
Assegna inoltre a eventi coincidenti un ordine di
precedenza.
Questo consente di scrivere le istruzioni di uno score in
qualsiasi ordine all’interno di una sezione.
Programmazione timbrica - Prof. Luca A. Ludovico
Basi sintattiche: score
Altre score features
• Al termine di ciascuna operazione di Carry, Sort e Tempo,
all’atto della scrittura del file vengono interpretati altri
elementi sintattici dello score: next-p, previous-p e
ramping.
• Next-p e previous-p, espressi tramite le sintassi npn e ppn
con n intero positivo implicano di copiare il valore di quel
dato parametro (cioè pn) dall’evento avente uguale p1
(quindi assegnato allo stesso strumento) rispettivamente
all’istruzione i precedente o successiva.
Programmazione timbrica - Prof. Luca A. Ludovico
Basi sintattiche: score
Next-p e previous-p
• Caratteristiche e limiti
– Ignorano eventuali eventi interpolati affidati ad altri strumenti, ma
non le interruzioni di sezione
– Possono essere richiamati ricorsivamente e possono far riferimento
ad altri simboli next-p e previous-p (ma ad un certo punto la
catena deve condurre a un valore effettivo)
– Non possono essere utilizzati nelle colonne p1, p2 e p3, ma
possono riferirsi ai valori di tali colonne
– Possono essere oggetto di riporto (ossia carry)
– Riferimenti a valori non esistenti vengono sostituiti da 0
– E’ necessario evitare loop, ossia definizioni cicliche
Programmazione timbrica - Prof. Luca A. Ludovico
Basi sintattiche: score
Next-p e previous-p: esempi
i1 0 1 10 np4 pp5
i1 1 1 20
i1 1 1 30
→
i1 0 1 10 20 0
i1 1 1 20 30 20
i1 2 1 30 0 30
in quanto np4 e pp5 si propagano per via del riporto
i1 0 1 10 np4
i1 1 1 pp5
0
dà problemi per via del riferimento ciclico
i1 0 1
10 np1
i1 1 pp3 0
dà problemi (solo alla seconda istruzione) per via NON del riferimento a
p1 e a p3 ma a causa della posizione in cui si trova pp3
Programmazione timbrica - Prof. Luca A. Ludovico
Basi sintattiche: score
Ramping lineare
• I parametri delle istruzioni i contenenti il carattere <
saranno sostituiti da valori calcolati da interpolazione
lineare tra il primo numero reale precedente e successivo
trovato sulla stessa colonna per eventi eseguiti dallo stesso
strumento.
• Le rampe non possono estendersi attraverso sezioni. I
simboli di ramping non sono ammessi su p1, p2 and p3. I
simboli possono essere soggetti a riporto.
• E’ necessario prestare attenzione a quanto avviene con il
riordino delle istruzioni ad opera della routine di Sort.
Programmazione timbrica - Prof. Luca A. Ludovico
Basi sintattiche: score
Esempio di ramping lineare
i1
i1
i1
i1
i1
i1
0
1
2
3
4
5
1
1
1
1
1
1
100
<
<
400
<
0
Programmazione timbrica - Prof. Luca A. Ludovico
Basi sintattiche: score
diventa
i1
i1
i1
i1
i1
i1
0
1
2
3
4
5
1
1
1
1
1
100
200
300
400
200
1
0
Ramping esponenziale e randomico
• A partire da Csound versione 3.52, è possibile ottenere
ramping esponenziale utilizzando i simboli ( o ).
• L’utilizzo del carattere tilde ˜ avrà come risultato una
distribuzione casuale uniforme tra il primo e l’ultimo
valore della rampa.
• Le regole e le limitazioni di uso di queste altre forme di
ramping sono le stesse del ramping lineare.
Programmazione timbrica - Prof. Luca A. Ludovico
Basi sintattiche: score
PRINCIPALI ISTRUZIONI DI
SCORE
Programmazione timbrica - Prof. Luca A. Ludovico
Basi sintattiche: score
L’istruzione t (tempo statement)
• L’istruzione t (tempo) permette di specificare un’associazione tra beat
e secondi, sezione per sezione e con possibilità di variazione.
Di default il metronomo è 60 BPM (1 beat = 1 secondo).
• Un’istruzione t può apparire in qualsiasi punto della sezione. Ne fosse
presente più d’una, solo la prima verrebbe presa in considerazione.
• Sintassi dell’istruzione t
t p1 p2 p3 p4 ... (unlimited)
ove p1 deve essere 0, p2 è il tempo iniziale in BPM, e i successivi
argomenti vanno letti a coppie interpolate:
p3, p5, p7,... - Istanti in beat, specificati in ordine non decrescente
p4, p6, p8,... - Nuovi valori di metronomo in corrispondenza dei beat
• Si viene così a determinare un grafico beat – secondi.
Programmazione timbrica - Prof. Luca A. Ludovico
Basi sintattiche: score
Esecuzione dell’istruzione t
• Sintassi dell’istruzione t: t p1 p2 p3 p4 ... (unlimited)
Tra i valori di BPM via via specificati avviene interpolazione lineare.
Un accelerando tra i valori di metronomo M1 e M2 fa variare in modo
lineare la durata in secondi della pulsazione da 60/M1 a 60/M2.
–
Ad esempio, se M1 = 60 ed M2 = 120, la durata della pulsazione passa da 1s a 0.5s
• Per impostare un bpm costante:
–
–
si specifica un unico valore (ma tale valore non potrà mai cambiare nella sezione
corrente), oppure
si specificano due istanti temporali distinti valorizzati allo stesso bpm
Una volta assegnato, l’ultimo BPM rimane fisso per tutta la sezione.
• Il diagramma può contenere punti di discontinuità, ossia due valori di
BPM distinti collegati allo stesso istante temporale. Questo implica un
cambio istantaneo del BPM.
Programmazione timbrica - Prof. Luca A. Ludovico
Basi sintattiche: score
Esempio
t
i1
i1
i1
i1
i1
i1
i1
0
60
0
3
6
9
12
15
18
6
60
2
2
2
2
2
2
2
6
120
15
110
220
440
880
110
220
440
60
;start tempo = 60
;tempo = 60
;stay at tempo 240
;jump to 120
;slow down to 60
;slow down to 60
;tempo = 60
Secondi
Osservazione: il quarto evento inizia alla nona pulsazione, ma come si vede dal diagramma inizia prima di 9s.
Infatti le prime 6 pulsazioni hanno avuto luogo nei primi 6 secondi (BPM = 60), ma le successive 3…
Programmazione timbrica - Prof. Luca A. Ludovico
Basi sintattiche: score
Esempio
t
i1
i1
i1
i1
i1
i1
i1
i1
0
240
0
3
6
9
12
15
18
21
12
30
2
2
2
2
2
2
2
2
15
240
110
220
440
880
110
220
440
880
Secondi
Programmazione timbrica - Prof. Luca A. Ludovico
Basi sintattiche: score
;start tempo = 240
;tempo = 240
;slow down &
;slow down &
;slow down &
;slow down to 30 at 12 seconds
;speed up to 240 again
;stay at tempo 240
Riassunto sulle principali istruzioni
• Nello score è possibile specificare le seguenti istruzioni:
–
Istruzione i
istruzione strumento o nota, dà inizio e specifica la durata degli eventi sonori,
associandoli a un dato strumento e consentendo un passaggio parametri
–
Istruzione s
istruzione di sezione, crea una nuova sezione
–
Istruzione e
istruzione di terminazione dello score
–
Istruzione t
istruzione tempo, permette di impostare il metronomo di riferimento di una nuova
sezione ed eventualmente di variarlo
–
Elenco completo: http://www.csounds.com/manual/html/ScoreStatements.html
Programmazione timbrica - Prof. Luca A. Ludovico
Basi sintattiche: score
Scarica

Presentazione del corso