Vous êtes sur la page 1sur 32

Cmask

un generatore di eventi stocastici per CSound


Cmask, un generatore di eventi stocastici per Csound....................................... 1
Concetti basilari...................................................................................................3
Parametrizzazione e processi...........................................................................3
Segmenti di funzioni.........................................................................................4
Generatori casuali e distribuzioni di probabilità...............................................6
Oscillatori.........................................................................................................9
Liste................................................................................................................11
Maschere di tendenza....................................................................................11
Trasformazione matematica...........................................................................13
Quantizzazione...............................................................................................14
Accumulazione...............................................................................................16
Un esempio....................................................................................................17
Lavorare con Cmask.......................................................................................17
Riferimento........................................................................................................19
Testo prescritto...........................................................................................19
Commenti....................................................................................................19
Segmento di funzione (bpf).........................................................................19
Campi..........................................................................................................20
Parametri....................................................................................................21
Precisione....................................................................................................21
Generatori......................................................................................................21
Costante......................................................................................................21
Lista.............................................................................................................22
Segmento di funzione.................................................................................22
Generatore di numeri casuali......................................................................22
Generatore di distribuzioni probabilistiche..................................................23
Oscillatori....................................................................................................23
Modificatori.....................................................................................................24
Maschere di tendenza.................................................................................24
Quantizzazione............................................................................................25
Accumulazione............................................................................................25
Bibliografia........................................................................................................26
Software............................................................................................................26
Esempi...............................................................................................................26
Cmask, un generatore di eventi stocastici per Csound
Cmask è un’applicazione che produce files .sco per Csound, ovvero liste di note
o piuttosto di eventi. La sua applicazione principale è quella di generare eventi
per creare textures di suoni granulari.
Il programma assume un file di parametri come input e crea un file .sco che
può essere usato immediatamente con Csound.
Il concetto basilare in Cmask è quello di maschera di tendenza. Questa è
un’area limitata da due profili variabili nel tempo. Questa area descrive una
serie di valori possibili per un parametro della score, ad esempio ampiezza,
altezza, panning, durata etc. Per ogni parametro relativo ad un evento (un
parametro di nota in Csound) sarà selezionato un valore casuale all’interno del
campo di valori attivo in quel momento (vedi [a], [c], [d], [4], [5], [7]). Ci sono
anche altri mezzi in Cmask per la generazione di parametri, ad esempio liste
cicliche, poligoni, oscillatori, passeggiate casuali. Ogni parametro di un evento
può essere generato in maniere differenti.
Un insieme di note/eventi generato con un insieme di metodi per un certo lasso
di tempo viene definito un campo (field).

Cmask è stato scritto in Metrowerks CodeWarrier environment in C++.


Il programma è disponibile per Macs (68k e PPC), SGI IRIX5.3 e Windows95:

http://www.kgw.tu-berlin.de/~abart/CMaskMan/CMask_Download.html
ftp://ftp.kgw.tu-berlin.de/pub/cmask/

Cmask è freeware.

Il manuale consiste di sezioni di base, una di riferimento, ed esempi.

Luglio 1997, Andre Bartetzki

1
2
Concetti basilari

Parametrizzazione e processi

Ogni evento o nota in una partitura di Csound è definito da un’istruzione di


inizializzazione (i statement) e da una serie di parametri, chiamati campi
(pfields) p1, p2, p3, …Questi parametri contengono il numero dello strumento,
l’istante di attivazione (o battere), e la durata di ogni evento.
Inoltre è possibile definire altri parametri per lo strumento, numerati come p4,
p5 etc. Questi di solito sono frequenze, altezze, parametri di filtraggio,
ampiezze, tempi di attacco, valori di panorama stereo, numeri di tabella e così
di seguito.

Un parametro in Cmask corrisponde ad un pfield di ogni nota/evento di Csound.


Il primo parametro è il p1, numero dello strumento.
Il secondo parametro, in Csound istante di attivazione (o battere), sarà
considerato come la differenza temporale (o ritmo) tra l’inizio di un evento e il
successivo. La somma di tutti i precedenti tempi di attivazione ci dà l’istante
assoluto di attivazione del determinato evento considerato. Il parametro p2 in
Cmask ha un’altra speciale qualità: determinala densità di eventi, ovvero:
quante note saranno generate in un determinato lasso di tempo.
Il terzo parametro rappresenta la durata p3. Ogni parametro successivo
assume significato in base al relativo strumento nel file .orc.

Le istruzioni di generazione di eventi si hanno in un file separato detto file dei


parametri.
Normalmente tutti gli eventi o grani hanno proprietà identiche o similari, per
cui possono essere raggruppati insieme da un punto di vista statistico. Questi
gruppi, o piuttosto i parametri dei loro eventi sono chiamati campi (fields) in
Cmask.La nozione di campi è comparabile a quella di nuvole (clouds) o flussi
(streams) in altre concezioni della sintesi granulare.

