Questo articolo descrive l'architettura MIDI generica, indipendentemente da qualsiasi implementazione della piattaforma, API o funzionalità specifiche della piattaforma.
Concetti principali
Eventi
Il protocollo MIDI è progettato per la comunicazione basata su eventi. Un evento è un'indicazione che qualcosa è accaduto o accadrà in un determinato momento. Gli eventi MIDI sono rappresentati da messaggi, ovvero pacchetti di informazioni atomici.
Trasporto
I messaggi MIDI vengono codificati e inviati tramite un livello di trasporto, abbreviato in transport, che invia i dati MIDI non elaborati al destinatario, che poi decodifica i dati in messaggi.
I trasporti MIDI basati su hardware includono:
- Loop di corrente MIDI 1.0 con connettore DIN a 5 pin
- USB
- Bluetooth Low Energy (BLE)
Rappresentazione del messaggio
Una specifica di trasporto MIDI descrive come trasmettere i messaggi. Sebbene il pacchettizzazione dei messaggi sia specifica per il trasporto al livello più basso, a un livello superiore le applicazioni possono considerare una sequenza di messaggi in ordine di tempo come un stream di byte delimitato. Questo è possibile perché ogni messaggio contiene informazioni sufficienti per determinare la lunghezza totale del messaggio, a condizione che sia nota l'inizio del confine del messaggio.
La maggior parte dei messaggi MIDI è breve (da uno a tre byte), ma è possibile inviare messaggi più lunghi tramite SysEx.
Timestamp
Un timestamp è un'etichetta facoltativa associata a un messaggio all'origine o alla ricezione, a seconda del trasporto. Il timestamp è espresso in unità di tempo come secondi o tick.
In assenza di un timestamp esplicito, il sistema deve sostituire il timestamp del messaggio immediatamente precedente o l'ora corrente. La precisione di questi timestamp, espliciti o impliciti, è un aspetto importante dell'affidabilità di un sistema basato su MIDI.
I timestamp non fanno parte del protocollo MIDI 1.0. Spesso vengono aggiunti come parte di un'API specifica della piattaforma. Il trasporto BLE ha timestamp per indicare la tempistica dei singoli messaggi inviati all'interno di un pacchetto BLE.
Dispositivi
Una periferica fornisce funzionalità di input/output (I/O) per un computer. I termini periferica MIDI e dispositivo MIDI solitamente si riferiscono a qualsiasi modulo hardware o software che supporta il protocollo MIDI. In questo documento, periferica MIDI si riferisce all'entità fisica e dispositivo MIDI descrive il modulo che implementa effettivamente il MIDI.
Porte
Una porta è un punto di interfaccia tra computer e periferiche.
MIDI 1.0 utilizza una presa DIN femmina a 5 pin come porta. Ogni porta è OUT (sorgente di dati MIDI), IN (destinazione per i dati MIDI) o THRU (ovvero IN instradata direttamente a OUT).
Altri trasporti come USB e BLE estendono il concetto di porta.
Un dispositivo MIDI ha almeno una porta OUT, una porta IN o entrambe.
Il dispositivo MIDI fornisce uno o più stream di messaggi provenienti da ogni porta OUT e riceve uno o più stream di messaggi in arrivo su ogni porta IN. I termini IN e OUT si riferiscono ovviamente a una porta; dal punto di vista dell'altra porta si applica il termine opposto.
Connessione
Nel trasporto MIDI 1.0, una porta OUT si connette a un massimo di una porta IN o THRU a causa della natura del loop corrente. Nei trasporti USB e BLE, lo stesso vale per il livello più basso, anche se un'implementazione può ricondizionare lo stream di messaggi in modo che possa essere trasmesso a più porte IN.
Cavi
Un cavo MIDI 1.0 è il coiled fisico di cavi che collega una porta OUT a una porta IN o THRU. Il cavo trasmette solo dati.
Nota: esistono modifiche non standard al MIDI che forniscono alimentazione tramite i due pin inutilizzati. Questo fenomeno si chiama alimentazione fantasma.
Un cavo USB è simile, tranne per il fatto che esiste una vasta gamma di tipi di connettori e il concetto di IN/OUT/THRU è sostituito dal ruolo host/periferica.
Quando funziona in modalità host USB, il dispositivo host fornisce alimentazione alla periferica MIDI. La maggior parte delle piccole periferiche MIDI richiede un carico di una unità USB (100 mA) o meno. Tuttavia, alcune periferiche più grandi o con illuminazione o uscita audio richiedono più potenza di quella che può fornire il dispositivo host. Se riscontri problemi, prova con un'altra periferica MIDI o un hub USB con alimentazione.
Canale
Ogni stream di messaggi MIDI viene multiplexato tra 16 canali. La maggior parte dei messaggi è indirizzata a un canale specifico, ma esistono tipi di messaggi non specifici per il canale. Per convenzione, i canali sono numerati da 1 a 16, anche se rappresentati da valori da 0 a 15.
Se l'applicazione richiede più di 16 canali o un throughput superiore a quello supportato da uno stream di messaggi, devono essere utilizzate più porte.
In MIDI 1.0, questo viene ottenuto con più cavi che collegano coppie di porte.
Nel trasporto MIDI su USB, un singolo endpoint USB può supportare più porte, ciascuna identificata da un numero di cavo [sic]. In base alla specifica USB MIDI, il numero di cavo identifica la porta virtuale all'interno dell'endpoint.
Nota: numero di porta sarebbe stato un termine più preciso, dato che identifica una porta.
Pertanto, un singolo cavo fisico USB può trasportare più di un set di 16 canali.
Implementazione della piattaforma
Come indicato nell'introduzione, questi concetti MIDI generici si applicano a tutte le implementazioni. Per l'interpretazione dei concetti sulla piattaforma Android, consulta la
Guida dell'utente di Android MIDI per android.media.midi
.