Man page - gramophone2(1)
Packages contains this manual
Available languages:
en itManual
gramophone2
NOMEUSO
OPZIONI
DESCRIZIONE
CONCETTI BASE DI GRAMophone
GUIDA A GRAMophone
AUTORE
NOME
gramophone2 - GRAMophone eā un generatore algoritmico per la composizione musicale.
USO
gramophone2 [-c|-d] sourcefile [midifile]
OPZIONI
|
-c |
eā unāopzione che consente di effettuare semplicemente il controllo della sintassi del sorgente senza generare la musica. |
||
|
-d |
eā unāopzione che consente di attivare una modalitaā di debug, con stampa a video dei valori dei parametri della composition, dei parametri dei players e delle note generate. |
DESCRIZIONE
In GRAMophone la generazione della musica viene realizzata tramite lāuso di due tipi di grammatiche formali: la grammatica regolare di Chomsky (o di tipo 3) per un approccio TOP DOWN alla composizione e una versione ridotta della grammatica di Lindenmayer per un approccio BOTTOM UP.
CONCETTI BASE DI GRAMophone
GRAMophone si basa in parte su unāidea di Jon McCormack, da cui riprende il concetto di virtual player (musicista virtuale). Il player eā associato ad una traccia MIDI ed eā responsabile per lāinterpretazione delle istruzioni che gli vengono date, che nel caso generale significa suonare note (mandare messaggi MIDI). Lāinsieme dei player in GRAMophone forma lāorchestra, che esegue una compositione.
Un qualunque numero di player puoā essere impiegato in una composition, anche se le caratteristiche dellāhardware potrebbero fissare una limitazione sul numero.
Generalmente
ogni player suona un proprio strumento e ciascuno ha un
insieme differente di regole. Un singolo player eā
caratterizzato da un insieme di parametri comuni a tutta
lāorchestra e/o un insieme di parametri personali.
I parametri che caratterizzano lāorchestra sono:
il tipo di grammatica utilizzata per la generazione (Chomsky o Lindenmayer);
il metronomo;
la misura;
il numero di iterazioni per il processo delle produzioni.
Le caratteristiche personali di ciascun player sono:
il tipo di grammatica utilizzata per la generazione (Chomsky o Lindenmayer);
lo strumento suonato;
il canale MIDI a cui eā associato;
il numero di iterazioni per il processo delle produzioni.
Le note suonate dai player
mantengono uno stato corrente che consiste
di:
ottava
volume
durata
rilascio
Queste caratteristiche possono essere controllate parametricamente tramite la dichiarazione da parte di ciascun player di variabili ad esse associate. GRAMophone, infine, offre la possibilitaā di generare musica in maniera non deterministica, sia con la grammatica di Chomsky sia con quella di Lindenmayer.
GUIDA A GRAMophone
Di seguito viene riportata la piuā semplice composizione algoritmica che si puoā generare con GRAMophone, per introdurne i concetti fondamentali. Questa composizione genera semplicemente la nota LA e viene presentata sia con il metodo di Chomsky sia con quello di Lindenmayer.
composition "Give Me A" of "Schroeder" {
//this composition generates the A note with the Chomsky grammar
grammar chomsky
tempo 120
time_signature 4/4
%
player Schroeder {
instrument 0
%
@composition->A[,,,];
}
}
composition
"Give Me A" of "Schroeder" {
//this composition generates the A note with the Lindenmayer
grammar
grammar lindenmayer
tempo 120
time_signature 4/4
%
player Schroeder {
instrument 0
%
axiom->A[,,,];
}
}
LE PAROLE CHIAVE composition E of
Ogni composizione algoritmica deve iniziare con la parola chiave composition, a cui deve seguire una stringa (racchiusa tra doppi apici) con il nome della composizione. Di seguito eā richiesta la parola chiave of, a cui deve seguire unāaltra stringa con il copyright del brano.
IL BLOCCO DELLA COMPOSIZIONE
Il blocco della composizione eā delimitato dalle parentesi graffe. eā suddiviso in tre sezioni: una sezione per la definizione dei parametri della composizione, una per la dichiarazione e la inizializzazione delle eventuali variabili globali e una sezione orchestra, dove si definiscono i vari player che "suoneranno" il pezzo. Le prime due sezioni sono separate dal simbolo %.
LA PAROLA CHIAVE player
Ciascun player si definisce tramite la parola chiave player, seguita da un identificatore.
IL BLOCCO DEL player
Il blocco del player eā delimitato dalle parentesi graffe ed eā diviso in tre sezioni: una sezione per la definizione dei parametri della traccia associata al player, una parte di dichiarazione e inizializzazione per le eventuali variabili locali del player e la sezione per le regole formali. Le prime due sezioni sono separate dal simbolo %.
COMMENTI
In GRAMophone, i commenti sono C-like: devono iniziare con la coppia di caratteri ā/*ā e devono terminare con la coppia di caratteri ā*/ā. Fra lāasterisco e la barra non devono essere inseriti spazi. Tutto cioā che si trova tra queste coppie di simboli verraā ignorato dal parser di GRAMophone. eā possibile definire anche intere linee di commento. Le righe di commento iniziano con il simbolo // e terminano alla fine della riga, come nel caso dei due esempi iniziali.
Sezione di
definizione parametri della composition
Qui si dichiarano i parametri comuni a tutti i player
dellāorchestra. I
parametri che possono essere dichiarati sono:
grammar
resolution
iterations
tempo
time_signature
Questa sezione deve terminare con il simbolo %.
grammar
Questo parametro eā obbligatorio e definisce il tipo di grammatica che verraā usato per la generazione. Il tipo puoā essere chomsky o lindenmayer.
resolution
Questo parametro indica il numero di unitaā di tempo per la durata di 1/4. Se omesso, verraā usato il valore di default 480.
iterations
Questo parametro indica il numero di iterazioni per la generazione. Ha un significato differente a seconda del tipo di grammatica scelto, come verraā spiegato in seguito. Se omesso, viene utilizzato il valore di default 1.
tempo
Questo parametro indica il metronomo della composizione. Se omesso, viene utilizzato il valore di default 120.
time_signature
Questo parametro indica la misura della composizione. Se omesso, viene utilizzato il valore di default 4/4.
Sezione di dichiarazione variabili globali della composition
Le variabili servono per controllare parametricamente gli attributi di una nota e verrano spiegate in seguito.
Sezione di
definizione parametri del player
Qui si dichiarano i parametri personali e le variabili di
ciascun
player. I parametri personali che possono essere dichiarati
sono:
instrument
channel
iterations
Questa sezione deve terminare con il simbolo %.
instrument
Questo parametro indica il tipo di strumento da far suonare
al player.
Gli strumenti di GRAMophone coincidono con il set di
strumenti del
General MIDI. Il range di valori accettati va da 0 a 127; ci
sono
quindi 128 strumenti da cui scegliere. Di seguito viene
riportata una
tabella con il codice e lo strumento a cui esso fa
riferimento:
0 Piano
1 Brite Piano
2 HammerPiano
3 Honkey Tonk
4 New Tines
5 Digital Piano
6 Harpsichord
7 Clavi
8 Celesta
9 Glocken
10 Music Box
11 Vibes
12 Marimba
13 Xylophon
14 Tubular Bell
15 Santur
16 Full Organ
17 Percussive Organ
18 BX-3 Organ
19 Church Organ
20 Positive
21 Musette
22 Harmonica
23 Tango
24 Classic Guitar
25 Acoustic Guitar
26 Jazz Guitar
27 Clean Guitar
28 Mute Guitar
29 Overdrive Guitar
30 Distorted Guitar
31 Harmonics
32 Jazz Bass
33 Deep Bass
34 Pick Bass
35 Fretless Bass
36 Slap Bass 1
37 Slap Bass 2
38 Syntethized Bass 1
39 Syntethized Bass 2
40 Violin
41 Viola
42 Cello
43 Contra Bass
44 Tremolo String
45 Pizzicato
46 Harp
47 Timpani
48 Marcato
49 Slow String
50 Analog Pad
51 String Pad
52 Choir
53 Doo Voice
54 Voices
55 Orchestra Hit
56 Trumpet
57 Trombone
58 Tuba
59 Mute Trumpet
60 French Horn
61 Brass Section
62 Synthetized Brass 1
63 Synthetized Brass 2
64 Soprano Sax
65 Alto Sax
66 Tenor Sax
67 Baritone Sax
68 Sweet Oboe
69 English Horn
70 Bassoon Oboe
71 Clarinet
72 Piccolo
73 Flute
74 Recorder
75 Pan Flute
76 Bottle
77 Shakhukuhachi
78 Whistle
79 Ocarina
80 Square Lead
81 Saw Lead
82 Caliope Lead
83 Chiff Lead
84 Charang Lead
85 Air Chorus
86 Rezzo4ths
87 Bass & Lead
88 Fantasia
89 Warm Pad
90 Poly Synth Pad
91 Ghost Pad
92 Bowed Pad
93 Metal Pad
94 Halo Pad
95 Sweep Pad
96 Ice Rain
97 Soundtrack
98 Crystal
99 Atmosphere
100 Brightness
101 Goblin
102 Echo Drop
103 Star Theme
104 Sitar
105 Banjo
106 Shamisen
107 Koto
108 Kalimba
109 Scotland
110 Fiddle
111 Shanai
112 Metal Bell
113 Agogo
114 Steel Drums
115 Wood Blok
116 Taiko Drum
117 Melodic Tom
118 Synth Tom
119 Reverse Cymbal
120 Fret Noise
121 Noise Chiff
122 Seashore
123 Birds
124 Telephone
125 Helicopter
126 Stadium!!
127 Gunshot
Se il parametro instrument viene omesso, viene utilizzato il valore di default 0.
channel
Questo parametro indica quale canale Midi associare al player. I canali possibili sono 16. Il canale 10 eā speciale ed eā riservato alle percussioni. Se omesso, viene assegnato il valore di default 1.
iterations
Questo parametro indica il numero di iterazioni per la generazione. Ha un significato differente a seconda del tipo di grammatica scelto, come verraā spiegato in seguito. Se il parametro iterations eā presente anche nella parte dichiarativa della composition, questāultimo verraā ignorato.
Sezione di dichiarazione variabili locali del player
Le variabili servono per controllare parametricamente gli attributi di una nota e verrano spiegate in seguito.
COME SI SCRIVONO LE NOTE IN GRAMophone
Le note in
GRAMophone sono la prima categoria di simboli terminali in
GRAMophone.
GRAMophone usa la notazione inglese per il nome delle
note:
la nota LA eā A;
la nota SI eā B;
la nota DO eā C;
la nota RE eā D;
la nota MI eā E;
la nota FA eā F;
la nota SOL eā G;
I nomi delle note devono essere scritti obbligatoriamente in maiuscolo. I simboli bemolle e diesis sono rappresentati rispettivamente dal carattere ābā minuscolo e ā#ā; essi vanno scritti di seguito senza spazi al nome della nota: A#, Gb, eccetera.
ATTRIBUTI DELLE NOTE
Le note sono caratterizzate da quattro attributi: lāottava, lāintensitaā, la durata e il rilascio. In GRAMophone questi quattro attributi sono chiamati rispettivamente octave, velocity, duration e release. Lāattributo octave varia da -2 a 8, mentre gli attributi velocity e release variano da 0 a 127. Se la nota viene scritta senza specificare alcun attributo, vengono utilizzati i valori di default: 3 per lāottava, 64 per lāintensitaā e il rilascio, il valore di default corrente della resolution (semiminima) per la durata. Nellāesempio "Give me A" nel corpo della produzione eā scritto semplicemente A[,,,]. Questo vuol dire che viene generata una nota LA suonata alla terza ottava, della durata di 1/4 e con unāintensitaā ed un rilascio pari a 64.
DEFINIRE GLI ATTRIBUTI DI UNA NOTA
Per definire gli
attributi di una nota, questi vanno scritti
allāinterno di parentesi quadre che seguono senza
spazi il nome della nota. Ciascuna nota puoā avere al
massimo quattro attributi e puoā essere definito solo
un attributo per ciascun tipo.
Lāordine con cui vanno definiti gli attributi di
diverso tipo eā il
seguente:
ottava
intensitaā
durata
rilascio
Se non vengono
definiti tutti e tre i tipi di attributo, per quelli mancati
vengono utilizzati i valori di default.
Esempi di note con attributi sono i seguenti:
C[2, 50+60/2, 240*4,] - suona un Do alla seconda ottava, con unāintensitaā di 80, la durata di 960 (minima con resolution impostata a 480) ed un rilascio di 64 (valore di default);
Db[4,,,] - suona un RE bemolle alla quarta ottava, usando i valori di default per la velocity, la duration e la release;
F#[,,,] - usa i valori di default per tutti gli attributi;
Esempi errati sono i seguenti:
Db[3, 127, 960, 64, x] - troppi attributi (x eā una variabile).
PAUSE
Le pause sono
unāaltra categoria dei simboli terminali di
GRAMophone. Si indicano con la lettera R e accettano solo il
tipo di attributo duration. Se non specificato, viene
utilizzato il valore di default della resolution. La
definizione dellāattributo avviene in maniera analoga
alle note.
Esempi di pause sono i seguenti:
R[480/2] - una pausa che dura 240 (il tempo di una croma con resolution a 480);
R[] - usa il valore di default per lāattributo di tipo duration.
ACCORDI
Gli accordi sono
lāultima categoria di simboli terminali usati da
GRAMophone. Un accordo eā una serie di note suonate
simultaneamente. In GRAMophone le note suonate in un accordo
sono racchiuse tra due simboli āĖā.
Esempi di accordi sono i seguenti:
ĖC[,,,]E[,,,]G[,,,]Ė - suona un accordo di DO maggiore, utilizzando i valori di default per ciascuna nota.
ĖA[2,80,240,]C[2,,240,]E[2,,240,]Ė - suona un accordo di LA minore della durata di 1/8, con tutte le note suonate alla seconda ottava con un rilascio di 64 (valore di default), con la prima nota dellāaccordo suonata ad unāintensitaā di 80 e le restanti due ad unāintensitaā di 64 (valore di default).
RUOLO DI R NEGLI ACCORDI COMPLESSI
Non sempre le note in un accordo hanno la stessa durata. Ad esempio puoā capitare che in una battuta, mentre suona una nota C[2,,1920,] della durata di 4/4, il musicista debba contemporaneamente suonare quattro note della durata di una semiminima ciascuna nel seguente ordine: C[,,,], E[,,,], G[,,,], Bb[,,,]. Allāinterno dellāaccordo quindi bisogna trovare un modo per dire a GRAMophone che le note C[2,,1920,] e C[,,,] devono cominciare a suonare nello stesso istante, che E[,,,] deve iniziare a suonare dopo una pausa di 1/4, G[,,,] dopo 2/4 e Bb[,,,] dopo 3/4. In GRAMophone questo si scrive nella seguente maniera:
ĖC[2,,1920,]C[,,,]R[]E[,,,]R[960]G[,,,]R[1440]Bb[,,,]Ė
Cioeā davanti a ciascuna nota dellāaccordo si puoā definire una pausa che rappresenta il tempo che bisogna aspettare prima che la nota inizi a suonare.
Lāordine con cui si scrivono le note nellāaccordo non ha importanza. Lāaccordo precedente si puoā scrivere anche come:
ĖR[]E[,,,]C[2,,1920,]R[1440]Bb[,,,]C[,,,]R[960]G[,,,]Ė
IDENTIFICATORI
Alcune entitaā del linguaggio di GRAMophone, come ad esempio le variabili, le macros ed i simboli non terminali della grammatica di Chomsky, devono avere dei nomi per mezzo dei quali possano essere identificate. Questi nomi vengono chiamati identificatori e vengono scelti dal compositore. Gli identificatori usati dal linguaggio di GRAMophone riprendono gli identificatori del linguaggio Pascal. Infatti un identificatore eā formato da una lettera seguita da una sequenza di lettere o cifre. Gli identificatori di GRAMophone, inoltre, devono essere obbligatoriamente scritti in minuscolo.
Grammatica di Chomsky
SIMBOLI NON TERMINALI
Nella grammatica di Chomsky i simboli non terminali servono per dare una struttura e uno āstileā alla composizione musicale. I simboli non terminali si scrivono con un carattere ā@ā seguito senza spazi da un identificatore. La grammatica di Chomsky utilizzata da GRAMophone eā libera dal contesto, quindi la testa delle produzioni puoā essere solo un non terminale.
IL SIMBOLO NON TERMINALE @composition
eā il simbolo non terminale che corrisponde a quella che saraā la composizione finale del singolo player ed eā obbligatorio.
OPERATORE DI PRODUZIONE
eā definito dalla sequenza di caratteri ā->ā e separa la testa della produzione dal corpo della produzione.
CORPO DELLA PRODUZIONE
Puoā contenere sequenze di simboli terminali (note, pause e accordi) e di simboli non terminali. Ciascuna produzione deve terminare con un punto e virgola.
OPERATORE | (OR)
Una produzione puoā essere non deterministica, cioeā presentare due o piuā possibilitaā tra cui scegliere durante la generazione. Il corpo di una produzione non deterministica eā formato dalle varie possiblitaā separate dallāoperatore |. Ad esempio
@non_det->A[,,,]B[,,,]@Seq1|ĖA[,,,]B[,,,]C[,,,]Ė@Seq2R[]C[,,,];
eā una produzione non deterministica.
SIGNIFICATO DELLE ITERAZIONI NELLA GRAMMATICA DI CHOMSKY
Nella grammatica di Chomsky possono capitare produzioni che contengono cicli, cioeā produzioni nel cui corpo sono presenti simboli non terminali che fanno riferimento alla produzione che si sta processando, ad esempio:
@Sequenza1->B[,,,]A[,,,]C[,,,]@Sequenza1;
Per evitare un loop infinito durante la generazione, il simbolo non terminale @Sequenza1 viene processato un numero di volte pari al parametro iterations.
Grammatica di Lindenmayer
La grammatica di Lindenmayer tratta solo simboli terminali e quella adottata da GRAMophone puoā essere libera dal contesto o operare in un contesto polifonico. Nella testa delle produzioni possono esserci quindi singole note o accordi. Ogni produzione eā separata da un punto e virgola.
AXIOM
eā la produzione iniziale da cui parte la generazione. eā obbligatoria.
OPERATORE DI PRODUZIONE
eā definito dalla sequenza di caratteri ā->ā e separa la testa della produzione dal corpo della produzione.
OPERATORE | (OR)
Una produzione puoā essere non deterministica, cioeā presentare due o piuā possibilitaā tra cui scegliere durante la generazione. Il corpo di una produzione non deterministica eā formato dalle varie possibilitaā separate dallāoperatore |. Ad esempio
A[,,,]->A[,,,]B[,,,]|C[,,,]D[,,,];
eā una produzione non deterministica.
SIGNIFICATO DELLE ITERAZIONI NELLA GRAMMATICA DI LINDENMAYER
A ciascun passo vengono applicate alla stringa di note corrente tutte le produzioni della grammatica contemporaneamente. Il parametro iterations in questo caso rappresenta il numero di passi da effettuare.
Uso delle variabili
DICHIARAZIONE E INIZIALIZZAZIONE DELLE VARIABILI
GRAMophone
eā in grado di controllare gli attributi di una nota
parametricamente mediante lāuso di variabili. Queste
variabili si dichiarano nella parte dichiarativa del player
e possono essere di tipo octave, velocity, duration e msb.
Una variabile si dichiara scrivendo il tipo seguito da uno o
piuā identificatori separati da una virgola e la
dichiarazione devāessere terminata da un punto e
virgola. Per ogni player un identificatore puoā essere
dichiarato solo una volta.
Sono dichiarazioni corrette le seguenti:
velocity x, y;
octave oct, z;
duration w;
Sono dichiarazioni scorrette le seguenti:
velocity x, x;
octave z;
duration z;
Dopo la parte
dichiarativa e prima della grammatica eā possibile
inizializzare le variabili dichiarate mediante
lāoperatore =.
Un Esempio di dichiarazione e inizializzazione eā il
seguente:
velocity x;
x=0;
USARE LE VARIABILI CON LE NOTE
Le variabili si
usano nelle espressioni degli attributi della nota.
GRAMophone esegue il controllo dei tipi nelle espressioni,
quindi ad esempio non eā possibile sommare una
variabile di tipo octave con una di tipo velocitaā.
Un esempio di nota variabile eā la seguente:
velocity x;
duration z, w;
A[4,x,z+w,].
ESEMPIO
composition "Crescendo" of "Schroeder"
{
//this composition generates 64 A notes with a growing velocity
grammar chomsky
tempo 120
time_signature 4/4
iterations 64
%
player Schroeder {
instrument 40
%
velocity x=0;
@composition->[A,x=x+1,,]@composition;
}
}
CONDIZIONI
Nelle produzioni
sia della grammatica di Chomsky sia della grammatica di
Lindenmayer eā possibile definire delle condizioni
sulle variabili eventualmente presenti nel corpo delle
produzioni. Se la condizione eā verificata, la
produzione viene processata altrimenti no. Una condizione si
definisce subito dopo il nome della produzione tramite il
simbolo ā?ā seguito da una o piuā
espressioni booleane.
Gli operatori booleani sono:
! not
&& and
|| or
Gli operatori relazionali sono:
== uguale
!= diverso
< minore
> maggiore
<= minore o uguale
>= maggiore o uguale
Un esempio di produzione con condizione eā la seguente:
@battuta?x!=0->A[,x=x-10,,]@battuta;
il suo significato eā il seguente: fincheā x eā diverso da zero, genera la produzione @battuta, altrimenti no.
Discography, la libreria di GRAMophone
GRAMophone eā in grado di includere librerie esterne, che vengono chiamate discografie. Per includere in un file sorgente una discografia si usa la parola chiave discography, seguita dal nome del file che la identifica. Una discography puoā essere inclusa in qualsiasi punto del file sorgente, purcheā il suo contenuto sia in sintonia con la posizione del sorgente dove eā stata inserita.
Macros
eā possibile definire macros utilizzando la parola chiave define, seguita da un identificatore scritto obbligatoriamente in minuscolo e da una stringa chiusa tra doppi apici. Le macros vanno definite obbligatoriamente allāinizio della composizione sorgente, prima cioeā della parola chiave composition. Ad esempio, se vogliamo scrivere semplicemente a al posto di A[,,,], bisogna definire la seguente macro:
define a "A[,,,]"
LA FUNZIONE repeat()
La funzione repeat() prende come argomento un valore di tipo msb ed una sequenza di Chomsky o Lindenmayer. Permette di ripetere la sequenza inserita per un numero di volte pari al valore di tipo msb inserito.
LA FUNZIONE rand()
La funzione rand() prende come argomento unāespressione e ritorna un valore casuale minore del risultato dellāespressione.
Operatori melodici di GRAMophone
transpose()
Lāoperatore transpose() prende come argomento un valore di tipo msb ed una sequenza di Chomsky o Lindenmayer. Genera una sequenza in cui tutte le note della sequenza presa come argomento vengono trasposte di un numero di semitoni pari al valore di tipo msb inserito.
inversion()
Lāoperatore inversion() prende come argomento una sequenza di Chomsky o Lindenmayer. Genera una sequenza in cui gli intervalli tra la prima e le restanti note della sequenza presa come argomento vengono calcolati in direzione opposta.
retrograde()
Lāoperatore retrograde() prende come argomento una sequenza di Chomsky o Lindenmayer. Genera una sequenza contraria a quella inserita come argomento.
AUTORE
Giovanni Ferranti <giovanni_at_giovanniferranti_dot_it>