Un campo ha una durata determinata dal tempo iniziale e finale. I valori di ogni
parametro p1, p2, p3, … pn all’interno di questo intervallo di tempo possono
essere generati e processati in differenti maniere. Innanzitutto uno dei
generatori (vedi sotto) produce un valore. Questo può essere un valore
casuale, periodico, o da una lista di numeri stabiliti. Il valore può essere
processato o modificato attraverso un numero di moduli sino a tre (maschera di
tendenza, quantizzazione, accumulazione).
Con il modulo di maschera di tendenza i valori saranno rimappati all’interno di
un dominio variabile nel tempo – la maschera di tendenza.
La quantizzazione aggiusta i suoi valori in ingresso (da una maschera di
tendenza o da un generatore) all’interno di una griglia variabile nel tempo.
L’ultimo modulo, l’accumulatore, somma tutti i valori insieme. Questi tre
moduli modificatori sono opzionali.

3
La maggior parte dei moduli possono essere controllati da parametri speciali.
Questi parametri di controllo possono essere costanti o variabili nel tempo. I
parametri variabili saranno descritti come segmenti di funzioni.

Segmenti di funzioni

I segmenti di funzioni (break point functions) servono in Cmask sia come


generatori di parametri di eventi sia come funzioni di controllo per generatori e
modificatori particolari di parametri. Così parametri speciali sono, ad esempio,
il valore medio di una distribuzione probabilistica gaussiana, la forza di
quantizzazione o i confini di una maschera di tendenza.
Un segmento di funzione consiste, come gli opcode linseg e expseg e
GEN5/GEN7 in Csound, in una sequenza connessa di segmenti. I segmenti sono
specificati attraverso coppie di valori relativi al tempo e al valore di ogni punto
del segmento.
I valori tra punti consecutivi sono calcolati attraverso interpolazione. Abbiamo
interpolazione lineare o esponenziale. Il tipo di interpolazione viene stabilito
attraverso un esponente (vedi oltre e nella sezione di riferimento). Esso può
anche essere disattivato – il risultato sarà una funzione a scalini simile alla
GEN17 di Csound:

interpolazione con un esponente positivo (= convesso):

4
interpolazione con un esponente negativo (= concavo):

interpolazione lineare:

interpolazione half-cosine:

nessuna interpolazione:

Il valore della prima coppia di valori di tempo definiti da un segmento di


funzione rimane valido anche prima di questo momento (senza interpolazione).
Lo stesso si applica all’ultimo valore:

5
Generatori casuali e distribuzioni di probabilità

Cmask genera numeri casuali o con un semplice generatore di valori casuali


(range) o per mezzo di funzioni di probabilità controllabili dinamicamente (rnd).
Le distribuzioni implementate sono: uniforme, lineare, triangolare,
esponenziale, bilaterale e esponenziale inversa, gaussiana, di cauchy, beta e
weibull. per una descrizione dettagliata di queste distribuzioni probabilistiche si
veda [a], [1], [2], [3].

molte di queste distribuzioni sono controllabili attraverso uno o due parametri.


Essi possono essere stabiliti come costanti o variabili attraverso un segmento
di funzione. Una distribuzione gaussiana, per esempio, è determinata da un
valore medio e da una deviazione standard. Se variamo la deviazione standard
il profilo della distribuzione (l’istogramma) cambierà.
Se noi abbiamo la coppia di segmento di funzione 0 1 e 10 3 come valori di
controllo per una distribuzione esponenziale, il risultato è una crescita
esponenziale (lambda) da 1 a 0 secondi sino a 3 a 10 secondi, ovvero il
generatore sceglierà preferenzialmente valori più piccoli al tempo di 10
secondi.
Se abbiamo una distribuzione cauchy e controlliamo il suo valore medio con 0
0.5 e con 10 0.8, otteniamo un valore medio che cambia dal 50% all’80% nel
campo {0 … 1}.

I parametri per ogni funzione di probabilità e i propri campi di valori sono


descritti nella sezione di riferimento del presente manuale.

I numeri generati casualmente sono limitati al campo {0 … 1} (anche se essi


nella teoria potrebbero essere maggiori o minori, come nelle distribuzioni
gaussiana, cauchy, esponenziale e weibull). Questo campo può essere
compresso o espanso attraverso una successiva maschera di tendenza.

distribuzione uniforme:

distribuzione lineare:

6
distribuzione triangolare:

distribuzione esponenziale:

distribuzione esponenziale inversa:

distribuzione esponenziale bilaterale:

7
distribuzione gaussiana:

distribuzione cauchy:

distribuzione beta:

distribuzione weibull:

8
Oscillatori

Non ci sono solo generatori casuali in Cmask. È anche possibile usare le


seguenti funzioni periodiche come generatori di parametri: seno, coseno, onda
a dente di sega ascendente e discendente, onda quadra, triangolare, funzioni
esponenziali periodiche.
Ogni funzione ha un valore di frequenza misurato in cps, costante o variabile
nel tempo, e una fase constante (normalizzata, fra 0 e 1).
Queste funzioni producono valori nel campo {0 … 1}, come i generatori
casuali, ovvero le loro ampiezze si mantengono costanti.
Una maschera di tendenza successiva può servire come amplificatore per
raggiungere altri campi di valori.

