A cura di Raffaele Scalamandrè

MIDI
INTRODUZIONE AL MIDI
L’INTERFACCIA MIDI
I MESSAGGI MIDI
PROTOCOLLO MIDI
CATEGORIE DEI MESSAGGI MIDI
CHANNEL VOICE MESSAGE
CHANNEL MODE MESSAGE
I CONTROLLER
SYSTEM COMMON MESSAGE
SYSTEM REAL TIME MESSAGE
SYSTEM EXLUSIVE MESSAGE
GLI STANDARD
GM GENERAL MIDI LEVEL 1
GS GENERAL SYSTEM
YAMAHA XG
STANDARD MIDI FILE

Prefazione

Questo documento è stato realizzato con l’intenzione di spiegare cosa è il MIDI e come
è strutturato al fine di poter utilizzare al meglio un apparecchiatura MIDI, sapendo cosa
possiamo effettivamente fare con essa. Certo alla fine non sarete diventati degli esperti,
ma sicuramente sarete in grado di capire quale apparecchiatura fa al caso vostro e come
collegarla ad altri strumenti.
Il mio intento sarà quello di delineare gli aspetti più importanti del MIDI in modo chiaro e
comprensibile.

midi

INTRODUZIONE AL MIDI
Che cosa significa MIDI ?
MIDI è l’acronimo di Musical Instrument Digital Interface, quindi e’ una interfaccia digitale
per strumenti musicali. Per essere precisi il midi è un protocollo di comunicazione, cioè un
insieme di regole che permettono agli strumenti di scambiarsi informazioni. Perciò è stato
necessario costruire un’interfaccia di comunicazione e creare un linguaggio di comunicazione.
I messaggi che gli strumenti si possono scambiare sono svariati: suona il DO della terza
ottava, abbassa il volume al pianoforte (manda a destra il suono del violino ecc. Questi
messaggi viaggiano attraverso un cavo che collega gli strumenti. Attenzione, i messaggi midi
sono valori discreti compresi tra 0 e +5 volt, e non hanno niente a che fare con i messaggi
audio (che sono variazioni continue di tensione).Sono quindi segnali digitali cioè sequenze di
0 ed 1.
L’INTERFACCIA MIDI
Che cos’è l’interfaccia ?
L’interfaccia midi è il dispositivo (costruito secondo regole ben precise) che consente alle
apparecchiature di dialogare tra loro. Questa interfaccia utilizza delle porte d’ingresso e di
uscita per ricevere e trasmettere i dati. Queste porte si chiamano rispettivamente MIDI-IN e
MIDI-OUT. L’interfaccia garantisce il funzionamento della trasmissione.La trasmissione dei
dati avviene alla velocità di 31250 bit al secondo, ovvero 1 bit ogni 32 milionesimi di
secondo. Inoltre la trasmissione e’ asincrona, cioè ci vuole un bit di start e uno di stop oltre
agli otto bit della trasmissione. Quindi un byte che viene ricevuto o trasmesso dall’
interfaccia midi è composto da 10 bit (fig.1).
fig 1
Le porte MIDI
Le porte, come già è stato detto, si dividono in:
– MIDI-IN: è la porta che riceve i dati trasmessi da una apparecchiatura musicale.
– MIDI-OUT: è la porta che serve a trasmettere i dati ad altre apparecchiture musicali.
– MIDI-THRU: è una porta che bypassa il segnale ricevuto alla porta MIDI-IN.
Il segnale così, inalterato, può essere trasmesso ad un’altra apparecchiatura musicale.
E’ importante quando si esegue il collegamento di apparecchiature musicali ricordare che:
– La porta MIDI-IN va collegata ad una porta MIDI-OUT o MIDI-THRU.
– La porta MIDI-OUT deve essere collegata esclusivamente ad una porta MIDI-IN.
– La porta MIDI-THRU deve essere collegata esclusivamente ad una porta MIDI-IN.
I cavi per i collegamenti MIDI
I cavi utilizzati per la trasmissione di dati midi sono composti da cinque fili, anche se in
realtà ne vengono utilizzati solo tre.Il connettore per il collegamento alle porte MIDI-IN,
OUT, THRU è a cinque poli. Due poli e due cavi non vengono praticamente utilizzati.
fig. 2
Il connettore standard MIDI (fig 2) è di tipo DIN (Deutshe Industre Normen) a 5 pin:
– Il pin 1 e 3 sono riservati per sviluppi futuri (non utilizzati)
– Il pin 2 è collegato a massa (per evitare interferenze).
– Il pin 5 collega il filo necessario per la trasmissione dei dati, mentre il pin 4 collega
il cavo che assicura l’alimentazione corretta a + 5V.
I MESSAGGI MIDI
Che significa protocollo MIDI ?
Con l’interfaccia MIDI è possibile collegare insieme tastiere, expanders, computer,
pedaliere MIDI, e tutto ciò che abbia un’interfaccia MIDI.L’insieme di tutti i messaggi
che le macchine si possono scambiare costituiscono il protocollo MIDI.
Il protocollo MIDI dunque stabilisce le modalità con le quali devono essere inviati i
messaggi tra le varie porte MIDI di un dispositivo.
Come è composto un messaggio MIDI ?
Un messaggio MIDI è composto da un insieme di byte.Questi possono essere status byte e
data byte.Un messaggio MIDI deve sempre iniziare con uno status byte.
– Gli status byte servono per definire in modo univoco un comando. Il bit più
significativo dello status byte è uguale ad 1 e quindi uno status byte può
assumere un valore compreso tra 128 e 255.Gli status byte trasmettono quindi
il tipo di informazione (suona una nota, alza il volume, ecc).
– I data byte invece servono per inviare gli eventuali parametri necessari per un
corretto funzionamento dello status byte. Il bit più significativo del data byte è
uguale a 0 e quindi un data byte può assumere un valore decimale compreso tra
0 e 127.
Canali MIDI
I canali MIDI possono essere paragonati ai canali televisivi: Es. se vedo in tv canale 6,
ricevo i programmi che canale 6 diffonde via etere, e li vedono tutti quelli che sono collegati
e sintonizzati sullo stesso canale.Ad esempio chi è sintonizzato sul canale 1 non riceverà le
informazioni che il canale 6 trasmette e viceversa. Allo stesso modo funziona per i canali
MIDI dove le informazioni passano attraverso il cavo di trasmissione.
Certo che utilizzare un cavo MIDI per trasmettere un solo messaggio non sarebbe
conveniente e per questo motivo una linea MIDI è stata divisa in 16 canali (logici) di
comunicazione. Ognuno di questi canali di comunicazione può trasmettere una determinata
informazione che può essre ricevuta da un dispositivo sintonizzato su quel canale.
fig. 3
Binario Hex Canale
0000 00 1
0001 01 2
0010 02 3
0011 03 4
0100 04 5
0101 05 6
0110 06 7
0111 07 8
1000 08 9
1001 09 10
1010 0A 11
1011 0B 12
1100 0C 13
1101 0D 14
1110 0E 15
1111 0F 16
Esempio di un messaggio MIDI
Quando si preme un tasto ad una master keyboard collegata con un cavo midi ad un
expander essa manda l’informazione al modulo sonoro di che nota è stata premuta, con quale
intensità, in quale ottava. Il messaggio in questione si chiama NOTE ON. Lo status byte
informa che è stata suonata una nota.Il numero della nota che deve essere suonata viene
trasmesso dal primo data byte.Se la tastiera è dinamica (cioè in grado di stabilire con quale
intensità viene suonata una nota) allora quando si preme un tasto, oltre ai due messaggi
precedenti se ne aggiunge un terzo di tipo data byte, altrimenti se la tastiera non è sensibile
alla dinamica, viene inviato un valore di default (generalmente 64).
PROTOCOLLO MIDI
Struttura dei messaggi MIDI
I messaggi MIDI si dividono in due categorie principali:
– Channel Message
– System Message
Channel Message
I messaggi di canale sono quelli che possono essere indirizzati ad uno qualsiasi dei sedici
canali MIDI, essi si dividono in:
– Channel voice message
– Channel mode message
System Message
Questi messaggi, a differenza dei Channel message non contengono informazioni di canale,
bensì di sistema, quindi possono essere ricevuti da qualsiasi apparecchiatura MIDI.Essi si
dividono ulteriormente in:
– System common message
– System Real time message
– System exclusive message
CHANNEL VOICE MESSAGE
Note on – Note off
Quando ad una tastiera si preme un tasto, essa manda via MIDI un messaggio detto Note on
con le specifiche di che nota si tratta, con quale intensità si stà suonando (se la tastiera è
sensibile alla dinamica) e in quale ottava.
Un esempio di messaggio di Note on è il seguente:
Status Byte: 1001cccc (Note on), cccc indica il canale di trasmissione.
Data Byte 1: 0nnnnnnn (Key number) gli n indicano il numero della nota che deve essere
suonata.
Data Byte 2: 0vvvvvvv (Velocity number), le v indicano la velocità con cui si preme il tasto.
N.B. Le note sono rappresentate da numeri: 0 per la nota C, 2 per C#, 3 per D ecc.
Quando il tasto viene rilasciato la tastiera produce un messaggio di Note off che indica quale
tasto è stato rilasciato. Il messaggio è simile a quello di Note on:
Status Byte: 1000cccc (Note off), cccc indica il canale di trasmissione.
Data Byte 1: 0nnnnnnn (Key number) gli n indicano il numero della nota che deve essere
rilasciata.
Data Byte 2: 0vvvvvvv (Release velocity), le v indicano la velocità di rilascio del tasto.
N.B. In genere il messaggio Note off viene sostituito con un messaggio Note on con velocità
uguale a 0.
Pitch bender change
Quando viene spostata la leva pitch bender (quella specie di joystick che si trova di lato ad
alcune tastiere con la funzione di modificare l’altezza di una nota di un certo valore) della
tastiera essa ha l’effetto di produrre un messaggio MIDI in cui viene indicata l’altezza della
nota.Per definire il valore dell’incremento o decremento vengono utilizzati due data byte.
Un esempio di Pitch bender change è il seguente:
Status Byte: 1110cccc (Pitch bender change), cccc indica il canale di trasmissione.
Data Byte 1: 0nnnnnnn (MSB key number) gli n indicano un numero (binario) compreso tra
0 e 127.
Data Byte 2: 0vvvvvvv (LSB), le v indicano un numero (binario) compreso tra 0 e 127.
Control change
Questo messaggio descrive lo stato di un qualsiasi controller.
Status Byte: 1011cccc (Control change), cccc indica il canale di trasmissione.
Data Byte 1: 0nnnnnnn (Control number) gli n indicano il numero del controller da
modificare.
Data Byte 2: 0vvvvvvv (Controller position) , le v indicano il valore che il controller
assumerà.
Channel pressure
Questo messaggio serve per trasemttere in tempo reale ulteriori variazioni di pressione di un
tasto dopo che è stato premuto.
Status Byte: 1101cccc (Channel pressure), cccc indica il canale di trasmissione.
Data Byte 1: 0nnnnnnn (After touch) gli n indicano il valore della pressione.
Data Byte 2: non c’è.
Polyphonic key pressure
Questo messaggio è simile a quello precedente ma è capace di inviare le informazioni di
variazione di pressione di un tasto già premuto in modo indipendente per ogni nota.
Status Byte: 1010cccc (Polyphonic key pressure), cccc indica il canale di trasmissione.
Data Byte 1: 0nnnnnnn (Key number) gli n indicano il valore della nota a cui è associato il
data byte 2.
Data Byte 2: 0vvvvvvv(After touch), le v indicano il valore della pressione.
Program change
Questo messaggio serve per selezionare una patch di uno strumento della periferica.
Status Byte: 1100cccc (Program change), cccc indica il canale di trasmissione.
Data Byte 1: 0nnnnnnn (Preset number) gli n indicano il numero della patch da selezionare.
Data Byte 2: non c è.
CHANNEL MODE MESSAGE
I modi
Nel protocollo MIDI vi sono dei messaggi utilizzati per controllare le funzioni generali di uno
strumento musicale, si tratta dei messaggi di modo. Esistono tre stati fondamentali:
1) OMNI: stà a significare che lo strumento risponde a tutti i messaggi ricevuti
contemporaneamente su tutti e sedici i canali. Lo stato può essere ON o OFF.
2) POLI: significa che lo strumento viene suonato in maniera polifonica, ossia utilizza più di
una voce.
3) MONO: significa che lo strumento viene suonato in maniera monofonica (utilizza una sola
voce).
I modi disponibili sono ottenuti combinando gli stati appena descritti :
modo 1: Omni On / Poly
modo 2: Omni Off / Poly
modo 3: Omni On / mono
modo 4: Omni Off / mono
Omni mode on
Questo messaggio trasmette lo stato di Omni On.
Status Byte: 1011cccc (Control change), cccc indica il canale di trasmissione.
Data Byte 1: 01111100 (Omni mode on)
Data Byte 2: 00000000 (Ignorato)
Omni mode on
Questo messaggio trasmette lo stato di Omni Off.
Status Byte: 1011cccc (Control change), cccc indica il canale di trasmissione.
Data Byte 1: 01111101 (Omni mode off).
Data Byte 2: 00000000 (Ignorato).
Mono mode on
Questo messaggio trasmette lo stato di mono mode on.
Status Byte: 1011cccc (Control change), cccc indica il canale di trasmissione.
Data Byte 1: 01111110 (Mono mode on).
Data Byte 2: 0000vvvv (Ch Allocation), serve per sapere stabilire il numero di canali
utilizzati per ricevere e trasmettere voci monofoniche.
Poly on
Questo messaggio trasmette lo stato di Poly on.
Status Byte: 1011cccc (Control change), cccc indica il canale di trasmissione.
Data Byte 1: 01111111 (Poly on).
Data Byte 2: 00000000 (Ignorato).
Reset all
Per riportare tutti i controller in una posizione di default si utilizza questo messaggio.
Status Byte: 1011cccc (Control change), cccc indica il canale di trasmissione.
Data Byte 1: 01111001 (Reset all).
Data Byte 2: 00000000 (Ignorato).
Local control
Questo messaggio serve per poter scollegare o collegare il modulo sonoro dalla tastiera.
Per esempio se local control viene impostato ad off, la tastiera non è in grado di controllare il
generatore di suono interno.
Status Byte: 1011cccc (Control change), cccc indica il canale di trasmissione.
Data Byte 1: 01111010 (Local control).
Data Byte 2: 0vvvvvvv (On / Off) 00000000 = On, 01111111 = Off.
All note off
Questo messaggio serve a spegnere tutte le note che sono attive in un dato istante.
Status Byte: 1011cccc (Control change), cccc indica il canale di trasmissione.
Data Byte 1: 01111011 (All note off).
Data Byte 2: 00000000 (Ignorato).
I CONTROLLER
Cosa sono i controller ?
Quando si vuole alzare il volume di uno strumento, oppure come si dice in gergo panpottare il
suono (regolare il suono a destra o a sinistra) si fa ricorso ai controller.In realtà con i controller
è possibile gestire determinate funzioni che regolano lo stato di un suono. A questo scopo ci
sono due tipi di contoller: contoller continui e controller a interruttore. I primi permettono
di indicare variazioni di uno stato di cose, partendo da 0 fino ad arrivare a 127. Sono utilizzati
quindi per il volume, il balance, ecc. I controller a interruttore invece si comportano come
degli interruttori che attivano o disattivano una determinata funzione. Un valore compreso tra 0
e 63 indica il valore off, mentre un valore compreso tra 64 e 127 indica il valore on.
MSB – LSB
I Controller che vanno da 0 a 31 sono detti MSB ossia Most Significant Byte, che in italiano
significa byte più significativi, mentre i controller che vanno da 32 a 127 vengono chiamati
LSB, ossia Least Significant Byte (Byte meno significativi).
Un elenco dei 128 controller è in fig 4.
SYSTEM COMMON MESSAGE
Quarter frame
Questo messaggio serve per convertire il codice di sincronizzazione SMPTE in MTC (Midi
Time Code).
Status Byte: 11110001 (Quarter frame).
Data Byte 1: nnnnvvvv (Type / Data).
Data Byte 2: non c’è.
Song position
Permette di assegnare ad ogni beat di una sequenza un indirizzo assoluto.
Status Byte: 11110010 (Song position).
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14…15
16…19
20..31
32
33
34
35
36
37
38
39
40
41
42
43
44
Bank Select
Modulation wheel
Breath control
Non definito
Foot control
Portamento time
Data Entry
Channel Volume
Balance
Non definito
Pan
Expression Controller
Effect control 1
Effect control 2
Non definito
General #1,2,3,4
Non definito
Bank Select
Modulation wheel
Breath control
Non definito
Foot control
Portamento time
Data Entry
Channel Volume
Balance
Non definito
Pan
Expression
Effect control 1
45
46…47
48…51
52…63
64
65
66
67
68
69
70…79
80…83
84
85…90
91…95
96
97
98
99
1000
101
102…119
120
121
122
123
124
125
126
127
Effect control 2
Non definito
General #1,2,3,4
Non definito
Dumper pedal
Portamento on/off
Sostenuto on/off
Soft pedal on /off
Legato Footswitch
Hold 2
Sound Controller 1-10
General Purpose 5,6,7,8
Portamento control
Non definito
Effects 1,2,3,4,5 Depth
Data entry +1
Data entry -1
NRPN LSB
NRPN MSB
RPN LSB
RPN MSB
Non definito
All Sound Off
Reset All Controllers
Local control on/off
All note off
Omni mode off
Omni mode on
Poly mode on/off
Poly mode on
fig. 4
Data Byte 1: 0nnnnnnn (Puntatore 1).
Data Byte 2: 0vvvvvvv (Puntatore 2).
Song select
Questo messaggio permette di selezionare una song in un sequencer o in un altro dispositivo
simile.
Status Byte: 11110011 (Song select).
Data Byte 1: 0nnnnnnn (Number).
Data Byte 2: non c’è.
Tune request
Questo messaggio si utilizza per accordare lo strumento.
Status Byte: 11110110 (Tune request).
Data Byte 1: non c’è.
Data Byte 2: non c’è.
SISTEM REAL TIME MESSAGE
Sono messaggi di sincronizzazione ed hanno la caratteristica di avere solo Status Byte.
Clock
Viene utilizzato per sincronizzare le apparecchiature MIDI. Viene inviato 24 volte per ogni
nota di un quarto.
Status Byte: 11111000(Midi clock).
Data Byte 1: non c’è.
Data Byte 2: non c’è.
Start
Serve per posizionare tutte le apparecchiature all’inizio della song e farle partire in
registrazione o riproduzione.
Status Byte: 1111010 (Start).
Data Byte 1: non c’è.
Data Byte 2: non c’è.
Continue
Serve per riprendere le song da dove è stata interrotta.
Status Byte: 11111011 (Continue).
Data Byte 1: non c’è.
Data Byte 2: non c’è.
Stop
Serve per fermare la riproduzione o registrazione di tutte le apparecchiature collegate.
Status Byte: 11111100 (Stop).
Data Byte 1: non c’è.
Data Byte 2: non c’è.
Active sensing
Serve per tenere attive tutte le apparechiature MIDI collegate.
Status Byte: 11111110 (Active sensing).
Data Byte 1: non c’è.
Data Byte 2: non c’è.
System reset
Imposta tutte le apparecchiature collegate nelle condizioni di default.
Status Byte: 11111111 (System reset).
Data Byte 1: non c’è.
Data Byte 2: non c’è.
SYSTEM EXLUSIVE MESSAGE
Questi messaggi servono per accedere alle funzioni del dispositivo MIDI e per poterlo
programmare in maniera altrimenti impossibile. Il protocollo MIDI infatti non prevede per
esempio la modifica della curva di inviluppo di un timbro musicale, ma intervenendo con un
messaggio di sistema esclusivo direttamente al dispositivo è possibile effettuare questa
modifica. Ci sono molti parametri che si possono modificare con messaggi di sistema esclusivo
e per sapere quali sono bisogna vedere il manuale dello strumento MIDI.
Poichè ci sono diverse apparecchiature di marche differenti si è pensato di introdurre all’interno
di un messaggio di sistema esclusivo un ID. Cioè un codice identificativo che indica alle
apparecchiature aventi lo stesso ID che il messaggio di sistema esclusivo è per loro e tutte le
altre apparecchiature collegate, ma con ID differente, ignoreranno quel messaggio.
System exclusive
Status Byte: 11110000 (Sistema esclusivo)
Lo status bytes è seguito da una serie di byte che costituiscono l’informazione (compreso l’ID).
End of exclusive
Status Byte: 11110111 (Fine di messaggio di sistema esclusivo)
Indica la fine di messaggio di sistema esclusivo.
GLI STANDARD
Che cos’è il general midi level 1 ?
Quando si cambia uno strumento con il program change esso dà l’informazione ad un modulo
sonoro che a seconda dell’implementazione può far corrispondere il suono desiderato oppure un
altro suono completamente diverso da quello scelto.Ad esempio, se su di un sintetizzatore A la
patch 1 corrisponde ad un organo non è detto che la patch 1 di un sintetizzatore B sia uguale,
anzi potrebbe corrispondere tutt’altro strumento.
Si tratta quindi di stabilire uno standard in modo che tutti i sintetizzatori, sebbene con suoni
diversi, facciano corrispondere gli strumenti con patch già prestabiliti.Nel 1991 fu introdotto lo
standard GM, general MIDI level 1.
Uno strumento musicale per essere GM compatibile deve associare ad ogni valore di program
change una path stabilita.
La mappa degli strumenti GM con la patch corrispondente è rappresentata in fig. 5.
Inoltre per convenzione, uno strumento GM deve utilizzare il canale 10 per la batteria e le
percussioni.
Roland GS General System
Lo standard GS è un evoluzione dello standard general MIDI level 1 ed è stato introdotto dalla
Roland.Questo standard permette infatti di utilizzare più strumenti rispetto ai 128 consentiti dal
GM,e introduce nuovi tipi di messaggi e di controller.Il GS introduce il concetto di Bank
Select, esso unito al program change permette di avere 128 variazioni per ogni singolo
strumento. N.B. il numero di banchi a disposizione in un sintetizzatore
dipende esclusivamente dal produttore dello strumento e non dalle specifiche GS. Inoltre lo
standard GS permette di modificare effetti audio come il chorus e il reverbero ecc.
Yamaha XG
Lo standard XG fu introdotto dalla Yamaha nel 1994 e rappresenta un ulteriore evoluzione del
GM e GS.
Esso rappresenta lo standard più evoluto attualmente disponibile:è aumentato il numero di
strumenti,il numero di Drum Kit, il numero di effetti ecc.
Ovviamente lo standard XG è compatibile con lo standard GM level 1, ossia se suoniamo una
sequenza che rispetta le regole GM su di un modulo XG essa verrà suonata con gli stessi
strumenti che gli erano stati fissati per il GM.
Anche il viceversa vale, cioè suonare una base MIDI XG su di un modulo GM, ma ovviamente
si perdono tutti i vantaggi offerti dallo standard XG.Inoltre un sintetizzatore XG è in grado di
riprodurre correttamente le sequenze GS, previa trasmissione di un comando GS Reset.
fig. 5
Piano Bass Reed Synth Effects
1=Acoustic Grand Piano
2=Bright Acoustic Piano
3=Electric Grand Piano
4=Honkytonk Piano
5=Rhodes Piano
6=Chorused Piano
7=Harpsichord
8=Clavinet
33=Acoustic Bass
34=Electric Bass (finger)
35=Electric Bass (pick)
36=Fretless Bass
37=Slap Bass 1
38=Slap Bass 2
39=Synth Bass 1
40=Synth Bass 2
65=Soprano Sax
66=Alto Sax
67=Tenor Sax
68=Baritone Sax
69=Oboe
70=English Horn
71=Bassoon
72=Clarinet
97=FX 1 (rain)
98=FX 2 (soundtrack)
99=FX 3 (crystal)
100=FX4 (atmosphere)
101=FX 5 (brightness)
102=FX 6 (goblins)
103=FX 7 (echoes)
104=FX 8 (sci-fi)
Chromatic Strings Pipe Ethnic
9=Celesta
10=Glockenspiel
11=Music Box
12=Vibraphone
13=Marimba
14=Xylophone
15=Tubular Bells
16=Dulcimer
41=Violin
42=Viola
43=Cello
44=Contrabass
45=Tremolo Strings
46=Pizzicato Strings
47=Orchestral Harp
48=Timpani
73=Piccolo
74=Flute
75=Recorder
76=Pan Flute
77=Bottle Blow
78=Shakuhachi
79=Whistle
80=Ocarina
105=Sitar
106=Banjo
107=Shamisen
108=Koto
109=Kalimba
110=Bagpipe
111=Fiddle
112=Shanai
Organ Ensemble Synth Lead Percussive
17=Hammond Organ
18=Percussive Organ
19=Rock Organ
20=Church Organ
21=Reed Organ
22=Accordion
23=Harmonica
24=Tango Accordion
49=String Ensemble 1
50=String Ensemble 2
51=SynthStrings 1
52=SynthStrings 2
53=Choir Aahs
54=Voice Oohs
55=Synth Voice
56=Orchestra Hit
81=Lead 1 (square)
82=Lead 2 (sawtooth)
83=Lead 3 (calliope
lead)
84=Lead 4 (chiff lead)
85=Lead(charang)
86=Lead 6 (voice)
87=Lead 7 (fifths)
88=Lead 8 (bass + lead)
113=Tinkle Bell
114=Agogo
115=Steel Drums
116=Woodblock
117=Taiko Drum
118=Melodic Tom
119=Synth Drum
120=Reverse Cymbal
Guitar Brass Synth Pad Sound Effects
25=Acoustic Guitar (nylon)
26=Acoustic Guitar (steel)
27=Electric Guitar (jazz)
28=Electric Guitar (clean)
29=Electric Guitar (muted)
30=Overdriven Guitar
31=Distortion Guitar
32=Guitar Harmonics
57=Trumpet
58=Trombone
59=Tuba
60=Muted Trumpet
61=French Horn
62=Brass Section
63=Synth Brass 1
64=Synth Brass 2
89=Pad 1 (new age)
90=Pad 2 (warm)
91=Pad 3 (polysynth)
92=Pad 4 (choir)
93=Pad 5 (bowed)
94=Pad 6 (metallic)
95=Pad 7 (halo)
96=Pad 8 (sweep)
121=Guitar Fret Noise
122=Breath Noise
123=Seashore
124=Bird Tweet
125=Telephone Ring
126=Helicopter
127=Applause
128=Gunshot
Che cos’è un file MIDI
Un midifile è essenzialmente un file di testo nel quale vengono memorizzate le informazioni che
servono ad un sintetizzatore, un expander e via dicendo per riprodurre una song.
Per importare un midifile su di uno strumento è necessario che quest’ultimo abbia un lettore di
Floppy disk o un Hard disk su cui sono memorizzate le song. Il problema che è sempre
ricorrente quando si parla di file è lo standard da adottare, cioè come strutturare il file in
maniera tale che tutte le apparecchiature possano leggere correttamente lo stesso file. Se una
casa registra i dati per riprodurre una sequenza in modo proprietario è impossibile accedre al
file (e quindi interpretarlo correttamente) con dispositivi di altre marche.
E’ stato necessario introdurre quindi un formato standard di file MIDI in modo che tutti i
dispositivi potessero leggerli. In realtà il problema dello standard fu risolto nel 1986 (ancora
prima dell’avvento del GM) dalla Opcode System con l’introduzione di un file di scambio
standard per tutte le piattaforme hardware: SMF (Standard MIDI File).
SMF (Standard MIDI File)
Uno SMF viene comunemente chiamato file MIDI o file.mid poichè mid è l’estenzione che
utilizzano appunto questi file in ambito informatico. Questi file vengono codificati in formato
ASCII (American Standard Code for Information Interchange)e permette di scambiare le
informazioni tra un dispositivo ad un altro in maniera semplice e pratica utilizzando comuni
floppy disk o altri dispositivi di memorizzazione.
N.B. Gli Standard MIDI File non sono nè file General MIDI, nè XG e neppure GS !!! Sono
solamente un insieme di istruzioni MIDI che eventualmente possono seguire le raccomandazioni
GM,GS,XG.
Poichè i file MIDI sono file di testo essi occupano poco spazio in un disco.Questo permette di
salvare più midisongs in uno stesso disco. Generalmente un file MIDI non occupa più di 60KB,
a differenza di un file audio digitale che per essere registrato con una buona qualità ha bisogno
di 15 Megabytes c.a. per ogni minuto di registrazione.
Un file audio digitale contiene tutte le informazioni sullo spettro del suono, mentre un midifile
contiene solo le istruzioni che sono necessarie ad un sintetizzatore per riprodurre una song.
Quindi un suono digitale verrà riprodotto in maniera uguale per tutte le piattaforme, e la qualità
del suono dipenderà dalle casse con cui si ascolta, mentre per i midifile la qualità del suono
dipende esclusivamente dal tipo di expander o periferica in genere che si collega.
Ultimamente, con l’avvento del karaoke si è pensato di inserire all’interno del midifile anche il
testo della canzone in modo che sulle tastiere che lo permettono è possibile seguire la canzone
leggendo i testi sul display della tastiera stessa. Attenzione però, non tutte le basi midi contengono
i testi.
Formati di uno Standard MIDI File
Uno standard MIDI file si divide in tre formati:
– Formato 0: questo formato racchiude in una sola traccia tutti i dati. E’ il
formato più semplice di tutti e per questo motivo offre grande compatibilità.
– Formato 1: questo formato registra i dati MIDI su più tracce e quindi, a differenza del
formato 0, permette una rielaborazione delle stesse in maniera più comoda.
– Formato 2: questo formato è più raro da incontrare, ma permette di variare in ogni singolo
canale il tempo il meter key ecc. in modo che in uno stesso file si trovino più song.
I Meta eventi
I meta-eventi rappresentano un complemento importante negli SMF. Con essi vengono memorizzati:
i nomi delle traccie, la divisione del tempo, la velocità, la tonalità, il testo del brano, il
copyright e altro.

