
Implementazione dei Midifile
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 in fig. 1.
| Dati esadecimali | Commento |
|---|---|
| 4D 54 68 64 | ASCII=MThd |
| 00 00 00 06 | Lunghezza del blocco, in questo esempio 6 byte |
| 00 00 | Formato del midifile (0,1,2) |
| 00 01 | Numero delle traccie (da 1 a 16) |
| 00 60 | Tick per quarto di nota, oppure Tipo di sinc. SMPTE (24, 25, 29.97, 30 frame/s) |
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 in fig. 2.
| Dati esadecimali | Commento |
|---|---|
| 4D 54 72 6B | ASCII=MTrk |
| 00 00 00 00 | Lunghezza del blocco, in questo esempio 0 byte |
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.
In fig. 3 è descritto il formato di memorizzazione del
Sys-Ex relativo al di reset General Midi (F0,7E,7F,09,01,F7).
| Dati esadecimali | Commento |
|---|---|
| 00 | Delta-time |
| F0 | Inizio dei dati di Sys-Ex |
| 05 | Lunghezza in byte del Sys-Ex |
| 7E 7F 09 01 | Dati Sys-Ex |
| F7 | Fine dei dati di Sys-Ex |
I Meta eventi
I meta-eventi rappresentano un complemento importante negli
SMF. Con essi vengono memorizzati: i nomi delle traccie, la divisione
del tempo, la velocità, la tonalità, il testo del
brano, il copyright e altro.
In fig. 4 vengono descritti i Meta-eventi più importanti.
| Tipo di Meta-evento | Commento |
|---|---|
| 01 | Evento di testo per descrivere il nome di una traccia o il nome della voce usata, può essere utilizzato anche per inserire il testo. |
| 02 | Evento di copyright, il testo deve contenere la © seguita dall'anno di creazione e dal nome dell'autore. Dovrebbe essere inserito come primo evento sulla traccia 1. |
| 03 | Evento di testo per indicare il nome della traccia. Se è inserito in un midifile in formato 0 o nella prima traccia di un midifile in formato 1, indica il nome del brano. |
| 05 | Evento di testo per inserire le liriche del brano. |
| 2F | Evento che indica la fine di un blocco di traccia (Track-chunk). |
| 51 | Evento di velocità del brano, indica quanti microsecondi ci debbono essere in un quarto di nota. |
| 58 | Evento per descrivere la divisione del brano. |
| 59 | Evento che indica la tonalità. |
I Meta-eventi vengono memorizzati nello SMF allo stesso modo dei Sys-Ex, ma iniziano con l'esadecimale FF. In fig. 5, un esempio che descrive il nome di una traccia chiamata INTRO.
| Dati esadecimali | Commento |
|---|---|
| 00 | Delta-time |
| FF | Inizio del Meta-evento |
| 03 | Tipo di Meta-evento |
| 05 | Lunghezza in byte del Meta-evento |
| 49 4E 54 52 4F | ASCII=INTRO |
I tre formati degli SMF
Formato 0
Le traccie di un brano vengono mixate in una singola traccia che
contiene però tutte le informazioni degli eventi di tutte
le traccie del brano.
Formato 1
Le traccie 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 traccie 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.
| 1) Il protocollo e la sintassi | 6) Le apparecchiature |
| 2) La sintassi parte seconda | 7) I collegamenti |
| 3) I messaggi di sistema | 8) Midifile: struttura e formato |
| 4) I canali midi | 9) Midifile: Standard GM e GS |
| 5) I messaggi di modo |
|
|
|
|
|
|
|
|