funzione seno:

funzione coseno:

funzione a dente di sega ascendente:

9
funzione a dente di sega discendente:

funzione esponenziale ascendente:

funzione esponenziale discendente:

funzione ad onda quadra:

funzione ad onda triangolare:

10
Liste

Al posto di generatori casuali o oscillatori possiamo usare semplici liste di


valori.
Una lista contiene un insieme di numeri, ad esempio (5 1 8 10.2) oppure (1.5
0.01 0.01 1234) etc.
Gli elementi della lista possono essere selezionati secondo differenti metodi: in
un forward loop (cycle), in un forward and backward loop, come un pendolo o
un palindromo (swing), come permutazioni casuali, come in un mazzo di carte
(heap) e casualmente (random). In contrasto con i segmenti di funzioni non c’è
assolutamente dipendenza dal tempo – gli elementi saranno letti uno per uno
secondo la maniera scelta.
Gli esempi mostrano le quattro modalità applicate alla stessa lista:

Maschere di tendenza

Una maschera è un’area delimitata da due bordi (variabili nel tempo). I numeri
prodotti da un precedente generatore casuale (rnd) o oscillatore (osc) sono
rimappati all’interno di questo campo.
I limiti superiori e inferiori della maschera possono essere costanti o riportabili
ad un segmento di funzione.

11
Questo esempio descrive una generazione casuale uniforme per p4
(frequenze?) e una maschera di tendenza. Il campo di valori della maschera al
tempo corrispondente a 2 secondi è {100...240}, per cui i numeri casuali sono
distribuiti tra 100 e 240. Il campo di valori si espande a {70...310} a 6 secondi,
e si restringe al singolo valore 240 a 11 secondi.

Le forme seguenti sono casi particolari relativamente al principio della


maschera di tendenza:

1. Una maschera con bordi superiore e inferiore invarianti rappresenta un


normale (invariante nel tempo) campo di valori (range):

Quindi le seguenti due descrizioni di parametri sono equivalenti:

p4 rnd uni
mask 10 20

p4 range 10 20

2. Una maschera con bordi costanti ed identici descrive un unico valore:

Quindi le seguenti due descrizioni di parametri sono equivalenti:

p4 rnd uni

12
mask 10 10

p4 const 10

3. Una maschera con bordi variabili, ma in maniera identica, descrive un


segmento di funzione – non c’è spazio per numeri casuali o oscillanti:

Quindi le seguenti due descrizioni di parametri sono equivalenti:

p4 rnd uni
mask (3 10 5 20 7 10) (3 10 5 20 7 10)

p4 seg (3 10 5 20 7 10)

A causa della libera scelta di un’interpolazione esponenziale è possibile una


grande varietà di forme possibili di maschere costruibili con lo stesso insieme
di segmenti:

Trasformazione matematica

La trasformazione matematica (mapping) dei calori casuali o periodici nella


mascheratura segue una funzione lineare, esponenziale o radicale.
Una trasformazione matematica lineare, probabilmente normale per molte
applicazioni di Cmask, espande o comprime i valori nel campo corrente del
mascheramento in un modo proporzionale (lineare). Per esempio, se i valori
casuali 0.0, 0.1, 0.5 e 0.8 saranno trasformati linearmente in un campo di valori
tra 2 e 6, il risultato sarà 2.0, 2.4, 4.0 e 5.2. Con un campo di -10 … +10
avremo -10.0, -8.0, 0.0, 6.0.Una funzione esponenziale cambia le proporzioni

13
originarie. Una funzione quadratica trasforma i valori 0.0, 0.1, 0.5 e 0.8 a 0.0,
0.01, 0.25 e 0.64.
Una funzione radicale quadrata, per esempio, trasforma i valori a 0.0, 0.316 … ,
0.707 … e 0.894 …
Nel campo [2, 6] questo diviene 2.0, 3.264 … , 4.828 … e 5.577 …
La funzione di trasformazione matematica in Cmask è

x è il valore in ingresso e n l’esponente di trasformazione.

n=0 dà una funzione lineare


n>0 dà una funzione esponenziale, n = 1 dà la funzione quadratica
n<0 dà una funzione radicale, n = -1 dà una funzione con radice
quadrata

Per molti parametri di sintesi la funzione lineare sarà la scelta più adeguata.
Ma se vogliamo generare frequenze distribuite uniformemente da usarsi in
oscillatori audio, tra 100 e 800 Hz per esempio, esse si distribuiranno
equamente in quel campo di valori, ma ascolteremo mediamente frequenze più
acute. In questo esempio la metà di tutte le frequenze casca nel campo di
valori 450 … 800 Hz, cioè circa un’ottava. L’altra metà (100 … 450) comprende
più di due ottave. Quindi le altezze dell’ottava più grave saranno più rare
rispetto alle altezze dell’ottava più acuta. Per risolvere il problema della
relazione logaritmica tra frequenza e altezza possiamo usare valori espressi in
oct o in cent invece dei valori delle frequenze, oppure usare come
approssimazione una distribuzione esponenziale invece che uniforme. La terza
via è quella di usare una funzione radicale come funzione di trasformazione
matematica.
Abbiamo un caso simile con le differenze temporali e le durate. Intervalli di
tempo o durate distribuite uniformemente saranno percepiti preferenzialmente
come intervalli temporali e durate più estese.

