INTRODUZIONE
ALL'INTERFACCIA MIDI
saramusica©
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.