Musical Instrument Digital Interface
MIDI (Musical Instrument Digital Interface) è il protocollo standard per l'interazione degli strumenti musicali elettronici, anche tramite un computer. StoriaIl protocollo MIDI nacque all'inizio degli anni ottanta: esso era la risposta all'esigenza di far comunicare tra loro diversi strumenti musicali elettronici, tenendo conto delle caratteristiche di ognuno. Diversi costruttori, ad esempio Oberheim e Roland, offrivano già sui propri strumenti alcuni sistemi di interfacciamento, tipo CV/gate, DIN sync and Digital Control Bus (DCB). Queste interfacce, basate su algoritmi proprietari, garantivano il funzionamento solo su strumenti dello stesso costruttore, mentre serviva un sistema in grado di garantire il funzionamento su strumenti di costruttori diversi. Il presidente dalla Roland, Ikutaro Kakehashi, sapeva che la mancanza di standard limitava la crescita del mercato della musica elettronica e quindi chiese aiuto a Dave Smith della Sequential Circuits, che accolse con favore la proposta. Insieme all'ingegnere Chet Wood scrissero il documento Universal Synthesizer Interface[1], che fu presentato all'Audio Engineering Society ad Ottobre 1981[2]. Lo standard fu discusso dai rappresentanti di Roland, Yamaha, Korg e Sequential Circuits e decisero che sarebbero stati utilizzati connettori DIN a cinque poli, la velocità di trasferimento dati a 31,25 kbaud e la scelta del nome: Kakehashi propose di chiamarlo Universal Musical Interface (UMI), ma invece si decise per Musical Instrument Digital Interface (MIDI)[3]. Il progetto terminato apparve solo due anni dopo: nell'agosto del 1983 le specifiche MIDI furono presentate al pubblico alla fiera NAMM Show, tenutasi a Los Angeles. L'immediata popolarità dello standard creò divisioni all'interno del comitato fondatore: i produttori americani si unirono nella MMA (MIDI Manufactures Association), mentre quelli giapponesi fondarono la JMA (Japan MIDI Association). Benché lavorassero su un terreno comune, i due consorzi svilupparono delle caratteristiche non sempre pienamente compatibili tra loro. Queste divergenze furono risolte nel 1985, quando la IMA (International MIDI Association) pubblicò la versione 1.0 delle specifiche MIDI, istituendo di fatto lo standard del protocollo, e i costruttori che supportano il protocollo MIDI sono riuniti in due associazioni: MMA (costruttori Americani ed Europei) e JMSC (costruttori Giapponesi). Le modifiche da apportare allo standard MIDI vengono discusse e approvate da queste due associazioni. La diffusione delle specifiche MIDI spetta all'IMA (International Midi Association). La tastiera PROPHET 600 della SCi (Sequential Circuits inc.) di San Francisco, il primo synth dotato di interfaccia MIDI, fu presentata nel 1983 e costruita su licenza in Italia dalla SIEL di Acquaviva Picena in provincia di Ascoli Piceno nelle Marche, anche se la versione definitiva del protocollo MIDI venne implementata l'anno seguente sulla Yamaha DX7. Lo standard MIDI consiste in un protocollo per lo scambio di messaggi progettato per l'uso con strumenti musicali elettronici e nella relativa interfaccia fisica. Un collegamento MIDI consiste in una connessione seriale unidirezionale (simplex) a loop di corrente, che funziona alla velocità di trasmissione di 31,250 bps. Il loop è tenuto a massa solo da un lato e l'altra estremità è libera (flottante) per evitare ronzii e interferenze audio indotte dalla formazione di anelli di massa. Due dispositivi collegati con interfaccia MIDI sono tra loro optoisolati, cioè il loop di corrente dal lato del trasmettitore pilota il LED di un accoppiatore ottico dal lato del ricevitore. L'accoppiatore ottico dev'essere molto veloce (un dispositivo molto usato è lo Sharp PC900) e i tempi di commutazione asimmetrici che caratterizzano la maggior parte degli accoppiatori sono in ogni caso causa di distorsioni[spiegare]. Nel caso di connessione in cascata di più dispositivi MIDI il ritardo del segnale si fa via via più rilevante fino a generare errori di trasmissione. Lo standard MIDI prevede l'uso di connettori circolari a standard DIN a 5 pin. Questi connettori erano molto diffusi in Europa per ogni genere di connessione audio fino agli anni novanta, quando sono stati sostituiti dai più pratici jack. Anche le comunissime tastiere dei personal computer, attualmente dotate tutte di connessione USB, in passato utilizzavano quel connettore, poi abbandonato per il mini-DIN. Il MIDI è rimasto quindi una delle poche applicazioni per questo genere di connettori. Nel 1991 fu deciso uno standard anche per i file delle canzoni e la connettività con le prese USB e Firewire. Nel 2016 fu formata la Midi Association[4], una web community, per continuare a portare avanti e supervisionare lo standard. È nel 2019 che viene annunciata l'iniziativa di creare la versione 2.0[5], che in seguito verrà presentata ed approvata al NAMM show del 2020[6]. Le specifiche MIDI standardIntroduzioneIl termine MIDI indica due aspetti: un linguaggio informatico, ossia una serie di specifiche che danno vita al protocollo, e un'interfaccia hardware che consente il collegamento fisico tra dispositivi. Le caratteristiche del MIDI sono:
L'interfaccia hardwareGli strumenti musicali e le varie attrezzature MIDI devono essere fisicamente connesse per poter comunicare tra di loro. A questo scopo, lo standard MIDI prevede l'uso di una triade di connettori DIN a 5 poli, di cui solo i 3 poli centrali vengono utilizzati, che tramite un cavo pentapolare consentono il collegamento fisico tra gli strumenti.
La reale configurazione dei connettori, per numero e presenza, dipende dalle funzioni per cui uno strumento viene costruito. Su una master keyboard, per esempio, è frequente trovare 2 o 3 OUT e nessun THRU, visto che ciò che ci si aspetta da uno strumento del genere è la massima flessibilità nella trasmissione dei dati verso altre attrezzature. L'interfaccia software: il protocollo MIDI al livello softwareUna delle caratteristiche fondamentali del MIDI è l'essere un'interfaccia multicanale. Un file MIDI è un file che contiene dati comunicabili tramite il protocollo MIDI. Il MIDI supporta fino 16 canali. Per spiegare cosa si intende per "canale MIDI" si può utilizzare la seguente metafora: si voglia inviare un messaggio a un collega che pernotta in una delle 16 stanze a disposizione di un hotel; oltre all'indirizzo dell'hotel, si deve specificare anche il numero di stanza del nostro collega se si vuole che il messaggio sia recapitato correttamente. Si pensi di avere un modulo sonoro con la possibilità di suonare fino a 16 suoni diversi contemporaneamente collegato in MIDI a una tastiera musicale e ogni suono è in un canale diverso da 1 a 16: come fare per far eseguire la musica a uno solo di questi suoni? La tastiera deve inviare al modulo, oltre alle note, anche il numero di canale (la stanza dell'hotel) in cui suonare quelle note. Come farlo dipende dal tipo di strumenti utilizzati. Tipi di datiStatus byte: gli status byte sono numeri di otto cifre binarie in cui il bit più significativo (Most Significant Bit, MSB) è posto a 1. Questi byte servono ad identificare il tipo di messaggio, ovvero lo scopo dei data byte che li seguono; ad eccezione dei real-time message, un nuovo Status byte obbliga il ricevitore ad adottare un nuovo stato, anche se l'ultimo messaggio non è ancora stato completato. Data byte: a seguire gli Status Bytes, ad eccezione dei Real-time message, ci possono essere uno o due Data Byte che trasportano il contenuto del messaggio. I Data byte sono numeri di otto cifre binarie in cui il bit più significativo (Most Significant Bit, MSB) è posto a 0. Per ogni Status byte deve sempre essere spedito il numero di Data Byte corrispondente; il ricevitore del messaggio deve aspettare fino a quando non ha ricevuti tutti i Data byte richiesti dallo Status byte. Running Status: solo per Voice e Mode Message. Quando uno Status byte viene ricevuto ed elaborato, il ricevitore rimane in quello stato fino alla ricezione di un differente Status Byte; quindi in caso di ripetizione lo Status Byte può essere omesso ed è sufficiente inviare solo i Data Byte. Nel Running Status un messaggio completo consiste unicamente di Data Bytes; il Running Status è particolarmente utile quando si devono spedire lunghe stringhe di Note On/Off, dove "Note On con velocità 0" è usato come Note Off. Channel messageUn Channel message usa quattro bit nello Status Byte per indirizzare il messaggio a uno dei sedici canali MIDI e quattro bit per definire il messaggio. I channel message sono quindi usati dai ricevitori in un sistema il cui numero di canali corrisponde al numero di canali codificato all'interno dello Status Byte. Uno strumento può ricevere messaggi MIDI da più di un canale. Il canale sul quale riceve le istruzioni principali è detto "Basic channel". Uno strumento può essere impostato in modo da ricevere dati di esecuzione (performance data) su canali multipli (incluso il basic channel). A questi ci si riferisce come "Voice channel". Ci sono due tipi di Channel Message:
Channel modeUn singolo strumento fisico può fungere da diversi strumenti virtuali. In questa trattazione, "strumento" si riferisce a uno strumento virtuale. Sono disponibili quattro Mode message per definire le relazioni tra i sedici canali MIDI e i voice assignment dello strumento. Le quattro modalità sono determinate dalle proprietà Omni (On/Off), Poly and Mono. Poly e Mono sono mutuamente esclusive. Omni, quando on, abilita il ricevitore a ricevere Voice message su tutti i Voice Channel. Quando off, il ricevitore accetta solo i Voice Message che provengono da Voice Channel selezionati. Mono, quando on, riduce l'assegnamento di Voice a solo una Voice per Voice Channel (monophonic). Quando off (Poly on), un certo numero di Voice può essere allocato dal normale algoritmo di Voice assignment del ricevitore. Ricevitori e trasmettitori MIDI operano con un solo Channel Mode alla volta. Dal momento che un singolo strumento può funzionare come un insieme di strumenti virtuali, esso può avere diversi Basic Channel. Questo strumento si comporta come se fosse più di un ricevitore e ogni ricevitore può essere impostato con un differente Basic Channel. Inoltre ogni ricevitore può essere impostato con diversi Mode, sia attraverso il pannello dei controlli dello strumento sia attraverso Mode message ricevuti sul Basic channel. Sebbene non sia un vero MIDI mode, questa maniera di operare è detta "Multi Mode". Channel voiceI channel voice message consistono nel carico di informazioni trasmesse tra gli strumenti MIDI. Includono: Note On, Note Off, program change, control change, pitchbend, channel aftertouch e polyphonic key pressure. Un singolo Note On message consiste di 3 byte, che richiedono 960 μs per la trasmissione. Quando molte note sono suonate allo stesso tempo, i diversi Note On possono richiedere diversi millisecondi per essere trasmessi. Questo può rendere complicato per il MIDI rispondere ad un grande numero di eventi simultanei senza provocare un ritardo lieve, ma udibile. Questo problema si riduce usando il Running Status mode. Control Rpn & NrpnSono controlli che permettono di gestire estensioni specifiche per il dispositivo o l'applicazione da controllare. I controlli RPN sono specificati dallo standard MIDI, quelli NRPN sono specifici per ogni dispositivo e devono quindi essere documentati nel manuale in dotazione. Sono implementati come successione di Control Change. NRPN, Non-Registered Parameter NumberIl parametro da modificare è designato tramite i Controller 98 e 99, il valore da inserire è specificato da:
In alternativa si può usare:
RPN, Registered Parameter NumberIl parametro da modificare è designato tramite i Controller 100 e 101, il valore da inserire è specificato dagli stessi controller degli NRPN. System messageI System message non sono codificati con i numeri di canale. Ci sono tipicamente tre tipi di System Message.
Struttura del file MIDIIl file MIDI e le sue strutture fondamentaliIl file MIDI, o più formalmente Standard Midi File (SMF), è un archivio contenente dati, informazioni espresse in uno o più byte. Queste informazioni organizzano un sistema compiuto di regole, il protocollo (o codice) MIDI, e sono comprensibili dai programmi-lettori MIDI (sequencer), che le riconoscono e le interpretano come istruzioni da eseguire. Le specifiche dello SMF furono sviluppate dalla MIDI Manufacturers Association (MMA). Il file MIDI è composto da complesse strutture, chiamate Track Chunk ("blocco-traccia"), formate da un certo numero di byte (informazioni-istruzioni). Questi Blocchi sono parti fondamentali e pertanto necessarie del file MIDI. La prima struttura: il blocco d'intestazioneLa prima struttura, posta solo all'inizio del file MIDI e composta sempre da 14 byte, è chiamata: Midi Track header chunk (MThd), ossia Blocco d'intestazione. Alcuni byte di questo Blocco-traccia d'intestazione del file MIDI sono invariabili. In un file esiste un solo blocco Midi Track header (MThd). Il Blocco d'Intestazione (Header Chunk) specifica alcune informazioni di base e generiche relative ai dati presenti nel file. Il Midi Track header chunk è costituito dai seguenti byte in notazione esadecimale:
dove n rappresenta i byte di valore variabile. 4D 54 68 64 = (in codice ASCII: MThd) definisce il chunk come Midi Track header ed è il blocco d'intestazione, formato sempre da 4 byte invariabili, che definisce questa traccia come blocco header. 00 00 00 06 = definisce la lunghezza in byte della restante parte del blocco header. Indica che immediatamente dopo vi sono 6 byte restanti. 00 0n = questi due byte indicano il tipo di file MIDI– smf: Standard Midi File. Per il formato 0 n = 0; per il formato 1 n = 1; per il formato 2 n = 2:
00 nn = questi due byte indicano quante tracce (del tipo MTkr) sono presenti nel file MIDI. 0n nn = questi ultimi due byte indicano il “numero di impulsi (o risoluzione) per nota da ¼”: PPQN (Pulse Per Quarter Note). Ogni impulso è chiamato “Tick” (istante). Per esempio 01 80 = 384 PPQN (una nota da ¼ sarà formata da 384 PPQN, ossia da 384 tick). Il PPQN condiziona per l'intero file MIDI il Tempo Delta, in quanto il PPQN è un'unità di misura, un metro di riferimento che definisce in “numero di impulsi per nota da ¼” il Tempo Delta. Dunque, la durata di due o più Tempi Delta aventi identici valori in byte, ma all'interno di diversi PPQN, sarà diversa. Le altre strutture successive al blocco d'intestazione Dopo l'intera descrizione del Midi Track header chunk (Blocco primario d'intestazione) seguono le Tracce (almeno una) contenenti gli eventi del MIDI. Ciascuna traccia è composta da un'intestazione formata sempre da 4 byte invariabili: 4D 54 72 6B = (in codice ASCII: MTrk) definisce il chunk come Midi Track, ossia lo identifica come blocco di traccia. Qualora nel file sia presente più di una traccia MTrk, la prima traccia MTrk, chiamata anche “Traccia del Tempo”, contiene solitamente i Dati Meta, separati fra loro e da altri eventuali eventi MIDI dal Tempo Delta TΔ, relativi all'indicazione della suddivisione della misura, del tempo metronomico e della tonalità della scala. Le tracce successive, per esempio una per ogni strumento musicale diverso, contengono tutti gli altri eventi midi, e possono contenere anche eventi Dati Meta nel caso di cambio dei valori dei Dati Meta iniziali contenuti nella prima traccia MTrk, ossia nella Traccia del Tempo. Dopo i 4 byte identificativi della traccia seguono sempre altri 4 byte: 00 00 00 nn = indicano quanti byte successivi vi sono sino alla fine della traccia. Dopo i descritti 4 byte è sempre presente il Tempo Delta (Delta Time), espresso con uno o più byte. Seguono gli Eventi contenuti nella traccia, Eventi Midi, Eventi SysEx, Eventi Dati Meta che sono la codifica informatica del un brano, la partitura musicale. Tutti gli Eventi sono sempre separati fra loro da un valore di Tempo Delta variabile a seconda delle necessità e dello svolgersi del brano. Il Tempo Delta – TΔAll'interno delle tracce MTrk fra ogni Evento viene sempre inserito il dato temporale Tempo Delta (Delta-time), che esprime in byte la durata dell'intervallo temporale tra due singoli eventi, ovvero è la durata in PPQN tra i due eventi (…EVENTO1…TΔ…EVENTO2…). Se, ad esempio, TΔ = 00, allora gli eventi avvengono simultaneamente. Dunque, per far suonare due note simultaneamente si ha per esempio: 90 48 64 00 90 4C 64 = Do e Mi che suonano contemporaneamente. Il Tempo Delta è fondamentale per la durata delle note e quindi per la creazione delle figure musicali. Più precisamente i valori del TΔ sono stabili; le figure musicali variano la propria corrispondenza al TΔ in base alla risoluzione PPQN. Ad esempio, per PPQN = 01 80 la semiminima ha TΔ = 83 00; invece per un PPQN = 60 la semiminima ha TΔ = 60. Durata in microsecondi di un impulso-tickLa durata in microsecondi di un impulso-tick per ¼ di nota si ottiene dalla seguente operazione:
dove bpm rappresenta i "battiti per minuto" (tempo metronomico) e PPQN è la "risoluzione in Impulsi per nota da ¼" come impostata nel chunk MThd. I dati MetaI Dati Meta (Meta Data) sono informazioni non fondamentali del file MIDI e, se presenti, sono contenute nelle tracce MTrk. Si identificano dal primo byte di valore sempre uguale a FF, e sono costituiti da più byte. I principali Dati Meta: FF 58 04 xx yy 60 08 – Metro della misura (Tempo di Suddivisione della misura):
FF 51 03 xx xx xx – Tempo metronomico (velocità del brano: indica quanti microsecondi dura un quarto di nota):
Il Meta evento relativo al “Tempo metronomico” va sempre posto dopo il Meta evento della “Suddivisione della misura”. In caso di cambio di suddivisione della misura si deve sempre ricalcolare il tempo metronomico della nuova suddivisione sulla base della precedente tabella. FF 59 02 xx yy – Chiave di Tonalità (indica la Tonalità della scala):
Il Meta-Dato FF 59, relativo alla Chiave di tonalità della scala, è riconosciuto da alcuni programmi, solo se esso è presente nella traccia del tempo e lì lo salvano. Altri sequencer lo leggono solo se presente nelle tracce successive a quella del tempo e in quelle lo salvano. Altri sequencer ancora riconoscono questo Dato Meta ovunque esso sia. Il Dato Meta FF 59 può essere considerato opzionale poiché la nota alterata è definita in realtà non da questo Dato Meta, bensì dal secondo byte componente l'evento MIDI “NOTE ON”. Altri Dati Meta utili sono: FF 03 ll xxxx – Nome della Traccia:
FF 05 ll xxxx – Testo del canto (lyric):
Esempio di utilizzo di questo Meta evento (testo da immettere in corrispondenza di una nota): «Pro - » (ossia: P+r+o+[spazio]+ - ) la struttura sarà ... | TΔ | Note ON | TΔ | FF 05 05 50 72 6F 20 2D | TΔ | Note OFF | TΔ | ... (in verde i valori esadecimali del codice necessari per ottenere la scrittura del testo "Pro –". I principali eventi MIDI9n hh vv – Note ON
8n hh vv – Note OFF
Esempio: 80 45 64 (al canale 1 viene spenta in quel momento la nota n. 45 [ossia la n. 69 in decimale = LA a 440 hrz] con velocità 64). Il Canale 10 è riservato nel modulo GM a suoni percussivi. Pause immediatamente dopo il “NOTE OFF” viene inserito un Tempo Delta di valore pari alla figura di pausa corrispondente. Se è prevista una pausa all'inizio del brano, il TΔ è inserito innanzi al primo evento “NOTE ON” della traccia MTrk interessata. An aa vv – Aftertouch Polyphonic:
Bn bb vv – Control Change:
Esempio: B0 07 64 Imposta il volume generale della traccia da quel momento a 64 hex, ossia a 100 in decimale. Cn cc – Program Change:
Esempio: C0 05: strumento della traccia impostato da quel momento a Piano elettrico 2. Dn dd – Channel Aftertouch
Esempio: D0 64 al canale 1 viene applicato da quel momento l'Aftertouch di valore uguale a 100. En ee zz – Pitch Bend Change
Esempio: E0 60 64: al canale 1 viene applicato da quel momento il Pich Wheel con primo valore uguale a 60, ossia 96 in decimale, e secondo valore uguale a 64, ossia 100 in decimale). Chiusura della TracciaOgni traccia MTkr termina con un evento di chiusura formato da due byte: FF 2F 00, preceduti sempre da un valore di TΔ. L'ultimo byte uguale a zero rappresenta la lunghezza del meta-evento, la quale, non essendo presenti dati ulteriori, è appunto pari a zero. Ovviamente anche la “Traccia del Tempo” termina con il comando FF 2F 00 (chiusura della traccia). Analisi pratica di un breve file MidiDi seguito verrà mostrato e commentato il codice esadecimale di un semplice e breve file Midi (le varie istruzioni del protocollo Midi sono visualizzate in righe da 16 valori esadecimali, tranne l'ultima da 17, e distinte l'una dopo l'altra con caratteri in grassetto e non): 4D 54 68 64 00 00 00 06 00 01 00 02 01 80 4D 54 72 6B 00 00 00 19 00 FF 58 04 03 02 60 08 00 FF 51 03 09 27 C0 00 FF 59 02 01 00 00 FF F2 00 4D 54 72 6B 00 00 00 2A 00 B0 07 64 00 B0 0A 30 00 B0 5B 40 00 B0 5D 10 00 C0 04 00 90 45 64 86 00 80 45 64 81 40 90 42 64 81 40 80 42 64 00 FF 2F 00 · · · COMMENTO :
4D 54 68 64 00 00 00 06 00 01 00 02 01 80
4D 54 72 6B 00 00 00 19 00 FF 58 04 03 02 60 08 00 FF 51 03 09 27 C0 00 FF 59 02 01 00 00 FF 2F 00
4D 54 72 6B 00 00 00 2A 00 B0 07 64 00 B0 0A 30 00 B0 5B 40 00 B0 5D 10 00 C0 04 00 90 45 64 86 00 80 45 64 81 40 90 42 64 81 40 80 42 64 00 FF 2F 00
La visualizzazione in valori esadecimali del codice di un file Midi può essere effettuata mediante un programma editor esadecimale di file. Editor MIDI
Note
Bibliografia
Voci correlateAltri progetti
Collegamenti esterni
|