Quantizzazione

Dopo la generazione di valori e la loro trasformazione attraverso maschere di


tendenza è possibile applicare una quantizzazione. Esistono tre parametri per
la quantizzazione:
intervallo, forza e trasposizione.

La quantizzazione è la distanza tra due punti vicini nel campo di valori. Tutti
questi punti formano una griglia equidistante. Questi punti attraggono i valori
casuali circostanti come magneti (si confronti la quantizzazione metrica in un
sequencer MIDI).

Un intervallo di 30, per esempio, costruisce una griglia:


… -120 -90 -60 -30 0 30 60 90 120 150 180 …

14
L’intervallo può essere anche variante nel tempo. Il segmento di funzione (0 30
5 30 10 45), per esempio, descrive una griglia costante per i primi 30 secondi,
per crescere dopo quell’istante:

La trasposizione di quantizzazione, anch’essa controllabile con un segmento di


funzione, è uno spostamento della griglia.

Un valore di compensazione di 10 e un intervallo di 30 risulta nella griglia


precedentemente esposta:
… -110 -80 -50 -20 10 40 70 100 130 160 190 …

Ecco un esempio di trasposizione dinamica:

La forza di quantizzazione, un valore o un segmento di funzione nel campo di


valori {0...1}, cioè 0 ... 100%, specifica come i punti della griglia attraggono i
valori tra di essi.
Un valore di forza di 1 dà una quantizzazione totale – ogni valore casuale si
dispone precisamente sui valori della griglia di quantizzazione. Una forza di 0.5
(50%) indica che tutti i valori casuali sono spostati alla distanza media rispetto
al punto della griglia più prossimo (si confronti la quantizzazione iterativa in un
sequencer MIDI).

Un esempio di forza crescente:

quant 40 (0 0 10 1) 0

L’esempio seguente mostra una maschera di tendenza in combinazione con


una quantizzazione con intervalli, trasposizione e forza dinamiche (le aree
grigie nella maschera di tendenza sono aree possibili per valori casuali o
periodici).

15
La quantizzazione è utile per la costruzione di metri regolari nel ritmo o griglie
di frequenze armoniche.

Accumulazione

Un accumulatore somma insieme tutti i valori di ingresso e un valore iniziale.


Per esempio, i numeri 10 2 34 5 e il valore iniziale di 0 danno come risultato 10
12 46 51. Ovvero possiamo considerare i valori di ingresso come valori relativi
o intervalli. I numeri dopo l’accumulazione sono valori assoluti.
Se usiamo un accumulatore in connessione con un generatore di numeri
casuali, possiamo definire il risultato come una passeggiata casuale (random
walk). A seconda dei valori di ingresso, la somma può arrivare a valori molto
alti. Per limitare la somma ad un certo ambito di valori è possibile definire i
bordi superiori e inferiori come in una maschera di tendenza. La specifica del
modo di accumulazione prescrive il comportamento nelle prossimità di un
bordo. La modalità limit taglia i valori al di sopra di un certo limite superiore e
viceversa. La modalità mirror riflette il valore che oltrepassa i limiti riportandolo
all’interno del campo prestabilito. La modalità wrap considera entrambi i limiti
come una medesima cosa, in modo tale che un valore che ecceda il limite
superiore di una certa entità viene riportato all’interno del campo prestabilito,
distante della stessa entità dal limite inferiore. Viceversa per i valori che
eccedano il limite inferiore.

16
Un esempio

Le linee che seguono descrivono un campo che contiene 6 parametri secondo


la sintassi valida in Cmask:

{
f1 0 8193 10 1 ;il testo tra le parentesi
;graffe
;rimane invariato nel file .sco
i3 0 20
}
f 0 10 ;un campo da 0 a 10 secondi
p1 const 1 ;strumento 1
p2 range .01 .2 prec 3 ;tempi iniziali tra 0.01 e 0.2
;secondi
;precisione: 3 cifre dopo
;il punto decimale
p3 rnd exp 1 ;durate tra 0.5
;e 1 secondo
mask .5 1 ;e distribuzione esponenziale
prec 2
p4 item heap (120 125 400 355) ;permutazioni di 4 valori
p5 rnd uni ;numeri distribuiti
;uniformemente
mask (3 100 8 50) 200 map 1 ;tra 100 e 200 all’inizio
;tra 50 e 200 alla fine
p6 osc cos (0 .5 10 5) ;oscillazione sempre più veloce
;valori nel campo {0...1}

Lavorare con Cmask

Come consueto dovremmo designare inizialmente gli strumenti e il file di


orchestra. Se il significato dei parametri p4-pn è fissato possiamo scrivere
generatori, maschere di tendenza etc. per tutti i campi parametrici di un file di