Raffaele Scalamandrè

Prefazione
Questo documento descrive in maniera approfondita il formato SMF, lo standard utilizzato per salvare
brani midi su disco. E’ rivolto a tutti gli appassionati del midi e in particolare a coloro che hanno
intenzione di sviluppare software musicale che utilizza questo formato. E’ una rielaborazione di alcuni
howto, documenti e manuali, sparsi per la rete, rigudanti l’argomento Standard Midi File.

Introduzione
Lo Standard Midi File nasce dall’esigenza di poter registrare su file dati midi. E’ stato pensato per
garantire la portabilita’ su tutti i tipi di sistemi operativi.
E’ semplicemente un file di testo (ASCII), suddiviso in due blocchi di dati: L’ header chunk e il track
chunk. L’ header chunk e’ il primo blocco di un midifile e contiene informazioni generali riguardanti il
tipo di file, il numero di tracce e il numero tiks per quarto di nota
Attualmente esistono tre tipi di formati SMF:
– il tipo 0, contiene un unico track chunk che racchiude le informazioni di tutti i canali midi.
– il tipo 1, contiene piu’ track chunk, uno per ogni traccia.
– il tipo 2 ,contiene piu’ blocchi e si possono registrare piu’ brani in un unico file.
Header chunk
Come ho già detto l’header chunk è il primo blocco di un midifile. E’ strutturato nella forma seguente:
I primi 4 byte servono a identificare il midifile
I successivi 4 byte indicano la lunghezza dell’header chunk (a partire dal byte successivo)
ff ff indica il tipo di midifile (0, 1, 2).
nn nn indica il numero di tracce presenti nel midifile (1 se il formato e’ 0).
dd dd indica il numero di ticks per quarto di nota. Questa informazione serve a determinare la durata di
ogni evento midi in base al valore del delta time.Il delta time è un informazione contenuta all’interno del
track chunk e verrà spiegato in seguito.
Track chunk
Strutturalmente il track chunk è simile all’ header chunk, ma contiene informazioni relative alle tracce
della base midi. Ogni traccia contiene eventi midi riguardanti un canale. Un evento può essere: suona una
nota, rilascia una nota… etc.
un Track chunk si presenta, grosso modo, nella forma seguente:
Come per l’header chunk i primi 4 byte servono ad identicicare il blocco
I secondi 4 byte servono a indicare la lunghezza del track chunk (partendo dal byte successivo).
I successivi byte contengono informazioni di messaggi, di metaeventi o di exlusive messages.
FF 2F 00 indica la fine del blocco.
– Messaggi
Un messaggio è formato da un gruppo di byte indicanti il delta-time e altri byte indicanti il tipo di evento
(note on, note off, etc). Il delta time è l’intervallo di tempo espresso in ticks che divide due eventi. Ad
esempio se il messaggio in questione dice di suonare una nota per alcuni secondi, le
HEX 4D 54 68 64 00 00 00 06 ff ff nn nn dd dd
ASCII M t h d
HEX 4D 54 72 6B xx xx xx xx … FF 2F 00
ASCII M t r k
informazioni relative al tempo vengono codificate nel delta-time, mentre le informazioni relative alla
nota da suonare vengono memorizzate nei byte successivi.
Esempio di messaggio:
Per ottimizzare lo spazio su disco il valore di delta time viene compresso così da ottenere valori a
lunghezza variabile.
Il delta time viene scritto su gruppi di byte così suddivisi:
Ogni byte è formato da otto bit. Il bit più significativo (il primo partendo da sinistra) serve ad indicare se
c’è un altro byte successivo. E’ a 1 se c’è, 0 altrimenti.
L’informazione riguardante il delta-time sta nei restanti 7 bit di ogni gruppo di byte.
Per capire meglio il metodo di compressione si faccia riferimento alla tabella di seguito riportata.
Se due eventi devono essere suonati contemporaneamente il valore di delta-time per quegli eventi è 0.
Il delta time rappresenta solo un modo per ricavare un evento midi ma non è esso stesso un evento midi.
Per scrivere una procedura in un linguaggio di programmazione che estrae il delta time da un messaggio
basta considerare la sommatoria dei 7 bit più significativi (eccetto il primo) per ogni gruppo di byte.
– Meta eventi
I meta eventi rappresentano informazioni aggiuntive ad un midifile. Non sono eventi midi, ma messaggi
che contengono informazioni di vario tipo: copyright, nome delle tracce, la misura del tempo, etc.
La struttura è simile a quella di un messaggio di evento midi:
Il valore esadecimale FF indica l’inizio di un metaevento.
Il valore tt indica il tipo di metaevento (guarda tabella meta eventi).
ll indica la lunghezzda espressa in byte del metaevento.
I metaeventi vengono generalmente espressi col codice ASCII.
Per fare basi midi che abbiano il testo della canzone(karaoke) si utilizzano i metaeventi. Un altro modo
possibile è quello di utilizzare i messaggi di sistema esclusivo.
-Messaggi di sistema esclusivo.
Servono per mandare messaggi midi esclusivamente ad un apparecchiatura o ad un gruppo di
apparecchiature dello stesso tipo. Molte volte viene utilizzato per poter programmare apparecchiature
midi. Si possono infatti con questi messaggi impostare alcuni parametri proprietari di uno strumento.
Vista l’importanza di questi messaggi c’è il modo di includerli negli standard midi file.
La struttura è molto simile a quella dei metaeventi:
Alcuni messaggi, tra i più comuni, di sistema edsclusivo sono riportati nella tabella sys-ex.
Ricapitolando, un track chunk contiene informazioni relative ad una traccia midi, il blocco può
valore di delta time lunghezza del messaggio messaggio
Numeri Hex Codifica Hex Codifica Bin
00000000 00 00000000
00000040 40 01000000
0000007F 7F 01111111
00000080 81 00 10000001 00000000
00003FFF FF 7F 11111111 01111111
00004000 81 80 80 10000001 10000001 00000000
valore di delta time FF (inizio del metaevento) tt (tipo di m.e.) ll (lunghezza del m.e.) Meta evento
valore di delta time F0 (inizio del sys-ex) ll (lunghezza del sys-ex) Dati Sys-Ex F7 (fine del sys-ex)
dcontenere al suo interno messaggi di eventi midi, metaeventi e messaggi di sistema esclusivo.
In precedenza si è parlato di tick. E’ la divisionde per quarto di nota rappresentata da un delta-time nel
file.
Il valore del tick per quarto di nota è indicato nell’header chunk (dd dd), il primo dei due byte indica
il formato utilizzato: -24, -25, -29, -30 corrisponde ai quattro standard SMPTE e ai formati Midi Time
Code e rappresentano il numero di frames per secondo. Il secondo byte è la risoluzione di un frame.
Valori tipici sono: 4 (per la risoluzione Midi Time Code), 8,10,80 (per la risoluzione a bit), oppure
100.Si può utilizzare il sistema basato su tracce time-code oppure quello basato su millisecondi
specificando 25 frames/sec e una risoluzione di 40 unita’ per frame.
lista di metaeventi
lista di sys-ex
Note sul copyright
Tutti i diritti sono riservati. Questo documento è distribuito gratuitamente a scopo didattico.Nessuna
parte di questo documento può essere riprodotta, memorizzata in sistemi d’archivio, o trasmessa in
qualsiasi altra forma o mezzo, elettronico, meccanico, fotocopia, a scopo di lucro o senza la preventiva
autorizzazione scritta dell’autore.
Raffaele Scalamandrè , e-mail: scalaman@cs.unibo.it Bologna 27/03/2000
Tipo di m.e. Descrizione
01 E’ un evento di testo usato per descrivere il nome di una traccia o il
nome di uno strumento.
02 Evento di copyright. In genere si trova come primo evento della traccia 1
03 Evento di testo che indica il nome della traccia.In un midifile formato 0,
o inserito nella prima traccia in un file formato 1, indica il nome del
brano
04 Evento di testo. Serve ad indicare il nome di uno strumento
05 Evento di testo per inserire i testi nel brano (in sillabe)
06 Evento di testo che in un punto stabilito della sequenza lo marca con il
testo
2F Fine della traccia
51 Evento di tempo. indica quanti millisecondi ci devono essere per quarto
di nota.
58 Evento per descrivere la divisione del brano
59 Evento indicante la tonalita’
Messaggio di systema esclusivo Descrizione
F0 7E 7F 09 01 F7 GM ON, resetta i parametri dello strumento
F0 43 10 4C 00 00 7E 00 F7 XG ON, resetta i parametri di uno
strumento XG compatibile (Yamaha),
preparandolo a ricevere messaggi XG
F0 41 10 42 12 40 00 7F 00 41 F7 GS ON, resetta i parametri di uno strmento
GS compatibile (Roland, Yamaha),
preparandolo a rievere messaggi GS.

Webzine