INTRODUZIONE ALL'INTERFACCIA MIDI
Ritorna alla homepagesaramusica©

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 .Sono quindi segnali digitali cioè sequenze di0 ed 1.
L'INTERFACCIA MIDI
Che cos'è l'interfaccia ?
L'interfaccia midi è il dispositivo 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 all interfaccia midi è composto da 10 bit
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 apparecchiature 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.
Il connettore standard MIDI è di tipo DIN (Deutshe Industre Normen) a 5 pin:
- Il pin 1 e 3 (non utilizzati)
- Il pin 2 è collegato a massa.
- 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.
- 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
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ò essere ricevuta da un dispositivo sintonizzato su quel canale.
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 trasmettere 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: N.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: N.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: Significa 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).
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: N.C.
Song position
Permette di assegnare ad ogni beat di una sequenza un indirizzo assoluto.
Status Byte: 11110010 (Song position).

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: N.C.
Tune request
Questo messaggio si utilizza per accordare lo strumento.
Status Byte: 11110110 (Tune request).
Data Byte 1: N.C.
Data Byte 2: N.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: N.C.
Data Byte 2: N.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: N.C.
Data Byte 2: N.C.
Continue
Serve per riprendere le song da dove è stata interrotta.
Status Byte: 11111011 (Continue).
Data Byte 1: N.C.
Data Byte 2: N.C.
Stop
Serve per fermare la riproduzione o registrazione di tutte le apparecchiature collegate.
Status Byte: 11111100 (Stop).
Data Byte 1: N.C.
Data Byte 2: N.C.
Active sensing
Serve per tenere attive tutte le apparechiature MIDI collegate.
Status Byte: 11111110 (Active sensing).
Data Byte 1: N.C.
Data Byte 2: N.C.
System reset
Imposta tutte le apparecchiature collegate nelle condizioni di default.
Status Byte: 11111111 (System reset).
Data Byte 1: N.C.
Data Byte 2: N.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 peresempio 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.
Dato che 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.
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 accedere 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.
Dato che 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.
M.D.

Ritorna alla homepage