17
parametri. Per una migliore leggibilità è consigliabile mettere dei commenti
seguiti da un punto e virgola.
Il formato del file di parametri deve essere quello di un semplice file ASCII di
testo, come per i files .orc e .sco.
Programmi per la scrittura di files di testo per Csound e Cmask nel Mac sono
BBedit o Alpha.

Se il file di score dovesse contenere altre liste di note o istruzioni di tabelle di


forme di onda queste devono essere poste tra parentesi graffe come prime
righe del file di parametri. Questa parte del file di parametri viene mantenuta
invariata nel file di score risultante. In questa maniera possiamo ottenere un
file score completo senza doverlo modificare successivamente.

Ogni parametro può avere la propria precisione. Il valore predefinito per il


numero di cifre decimali dopo il punto è di 5. Per avere numeri interi occorre
avere una precisione 0.

Cmask sul Macintosh:

Dopo aver lanciato Cmask appare una finestra di dialogo per selezionare il file
di parametri. Quindi occorre stabilire la directory e il nome del nuovo file score.
Il nome predefinito per il file score è quello del file di parametri seguito
dall’estensione .sco.
Se interviene un errore Cmask interrompe il processamento e stampa un
messaggio a terminale. Occorre allora chiudere il programma (command-Q).
Dopo il debugging possiamo riaprire Cmask. Se il file di parametri risulta
corretto Cmask scrive il nuovo file score sul disco.

Cmask su SGI:

Cmask richiede almeno un argomento: il nome del file di parametri. Il secondo


argomento, opzionale, può essere il nome del nuovo file di score. Se non si
fornisce alcuna indicazione Cmask appende il suffisso .sco al nome del file di
parametri, come nome del nuovo file di score. Se occorre un errore Cmask
stampa un messaggio a terminale e si ferma. Dopo il debugging possiamo
riaprire Cmask. Se il file di parametri risulta corretto Cmask scrive il nuovo file
score sul disco.

Cmask sul PC:

Non c’è interfaccia grafica per Cmask, per cui esso va fatto girare da terminale
DOS.
Cmask richiede almeno un argomento: il nome del file di parametri. Non è
richiesta un’estensione particolare per questo file. Il secondo argomento
opzionale può essere il nome del nuovo file score. Se non si fornisce alcuna
indicazione Cmask appende il suffisso .sco al nome del file di parametri, come
nome del nuovo file di score. Se occorre un errore Cmask stampa un
messaggio a terminale e si ferma. Dopo il debugging possiamo riaprire Cmask.
Se il file di parametri risulta corretto Cmask scrive il nuovo file score sul disco.

18
Riferimento

Simboli e numeri in un file di parametri devono essere delimitati con spazi,


tabulazioni o a capo. I valori di un modulo (generatore, maschera di tendenza
etc.) possono essere distribuiti in diverse linee.
Diversi moduli possono essere scritti insieme sulla medesima riga.

I simboli (rnd, f, mask, accum …) possono essere scritti in lettere maiuscole o


minuscole.

Testo prescritto

{ <text> }

Il testo in parentesi graffe può contenere istruzioni di tabella di funzioni, liste di


note e altre istruzioni di score, commenti, che dovranno essere copiati senza
modifiche nel file score. Questo testo prescritto deve essere inserito prima di
ogni descrizione di campo.

Esempio:

{
f1 0 8193 10 1
f2 0 1024 8 0 512 1 512 0
; tabelle con onda sinusoidale e inviluppo
}

Commenti

; <testo>

I commenti possono essere scritti in ogni punto del file di parametri.


Essi iniziano con un punto e virgola e si estendono sino alla fine della linea.

Segmento di funzione (bpf)

( <t1 v1> <t2 v2> <t3 v3> <..> [ipl <<valore> | cos | off>] )
[ <valore iniziale> <valore finale> [ipl <<valore> | cos | off>] ]

Quasi ogni modulo in Cmask può essere controllato da valori costanti o variabili
nel tempo. La descrizione di valori variabili viene effettuata attraverso
segmenti di funzione (anche noti come funzioni spezzate o poligonali). Tale
funzione deve essere scritta tra parentesi come serie di coppie o punti di valori
tempo-valore (<tn vn>). Il valore del primo punto della funzione sarà valido
anche per gli istanti precedenti. Lo stesso principio si applica all’ultimo punto.
I valori tra punti contigui saranno calcolati per interpolazione lineare o
esponenziale. L’interpolazione esponenziale opzionale segue la parola chiave
ipl. Il valore predefinito per l’interpolazione è 0, cioè lineare. Se ipl è seguito da

19
off allora abbiamo una funzione a scalini, discontinua, invece di avere
interpolazione.

interpolazione esponenziale risultato


0 lineare (simile a linseg in Csound)
>0 crescente lentamente, con rapido
decadimento (convessa, simile a
expseg in Csound)
<0 rapido crescendo, lento decadimento
(concava)
cos interpolazione half-cosine (curva poco
arcuata)
off nessuna interpolazione (funzione
discontinua, simile a GEN17 in Csound)

