-> MIDI e sequencer -> Il protocollo MIDI

Tutti quelli che si accingono anche solo per curiosità a fare musica con un qualsiasi strumento elettronico, sia esso una tastiera o un software dedicato, si sono imbattuti prima o poi nel MIDI.
In questo tutorial cercheremo innanzitutto di chiarire che cos'è il MIDI, quali sono gli scopi per i quali è stato creato, e come funziona nella generalità dei casi.
Per informazioni più dettagliate rinviamo ad un prossimo tutorial.

Il MIDI è un linguaggio standard di comunicazione digitale utilizzato per scambiare informazioni tra strumenti musicali.
L'acronimo M.I.D.I. sta per Musical Instrument Digital Interface, ossia Interfaccia Digitale per Strumenti Musicali.
L'elenco di istruzioni MIDI viene detto protocollo MIDI ed è stato introdotto ufficialmente nel 1983 da un consorzio di produttori con l'intento di permettere a macchine - anche se prodotte da diverse marche - di comunicare tra loro.
Per essere in grado di comunicare mediante il protocollo MIDI, un dispositivo deve essere dotato di un hardware specifico, detto interfaccia MIDI, che fornisce le connessioni necessarie. Vedremo più avanti quali sono queste connessioni e come funzionano.

Una cosa che è necessario comprendere subito è che il protocollo MIDI non contiene informazioni audio: è importante infatti distinguere immediatamente il MIDI dai formati audio (WAV, PCM, IFF, tanto per citarne qualcuno), evitando la confusione che a volte si genera quando si incontra il formato .mid che è associato ai file che contengono informazioni MIDI.

