Midi F.A.Q.
(Frequently Asked Questions)
Iniziamo con il vedere l'evoluzione
che portò alla nascita dei vari formati midi:
Prima della definizione dello SMF (Standard Midi File), proposto
per la prima volta nel 1986 dalla americana Opcode Systems, e adottato
nel luglio 1988, i produttori di software musicale, per la memorizzazione
di eventi Midi, adottavano un loro particolare formato, con il risultato
che, pur essendo i dati memorizzati, della stessa natura e su stessi
supporti, i brani midi registrati dovevano essere letti dallo stesso
tipo di software con cui erano stati creati.
L'implementazione e l'adozione dello SMF ha fatto in modo che, pur
utilizzando software musicale (sequencer) diverso, la memorizzazione
dei brani in formato Midi avvenisse con la stessa procedura, consentendo
così lo scambio e l'utilizzazione tra computer e sequencer diversi.
L'utilizzo dello SMF rende possibile ad esempio, lo scambio di brani
tra PC (Windows, Dos) e MACINTOSH, ATARI e tra qualsiasi tipo di
sequencer in grado di avvalersi di tale standard.
La Struttura
Gli SMF sono composti da
due blocchi principali definiti rispettivamente Header-chunk e Track-chunk,
i primi 4 byte di ogni blocco, servono ad identificare il blocco
stesso.
L'Header-chunk (blocco d'intestazione) è il primo elemento inserito
nel midifile, in quanto contiene le informazioni del formato, del
numero di traccie e della temporizzazione. Inizia con quattro caratteri
ASCII:MThd, che appunto identificano il blocco. Il formato dei dati
è visibile nella figura di sotto:

Il Track-chunk (blocco di
traccia), contiene gli eventi Midi (nota on, nota off, ecc.) relative
ad una singola traccia, prima di ogni evento viene inserito il riferimento
temporale (Delta-time), che esprime il tempo trascorso tra ogni
singolo evento. I quattro caratteri ASCII di identificazione del
blocco sono: MTrk. Il formato è nella prossima figura:

Delta-time
La lunghezza del Delta-time
è variabile per consentire un intervallo tra un evento e l'altro
anche molto grande, senza pregiudicare la compattezza del file.
Il valore del Delta-time viene calcolato suddividendo il tempo trascorso
tra ogni evento, in pacchetti da 7 bit a cui vengono aggiunti dei
bit più significativi di valore 1, tranne che per ultimo pacchetto
a cui viene aggiunto il valore 0.
La scelta di questa complessa modalità di codifica del Delta-time
è stata fatta per limitare la memoria stessa del midifile e potere
esprimere nel contempo valori di tempo in teoria infiniti.
Oltre ai messaggi riferiti al canale come quelli di nota, control
change, program change ecc. (eventi Midi), nel blocco Track-chunk,
vengono memorizzati anche messaggi di Systema Exclusivo, ed i Meta-eventi.
La memorizzazione dei dati di Systema Exclusivo (Sys-Ex) avviene
come per gli eventi Midi, viene inserito prima il Delta-time, poi
il dato di inizio del Sys-Ex (F0), seguito dalla lunghezza in byte
dell'intero messaggio e infine dai dati.
Nella prossima immagine è descritto il formato di memorizzazione
del Sys-Ex relativo al di reset General Midi (F0,7E,7F,09,01,F7).

I Meta eventi
I meta-eventi rappresentano
un complemento importante negli SMF.
Con essi vengono memorizzati: i nomi delle tracce, la divisione
del tempo, la velocità, la tonalità, il testo del brano, il copyright
e altro.

I Meta-eventi vengono memorizzati
nello SMF allo stesso modo dei Sys-Ex, ma iniziano con l'esadecimale
FF. Nella prossima figura, un esempio che descrive il nome di una
traccia chiamata INTRO.

I tre formati degli SMF
Formato 0
Le tracce di un brano vengono mixate in una
singola traccia che contiene però tutte le informazioni degli eventi
di tutte le tracce del brano.
Formato 1
Le tracce vengono memorizzate in modo singolo
e contengono gli stessi valori di tempo e metrica. La velocità del
brano viene inserita nella prima traccia che fa da riferimento a
tutte le altre.
Formato 2
Le tracce vengono gestite indipendenti l'una
da l'altra con valori anche diversi di tempo e metrica.
Generalmente i più utilizzati sono il Formato
0 usato principalmente dai sequencer a lettura diretta, cioè che
non devono caricare in memoria l'intera sequenza, ma prelevano ed
eseguono i dati Midi direttamente. Ed il Formato 1 per i sequencer
che possono creare e/o modificare SMF, specie i software musicali,
i quali hanno in genere la possibilità di gestione di entrambi i
formati.