Esiste un modo semplificato di scrivere funzioni che consistano di un solo


segmento che duri dall’inizio alla fine del campo: un solo segmento di funzione
che abbia solamente due numeri – il valore iniziale e finale.

Esempi:

(0 3 5 0 8 -1) ;3 punti {0,3},{5,0} e {8,-1} con


interpolazione lineare
(0 3 5 0 ipl -1) ;2 punti {0,3},{5,0} e {8,-1} con
interpolazione concava
[10 50 ipl 2.3] ;2 punti {start,10},{end,50} con interpolazione
fortemente convessa
[10 50 ipl cos] ;2 punti {start,10},{end,50} con interpolazione
smussata

Campi

F <tempo iniziale> <tempo finale>


<parametro 1>
<parametro 2>

Un file di parametri consiste di uno o più campi. I campi sono paragonabili alle
nuvole o ai flussi dei sistemi di sintesi granulare.
Un campo deve descrivere almeno i primi tre parametri di ogni strumento di
Csound: il numero di strumento, l’istante di attivazione (o battito) e la durata. A
seconda della struttura dello strumento possono esserci altri parametri.
Ogni campo deve avere un’intestazione rappresentata dalla lettera F. Seguono
poi il tempo di inizio e di fine del campo in secondi. Dopo l’intestazione inizia il
blocco con la descrizione dei parametri per p1, p2, p3 etc. La descrizione del
campo termina dopo l’ultimo parametro px oppure con la dichiarazione del
prossimo campo.
I campi non necessitano la dichiarazione in ordine cronologico.

20
Parametri

pn <generator>
[<mask>]
[<quantizer>]
[<accumulator>]
[prec <val>]

Ogni parametro pn di Cmask sarà descritto da uno o più moduli secondo lo


schema di processamento (vedi sopra).
n corrisponde alla numerazione nel file score di Csound relativa a p1, p2, p3, p4
etc.
Un parametro di Cmask deve contenere almeno un generatore (const, item,
seg,
range, rnd, osc).
Ogni modulo di modifica successiva (mask, quant, accum) è opzionale. A
seconda del generatore scelto saranno possibili alcuni moduli ma non altri.

Precisione

prec <valore>

I numeri calcolati dall’ultimo modulo di ogni parametro sono arrotondati ad una


precisione decimale di 5 cifre, ovvero con 5 cifre decimali dopo la virgola.
Questo margine di precisione è modificabile attraverso l’istruzione prec - value
(0...5).
<val> definisce il numero desiderato di cifre decimali dopo la virgola, 0 dà
come risultato cifre intere, valori negativi non sono ammessi.

Generatori

Un generatore produce valori che possono essere processati successivamente


da una maschera di tendenza, un processo di quantizzazione o un processo di
accumulazione.
Correntemente sono implementati i seguenti generatori: const, seg, range, rnd,
osc e item.

Costante

const <valore>

const genera un valore costante.


È possibile il processamento con accum.

Esempio:

p1 const 2 ;numero costante di strumento

21
Lista

item <modo> <lista>

list legge un numero per volta da una lista secondo il modo specificato in
mode.

accesso modo esempio


ciclico cycle (1 2 3 4) -> 1 2 3 4 1 2 3 4 1 2 3
4
swinging swing (1 2 3 4) -> 1 2 3 4 3 2 1 2 3 4 3
2
permutazion heap (1 2 3 4) -> 3 2 1 4 3 1 4 2 2 3 4
i 1
casuale rando (1 2 3 4) -> 4 2 3 3 2 1 3 4 1 2 1
m 4

È possibile processare ulteriormente con accum.

Esempio:

p4 item heap (400 410 30.3 5000 1222) ;5 valori differenti

Segmento di funzione

seg <bpf>

seg legge valori di funzione dal segmento di funzione dato in bpf.


È possibile il processamento con quant e accum.

Esempio:

p3 seg (0 1 4 .3 6 1)

Generatore di numeri casuali

range <valore 1> <valore 2>

range genera numeri casuali distribuiti uniformemente nel campo di valori


{valore 1, valore 2}.
È possibile ulteriore processamento con quant e accum.

Esempio:

p2 range .1 .5 ;ritmi tra 0.1 e 0.5 secondi

22
Generatore di distribuzioni probabilistiche

rnd <func> [<valore 1 | bpf 1> [<valore 2 | bpf 2>]]

rnd genera numeri casuali secondo la distribuzione probabilistica stabilita in


func. Alcuni tipi di distribuzione hanno parametri opzionali per descrivere il loro
inviluppo con precisione. I valori di questi parametri opzionali possono essere
costanti (valore) o variabili nel tempo (bpf).

Distribuzioni probabilistiche:

tipo di distribuzione nome parametri valore osservazioni


