Architettura MIDI

Questo articolo descrive l'architettura MIDI generica, indipendentemente da qualsiasi implementazione della piattaforma, API o funzionalità specifiche della piattaforma.

Concetti chiave

Eventi

Il protocollo MIDI è progettato per la comunicazione basata su eventi. Un evento è un'indicazione che qualcosa è accaduto o accadrà in un momento specifico. Gli eventi MIDI sono rappresentati da messaggi , fasci atomici di informazioni.

Trasporto

I messaggi MIDI vengono codificati e consegnati tramite un livello di trasporto , trasporto abbreviato, che invia i dati MIDI grezzi 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 a basso consumo energetico (BLE)

Rappresentazione del messaggio

Una specifica di trasporto MIDI descrive come trasmettere i messaggi. Sebbene la confezione dei messaggi sia specifica del trasporto al livello più basso, a un livello più alto le applicazioni possono considerare una sequenza di messaggi ordinata nel tempo come un flusso di byte delimitato. Ciò è possibile perché ogni messaggio contiene informazioni sufficienti per determinare la lunghezza totale del messaggio, a condizione che sia noto l'inizio del limite del messaggio.

La maggior parte dei messaggi MIDI sono brevi (da uno a tre byte), tuttavia è possibile inviare messaggi più lunghi tramite SysEx .

Timestamp

Un timestamp è un'etichetta facoltativa allegata a un messaggio all'origine o al momento della ricezione, a seconda del trasporto. Il timestamp è espresso in unità di tempo come secondi o tick .

In assenza di una marca temporale esplicita, il sistema deve sostituire la marca temporale del messaggio immediatamente precedente oppure l'ora corrente. L'accuratezza 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. Vengono spesso aggiunti come parte di un'API specifica della piattaforma. Il trasporto BLE dispone di timestamp per indicare la tempistica dei singoli messaggi multipli 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 si riferiscono comunemente a qualsiasi modulo hardware o software che supporti il ​​protocollo MIDI. All'interno di questo documento, la periferica MIDI si riferisce all'entità fisica e il dispositivo MIDI descrive il modulo che effettivamente implementa il MIDI.

Porti

Una porta è un punto di interfaccia tra computer e periferiche.

MIDI 1.0 utilizza come porta una presa DIN femmina a 5 pin. Ciascuna porta è OUT (sorgente di dati MIDI), IN (sink per dati MIDI) o THRU (ovvero un IN che viene indirizzato direttamente a un OUT ).

Altri mezzi di trasporto 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 flussi di messaggi originati da ciascuna porta OUT e riceve flussi di messaggi in arrivo da ciascuna porta IN . I termini IN e OUT sono ovviamente relativi ad una porta; dal punto di vista dell’altro porto si applica il termine inverso.

Connessione

Nel trasporto MIDI 1.0, una porta OUT si collega al massimo a una porta IN o THRU a causa della natura del loop corrente. Nei trasporti USB e BLE, lo stesso vale al livello più basso, sebbene un'implementazione possa ricondizionare il flusso di messaggi in modo che possa essere trasmesso a più porte IN .

Cavi

Un cavo MIDI 1.0 è il fascio fisico di fili che collega una porta OUT a una porta IN o THRU . Il cavo trasporta solo dati.

Nota: esistono modifiche non standard al MIDI che forniscono alimentazione sui due pin inutilizzati. Questa si chiama alimentazione phantom .

Un cavo USB è simile, tranne per il fatto che esiste un'ampia varietà di tipi di connettori e il concetto IN / OUT / THRU è sostituito dal ruolo host/periferica.

Quando si opera in modalità host USB, il dispositivo host fornisce alimentazione alla periferica MIDI. La maggior parte delle piccole periferiche MIDI accettano un carico di un'unità USB (100 mA) o meno. Tuttavia, alcune periferiche più grandi, o periferiche con uscita audio o luci, richiedono più energia di quella che il dispositivo host può fornire. Se riscontri problemi, prova un'altra periferica MIDI o un hub USB alimentato.

Canale

Ogni flusso di messaggi MIDI viene multiplexato su 16 canali . La maggior parte dei messaggi è diretta a un canale specifico, ma esistono tipi di messaggi che non sono specifici del canale. Convenzionalmente i canali sono numerati da 1 a 16, sebbene rappresentati da valori di canale da zero a 15.

Se l'applicazione necessita di più di 16 canali o di una velocità effettiva maggiore di quella supportata da un flusso di messaggi, è necessario utilizzare più porte.

Nel MIDI 1.0, ciò è possibile grazie a 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]. Secondo le specifiche USB MIDI, il numero del cavo identifica la porta virtuale all'interno dell'endpoint.

Nota: il numero di porta sarebbe stato un termine più accurato, dato che identifica una porta.

Pertanto un singolo cavo fisico USB può trasportare più di un set di 16 canali.

Implementazione della piattaforma

Come notato nell'introduzione, questi concetti MIDI generici si applicano a tutte le implementazioni. Per l'interpretazione dei concetti sulla piattaforma Android, consultare la Guida utente Android MIDI per android.media.midi .