Per capire invece che cosa il MIDI effettivamente è, immaginiamo una ipotetica situazione in cui abbiamo a disposizione due tastiere - poniamo ad esempio due sintetizzatori - che dispongano entrambi di interfaccia MIDI, e che noi vogliamo sfruttare questa possibilità.
Colleghiamo allora queste due tastiere: per semplicità, limitiamoci a dire che ad una uscita (MIDI OUT) della prima tastiera, collegheremo un ingresso (MIDI IN) della seconda. Bisogna tenere degli accorgimenti nell'effettuare questo collegamento, ma noi per ora supponiamo che basti inserire il cavo per rendere attivo il collegamento e per trasmettere le informazioni.
Ora, accese entrambe le tastiere, teniamo il volume aperto sulla prima tastiera, che è quella che invierà le istruzioni MIDI, in quanto collegata tramite un OUT (si dirà quindi che la prima tastiera è il dispositivo Master), e mettiamo a zero il volume sulla seconda, che è invece la tastiera che riceverà i comandi MIDI, in quanto collegata tramite un IN (e verrà detta dispositivo Slave, schiavo, cioè, del dispositivo Master).
Andiamo allora a suonare la prima tastiera, cioè il Master.
Come è logico aspettarsi, sentiremo i suoni di questa tastiera (se le uscite sono collegate ad un'amplificazione, ovviamente) e, andando a modificare il suono della tastiera, o a selezionarne un altro (detto in genere programma), udiremo dalle uscite del sintetizzatore il risultato di questi cambiamenti.
Proviamo ora ad invertire la situazione: togliamo il volume alla prima tastiera e alziamolo alla seconda. Suoniamo ancora però la prima tastiera. Sentiremo stavolta i suoni della seconda tastiera, pur non toccandone direttamente i tasti. Qualsiasi cosa facciamo sulla prima (suonare più o meno forte, utilizzare il modulation wheel o modificare il pitch, incrementare di 1 il numero di programma utilizzato) avverrà sulla seconda (diamo per scontato che tutte queste possibilità siano implementate e attive su entrambe le tastiere). I suoni che sentiremo saranno sempre però quelli sintetizzati dalla seconda tastiera: se ad esempio il Master è una tastiera che dispone di suoni campionati da strumenti classici, mentre lo Slave è un acido synth con suoni all'avanguardia, non potremo far altro che riprodurre questi ultimi nella situazione descritta, e mai e poi mai dalla seconda tastiera sentiremo il morbido suono di un piano a coda presente invece nei banchi di memoria della tastiera Master.
Accade insomma che i dati MIDI generati dalla tastiera Master in termini di pressione dei tasti e dei controlli della tastiera viaggiano tramite il collegamento MIDI e vengono applicati allo Slave; lo stesso non avviene però per le caratteristiche timbriche che restano invece quelle dello strumento che genera il suono.

Questo esempio, che nella sua semplicità può apparire ingenuo, ci presenta però esattamente la situazione tipica per la quale il MIDI è stato pensato: suonare uno strumento tramite un altro, conservando tutte le informazioni possibili della performance.
In pratica potremmo dire che un trasmissione MIDI contiene lo "spartito" della musica che lo strumento di destinazione dovrà andare a riprodurre.

Vediamo innanzitutto quali sono le possibili connessioni hardware di un'interfaccia MIDI: esse si distinguono essenzialmente in MIDI IN, OUT e THRU. Le connessioni IN e OUT agiscono esattamente come visto nell'esempio, e non hanno bisogno di particolari spiegazioni. La porta THRU ha invece una funzione particolare: essa manda in uscita le istruzioni che il dispositivo ha ricevuto sulla porta IN, rendendo così possibile configurare quella che viene definita cascata MIDI.



Un primo strumento (Master) genera il segnale MIDI, e attraverso una porta MIDI OUT lo invia ad un a porta MIDI IN di un altro dispositivo (Slave). Quest'ultimo, oltre ad eseguire la parte di istruzioni che gli sono destinate, invia dalla porta MIDI THRU una copia esatta delle istruzioni ricevute, che vengono ricevute da un ulteriore dispositivo Slave tramite il proprio MIDI IN, e così via.
C'è la possibiltà di trovare porte OUT/THRU: queste possono essere configurate per fungere da porte OUT o Thru a seconda della necessità.
I dati MIDI viaggiano su cavi a 5 pin (di cui però solo 3 utilizzati) in modo seriale, ossia uno di seguito all'altro. Questo potrebbe sembrare un controsenso, in quanto spesso molte note vengono suonate contemporaneamente. In realtà, a meno di eventuali problematiche a livello hardware. la velocità di trasmissione è sufficiente perchè la serialità dei dati non venga percepita dall'orecchio.



Dall'introduzione del protocollo MIDI ad oggi le istruzioni di base sono sempre le stesse, sebbene siano state introdotte nuove istruzioni e nuovi formati di cui però qui non ci occuperemo, rinviando ad un prossimo tutorial sull'argomento.
Andiamo qui di seguito a vedere quali sono le istruzioni principali.
Innanzi tutto parliamo dei canali.
Un messaggio MIDI è indirizzato ad uno di 16 differenzti canali disponibili (espansi a 32 o oltre in certi casi, ma ci atterremo per ora ai messaggi e alle specifiche standard). Ogni canale costituisce in pratica l'indirizzo del messaggio: se ad uno strumento è assegnato uno specifico canale, questo eseguirà solo le istruzioni relative a quel canale, ignorando tutte le altre.
La differenziazione delle istruzioni in canali consente la cascata MIDI di cui abbiamo parlato precedentemente, in quanto consente ad ogni strumento di riconoscere le istruzioni ad esso assegnate.
E' possibile anche inviare istruzioni su tutti i canali (OMNI) oppure istruire uno strumento in modo che riceva su tutti i canali.
E' anche molto diffuso il caso in cui uno strumento multitimbrico possa ricevere dati su più canali differenti, assegnando ogni canale ad un proprio strumento interno.
Ci sono poi quelle che vengono dette istruzioni di stato, in quanto definiscono lo stato di una specifica nota su un canale.
Le istruzioni di stato principali sono l'istruzione NOTE ON (nota attiva), che viene impartita nell'istante in cui si preme un tasto (questa è un'immagine esemplificativa, in realtà le istruzioni MIDI possono essere scritte e inviate senza che sia necessario suonare materialmnete uno strumento) e l'istruzione NOTE OFF (nota inattiva) che viene impartita nell'istante in cui il tasto viene rilasciato.
All'istruzione di note on seguono informazioni quali la VELOCITY, che segnala l'intensità con la quale è stato premuto il tasto.
Vi è poi il comando di AFTERTOUCH, che definisce (su 128 valori possibili) quanta pressione viene esercitata su un tasto dopo averlo premuto. All'aftertouch vengono in genere assegnate modifiche del suono (volume, intonazione, modulazione) che avvengono sullo strumento ricevente.
Un altro messaggio di stato molto comune è il PITCH BEND, che si riferisce alle variazioni in altezza di una nota, indicando modifiche di intonazione su 128 possibili valori.
Un'istruzione molto utile è il PROGRAM CHANGE, in grado di assegnare un determinato programma di uno strumento MIDI su un canale. Ad esempio, su una tastiera dove lo strumento 1 è un pianoforte, e lo strumento 31 un basso, un PROGRAM CHANGE001 (abbreviato in PG001) assegnerà alla tastiera il suono di piano, con il quale saranno suonate tutte le successive note su quel canale, fino ad un successivo PG031, con il quale si farà sì che tutte le note suonate successivamente siano prodotte con il suono di basso.
Vi sono poi i messaggi di controller, come il pedale di sustain, il controllo del volume, un valore relativo alla sintesi del suono, apertura di un effetto e così via, che sono specifici dei singoli strumenti, in base alle caratteristiche di ognuno, seppur variando sempre nel range di valori da 0 a 127.
Chiudiamo questa veloce carrellata sulle istruzioni con due istruzioni un po' particolari.
La prima è denominata ALL NOTES OFF, e dà un NOTE OFF simultaneo a tutte le note su tutti i canali; essa si rende necessaria quando, per errore, una nota lanciata con un NOTE ON non venga chiusa dal NOTE OFF corrispondente. Spesso questa istruzione viene impartita con un tasto chiamato "MIDI panic", con riferimento appunto alla situazione in cui si senta una nota riprodotta da un qualche strumento senza però riuscire a comprenderne la provenienza.
La seconda è il SYSTEM EXCLUSIVE, messaggi che possono essere interpretati solo da specifici modelli, quindi esclusivi, appunto, di un determinato sistema. Il System Exclusive viene ad esempio utilizzato tra tastiere della stessa marca per trasmettersi dati relativi a banchi di suoni (forme d'onda, caratteristiche dei controlli). Un System Exclusive inviato ad uno strumento non in grado di interpretarlo restituirà semplicemente un messaggio d'errore.

<< Indice