opzionali predefinito
uniforme uni
lineare lin <valore> 1.0 > 0:
discendente
> 0:
ascendente
lineare, con rlin
incremento
triangolare tri
esponenziale, exp <valore | bpf> 1.0 solo valori > 0
decrescente
esponenziale, rexp <valore | bpf> 1.0 solo valori > 0
crescente
esponenziale, bexp <valore | bpf> 1.0 solo valori > 0
bilaterale
gaussiana gauss <valore | bpf> 0.1 0.5 deviazione
<valore | bpf> standard e
media {0 …
1}
cauchy cauchy <valore | bpf> 0.1 0.5 diffusione e
<valore | bpf> media {0 …
1}
beta beta <valore | bpf> 0.1 0.1 a e b {0 … 1}
<valore | bpf>
weibull wei <valore | bpf> 0.5 2.0 s {0 … 1} e t
<valore | bpf> {>0}

È possibile processare successivamente con mask, quant e accum.

Esempio:

p4 rnd gauss (0 .1 10 .6) .5

Oscillatori

osc <func> [<freq | bpf> [<phs> [<exp>]]]

23
osc genera numeri secondo una funzione periodica func in dipendenza di una
frequenza variabile o costante e una fase opzionale.

Funzioni periodiche:

funzione nome parametri osservazioni


sinusoide sin <val | bpf> [<val>] frequenza in cps, fase
{0 … 1}
cosinusoide cos <val | bpf> [<val>] frequenza in cps, fase
{0 … 1}
dente di sega, sawup <val | bpf> [<val>] frequenza in cps, fase
crescente {0 … 1}
dente di sega, sawdow <val | bpf> [<val>] frequenza in cps, fase
decrescente n {0 … 1}
quadrata square <val | bpf> [<val>] frequenza in cps, fase
{0 … 1}
triangolare triangle <val | bpf> [<val>] frequenza in cps, fase
{0 … 1}
esponenziale, powup <val | bpf> [<val>] frequenza, fase,
crescente [<val>] esponente
esponenziale, powdow <val | bpf> [<val>] frequenza, fase,
decrescente n [<val>] esponente

Possibile processamento successivo con mask, quant e accum.

Esempio:

p4 osc sin (0 2 3 .5 ipl 1) ; frequenza discendente da 2 a 0.5 Hz

Modificatori

Un modificatore processa i numeri che sono stati generati da un generatore


precedente o un altro modificatore.
Tutti i moduli modificatori sono opzionali, ma esiste solo un possibile ordine
(vedi sopra lo schema di processamento).
I modificatori implementati sono mask, quant e accum.

Maschere di tendenza

mask <low | bpf> <high | bpf> [map <exp>]

I valori generati da rnd o osc possono essere trasformati matematicamente


all’interno di un campo di valori variabile nel tempo – una maschera di
tendenza.
Sia i limiti inferiori (low) e superiori (high) possono essere costanti o variabili
nel tempo (bpf).

24
Il processo stesso di trasformazione matematica dipende dal parametro (map-
exponent) opzionale: valori prodotti da rnd o osc sono sempre nel campo di
valori {0 … 1}. All’interno di una maschera di tendenza saranno trasformati
attraverso una funzione (non lineare):

y = x^(2^exponent)

L’esponente predefinito è 0, il risultato una trasformazione lineare.


Esponenti positivi danno una funzione esponenziale. Ad esempio un esponente
1 rende il quadrato del numero di ingresso iniziale., 0.5 darà 0.25, 0.3 sarà
0.09, ovvero tutti i valori divengono sempre più piccoli (eccetto 0 e 1).
Esponenti negativi danno come risultato una funzione radicale. Ad esempio un
esponente -1 dà la radice quadrata del numero iniziale di ingresso, 0.5 dà 0.79,
0.3 dà 0.669, ovvero tutti i valori (eccetto per 0 e 1) divengono sempre più
grandi.

Esempio:

p4 rnd uni
mask 50 (2 100 10 200) ;limite inferiore 50, limite
superiore da 100 a 200

Quantizzazione

quant <q | bpf> [<s | bpf> [<o | bpf>]]

Una quantizzazione attrae i risultati di un modulo precedente all’interno di una


griglia q. La forza opzionale s {0 … 1} (valore predefinito 1) specifica sino a
quale punto la griglia ha effetto (1 rappresenta la quantizzazione totale, 0
annulla ogni tipo di quantizzazione). L’opzionale trasposizione o (valore
predefinito 0) sposta l’intera griglia di un valore predefinito. Ognuno dei tre
parametri può essere costante o variabile nel tempo (bpf).

Esempio:

p4 range 100 200


quant 20 [0 1] ; quantizzazione dinamica in una griglia del
tipo: 100,120,140,160,180,200

Accumulazione

accum <mode> [<low | bpf> <high | bpf>] [init <exp>]

L’accumulatore somma continuamente tutti i valori ad un valore iniziale init. Il


valore iniziale è opzionale ed è predefinito come 0. Per restringere i valori così
generati ad un certo ambito è possibile specificare i limiti inferiori e superiori in
maniera simile a quanto accade nella maschera di tendenza.
Il comportamento del processo di accumulazione intorno ai limiti può essere
determinato da uno dei tre modi di limitazione:

25
metodo modo parametro
senza limiti on
con limiti limit <low | bpf> <high | bpf>
con limiti e riflessione mirror <low | bpf> <high | bpf>
con limiti ciclici e chiusi wrap <low | bpf> <high | bpf>

Esempio:

p4 range -10 10
accum mirror 100 300 init 200

Bibliografia

[1] Ames, Ch. 1991. "A Catalog of Statistical Distributions..." Leonardo Music Journal 1(1)
[2] Dodge, Ch. / Jerse, Th. A. 1985. Computer Music Collier Macmillan, London
[3] Lorrain, D. 1980. "A Panoply of Stochastic 'Cannons'." Computer Music Journal 4(1)
[4] Roads, C. 1991. "Asynchronous Granular Synthesis." in Representations of Musical Signals,
MIT Press
[5] Roads, C. 1985. "Granular Synthesis of Sounds." in Foundations of Computer Music, MIT
Press
[6] Truax, B. 1988. "Real-time Granular Synthesis with a Digital Sound Processor." Computer
Music Journal 12(2)
[7] Wishart, T. 1994. Audible Design Orpheus the Pantomime
[8] Xenakis, I. 1992. Formalized Music Pendragon Press

Software
[a] Castine, P. Litter Package (Externals for MAX)
[b] Koenig, G.M. Project I, Project II
[c] Truax, B. POD programs
[d] Xenakis, I. Stochastic Music Program

Esempi

Un semplice strumento FM:

;; bells.orc
sr = 44100
kr = 4410
nchnls = 2
instr 1
;p2 istante di attivazione
;p3 durata
;p4 frequenza base
;p5 indice di fm
;p6 panorama stereo (L=0, R=1)
kenv expon 1,p3,0.01
kindx expon p5,p3,.4
a1 foscil kenv*10000,p4,1,1.143,kindx,1
outs a1*(1-p6),a1*p6

26
endin
;; --------------------

Una texture dinamica di campane FM:

;; bells parameter file


{
f1 0 8193 10 1 ;onda sinusoidale per foscil
}
f 0 20 ;campo di durata: 20 secs
p1 const 1
p2 ;densità decrescente
rnd uni ;da .03 - .08 secondi
;a .5 - 1 secondi
mask [.03 .5 ipl 3] [.08 1 ipl 3] map 1
prec 2
p3 ;durate crescenti
rnd uni
mask [.2 3 ipl 1] [.4 5 ipl 1]
prec 2
p4 ;griglia di frequenze restringente
rnd uni
mask [3000 90 ipl 1] [5000 150 ipl 1] map 1
quant [400 50] .95
prec 2
p5 ;indice FM diviene sempre più alto da
;2-4 to 4-7
rnd uni
mask [2 4] [4 7]
prec 2
p6 range 0 1 ;panorama stereo
;distribuito uniformemente
prec 2 ;tra destra e sinistra
;; --------------------

Lo stesso file .orc ma con liste e differenti campi:

;; bells parameter file


{
f1 0 8193 10 1 ;onda sinusoidale per foscil
}
f 0 10 ;campo 1
p1 const 1
p2 range .1 .3 prec 2 ;densità tra 100
;e 300 millisecondi
p3 range .7 1.2 prec 2
p4 item heap (300 320 450 430 190) ;5 frequenze in
;permutazioni casuali
p5 const 3 ;indice FM = 3
p6 range 0 1 prec 2
f 2 8 ;campo 2
p1 const 1

27
p2 seg (2 .01 5 .5 8 .01 ipl 1) prec 3 ;un’altra struttura di
densità
p3 const .2
p4 item random (2000 2020 2400 2450 5300 2310 2350)
p5 seg (2 3 5 7 8 3 ipl 1) prec 1 ;indice FM sincrono
;alla densità p2
p6 range 0 .5 prec 2 ;panorama stereo solo nella
;metà sinistra
f 5 15 ;field 3
p1 const 1
p2 item swing (.3 .05 .2 .1 1) ;un ritmo
p3 item swing (.3 .05 .2 .1 1) ;nessuna pausa, nessuna
;sovrapposizione
p4 range 100 200 prec 1
p5 seg [1 5] ;indice FM crescente
p6 range .3 .7 prec 2 ;solo al centro
;; --------------------

Una versione con passeggiate casuali.


Notare come differenti files creati da Cmask portino a differenti scores!

;; bells parameter file


{
f1 0 8193 10 1 ;onda sinusoidale per foscil
}
f 0 20 ;field 1
p1 const 1
p2 range -.2 .2 ;densità differenti
;da -200 a +200 millisecondi
accum limit .01 1 ;valori assoluti tra
;.01 e 1 sec
p3 range -.1 .1
accum mirror .1 1.5 init .5
p4 range -50 100 ;tendenza a frequenze acute
accum wrap 200 2000 init 300 ;ma wrapped al limite superiore
p5 const 3 ;indice FM = 3
p6 range 0 1 prec 2

Per un numero maggiore di esempi (dialtazioni/contrazioni temporali e altri)


vedere la cartella "CMask examples".

28

Vous aimerez peut-être aussi