Lezione 12
Standard MIDI File
Programmazione MIDI (Prof. Luca A. Ludovico)
Stato dell’arte ai primordi
• Proliferazione di strumenti MIDI
• Mancanza di un formato di file standard per lo
scambio di MIDI songs
• Ogni produttore di sequencer aveva sviluppato
un proprio formato, legando di fatto gli utenti ai
propri prodotti
–
Logica opposta a quella di uno standard di interoperabilità
Programmazione MIDI (Prof. Luca A. Ludovico)
12. Standard MIDI File
Obiettivi e definizioni
• Obiettivo: memorizzare le sequenze per esportarle su
altri sistemi o distribuirle
–
–
Tali file devono essere interpretabili da qualsiasi programma
(es.: sequencer, media player, browser, ecc.) o sistema supporti
il formato
I comandi MIDI ivi contenuti (Channel Voice, Channel Mode,
System, ecc.) devono essere correttamente decodificati e gestiti
• Definizione: protocollo per il trasferimento di
informazioni MIDI tra dispositivi differenti
• Date: protocollo aggiunto alle specifiche nel 1988
Programmazione MIDI (Prof. Luca A. Ludovico)
12. Standard MIDI File
Gli Standard MIDI File (SMF)
• Formato binario, con estensione di default .MID
• I file contengono una o più sequenze MIDI in cui ogni
singolo dato è temporizzato
• Possono memorizzare intere song, tracce, informazioni
sul tempo metronomico, sul tempo musicale, stringhe di
testo cantato e altre info di carattere descrittivo
• Formato sufficientemente generico per essere leggibile
da molti sistemi, ma flessibile per poter contenere
informazioni proprietarie dei sequencer
–
Esempio: TXT vs DOC (vantaggi e svantaggi)
Programmazione MIDI (Prof. Luca A. Ludovico)
12. Standard MIDI File
Tipo 0, 1 e 2
• Tre tipi di SMF:
–
Tipo 0: unisce tutte le tracce e tutti i canali su un’unica traccia;
le informazioni di tempo e le impostazioni di bpm sono
contenute nella traccia stessa
–
Tipo 1: salva ogni parte (canale MIDI) su una traccia separata
nella partitura, e salva le indicazioni di tempo e il bpm un’unica
volta, solo sulla prima traccia; è possibile salvare un’unica song
–
Tipo 2: mantiene separate le tracce e consente di creare
sezioni, permettendo di specificare per ciascuna traccia e
sezione impostazioni di bpm e indicazioni di tempo diverse
Programmazione MIDI (Prof. Luca A. Ludovico)
12. Standard MIDI File
Tipo 0, 1 e 2
Battute e
pulsazioni
Programmazione MIDI (Prof. Luca A. Ludovico)
12. Standard MIDI File
Differenze rispetto ai file audio
• GM non è ideato come strumento creativo o espressivo,
ma come modo per distribuire contenuti con
caratteristiche di compatibilità tra sistemi diversi e
livelli di qualità accettabili
–
Esempi: sonorizzazione delle pagine Web, applicaz. Karaoke
• Gli SMF contengono messaggi MIDI e non audio digitale:
–
–
contengono comandi per istruire moduli sonori nel produrre
forme d’onda (diverse a seconda del modulo)
non contengono forme d’onda
• Spesso il MIDI è detto livello sub-simbolico di codifica
della partitura, o livello di performance
Programmazione MIDI (Prof. Luca A. Ludovico)
12. Standard MIDI File
Occupazione di spazio
• Esempio: Preludio e Fuga n.1 di J.S. Bach (3 min.)
–
MIDI: 30 KB circa
–
WAV con qualità Audio CD: 30.000 KB circa
–
MP3 compresso a 128 kbps: 3.000 KB circa
• Queste considerazioni spiegano il successo (soprattutto
nei primi tempi) in campi quali la sonorizzazione delle
pagine Web e le suonerie polifoniche per cellulari
Programmazione MIDI (Prof. Luca A. Ludovico)
12. Standard MIDI File
Vantaggi e svantaggi
• Sia SMF sia file in formati audio digitali (compressi o non
compressi) sono leggibili dalla maggior parte dei
computer
• La descrizione musicale negli SMF è semanticamente
vicina al livello simbolico di partitura, e dunque:
–
–
molto compatta
facilmente manipolabile con operatori tipicamente musicali,
anche in modo puntuale o parte per parte
• L’effetto audio di uno SMF non è prevedibile con
precisione (dipende dal modulo sonoro) ed è legato alle
limitate opzioni offerte dai timbri GM
Programmazione MIDI (Prof. Luca A. Ludovico)
12. Standard MIDI File
Sezione 12.1
STRUTTURA SMF
Programmazione MIDI (Prof. Luca A. Ludovico)
12. Standard MIDI File
Chunk
• Chunk: strutture dati con una struttura comune
• Intestazione dei chunk di 8 byte:
–
–
4 byte (32 bit, 4 char ASCII) che definiscono il tipo di chunk
4 byte (32 bit, 1 longint [0..232-1]) per esprimere la lunghezza in
byte del chunk stesso (eclusi gli 8 byte di intestazione)
Header (8 byte)
Tipo
Programmazione MIDI (Prof. Luca A. Ludovico)
12. Standard MIDI File
Lunghezza
Formati strutturati a chunk
• AIFF (Apple, 1988)
• RIFF (Microsoft e IBM, 1991)
Formati di interscambio di file
• PNG - Portable Network Graphics (1996)
Formato per le immagini raster
• 3DS Max File Format
Formato proprietario per il salvataggio di oggetti 3D
Studio Max
• …
Piè di pagina: spazio libero per eventuale
nome struttura o altro
Tipi di chunk
• Il formato SMF è basato su sequenze di chunk
• I chunk hanno sempre una parte di intestazione o header
(4+4 byte) seguita da una parte di dati (lunghezza
variabile, ma definita in una sottoparte
dell’intestazione)
• Due tipi di chunk in MIDI:
–
–
MIDI Track header (MThd) chunk, o blocco di intestazione di
traccia MIDI
MIDI Track (MTrk) chunk , o blocco di traccia MIDI
• Struttura: 1 MThd seguito da [1..n] MTrk
Programmazione MIDI (Prof. Luca A. Ludovico)
12. Standard MIDI File
Struttura generale di uno SMF
• MThd <lunghezza dei dati dello header><dati dello header>
M
T
h
d
Lunghezza
• MTrk <lunghezza dei dati della track> <dati della track>
M
T
r
k
Lunghezza
• MTrk <lunghezza dei dati della track> <dati della track>
M
T
r
k
• …
Programmazione MIDI (Prof. Luca A. Ludovico)
12. Standard MIDI File
Lunghezza
Prima struttura: MIDI Track header (MThd) chunk
• MThd <lunghezza dei dati dello header><dati dello header>
M
T
h
d
Lunghezza
• Contenuto esadecimale del chunk
4D
54
68
64 00
HEADER
00
00
06
00
0x
nn
nn
tt
tt
DATI
(codice ASCII per MThd) (lunghezza pari a 6 byte) (tipo SMF) (tracce MTrk) (risoluz.)
• x = 0  SMF Type 0, x = 1  SMF Type 1, x = 2  SMF Type 2
• nn identifica il numero di tracce di tipo MTrk presenti
• tt tt indica la risoluzione temporale (vedi slide successiva)
Programmazione MIDI (Prof. Luca A. Ludovico)
12. Standard MIDI File
Approfondimento sulla risoluzione
• Gli ultimi 2 byte del chunk MThd, ossia tt tt nella slide
precedente, definiscono la risoluzione temporale
• Sono supportati 2 tipi di risoluzione:
–
–
metrical time
Se il bit 15 (il bit più significativo nella coppia di byte) è uguale a zero, i bit
dal 14 allo 0 rappresentano il numero di tick in cui viene divisa una nota da un
quarto. Questo valore è detto PPQN (Pulse per Quarter Note), ossia numero di
impulsi (tick) per quarto
time-code-based time
Se il bit 15 è uguale a 1, si fa riferimento a come si suddivide il secondo come
unità di tempo, in modo consistente con SMPTE e MIDI Time Code.
I bit da 14 a 8 contengono i valori -24, -25, -29, -30 (espressi in complemento a
due) che corrispondono agli standard SMPTE e MTC (con il -29 si identifica il
formato 30 drop frame) e rappresentano il numero di frame per secondo.
I bit da 7 a 0 (espressi normalmente) rappresentano la risoluzione all'interno di
un frame. Ad esempio, 4 è la risoluzione del MIDI Time Code.
Programmazione MIDI (Prof. Luca A. Ludovico)
12. Standard MIDI File
Esempi di risoluzione metrical-time
• Si esprime come viene suddivisa la pulsazione da un
quarto
• Esempio: se tt tt = 0016 6016 = 9610
–
–
per rappresentare un intervallo temporale di un quarto fra due
eventi successivi il numero dei tick n = 9610
per un intervallo di un ottavo n = 4810
• L’intervallo di tempo che separa due eventi è detto
delta time (si vedano le slide successive)
Programmazione MIDI (Prof. Luca A. Ludovico)
12. Standard MIDI File
Altre strutture: MIDI Track (MTrk) chunk
• MTrk <lunghezza dei dati dello header><dati della track>
M
T
rh
dk
Lunghezza
• Contenuto esadecimale del chunk
4D
54
72
6B
nn
nn
nn
nn
HEADER
(codice ASCII per MTrk)
(lunghezza variabile)
??
??
??
??
??
??
DATI
(eventi MIDI della traccia)
• Dopo l’header, vengono descritti tutti gli eventi MIDI della traccia, in
termini di coppie [delta time, event]: ogni evento viene temporizzato
Programmazione MIDI (Prof. Luca A. Ludovico)
12. Standard MIDI File
Tempo Delta
• Fra ogni coppia di eventi in un chunk di traccia si
inserisce un tempo delta, o T
• T rappresenta la durata in PPQN (pulse per quarter
note) del lasso di tempo che intercorre tra un evento e
quello immediatamente successivo
• La sua risoluzione viene definita all’interno del chunk
di intestazione (MThd chunk), ma i valori di T evento
per evento sono scritti all’interno del chunk di traccia
(MTrk chunk)
Programmazione MIDI (Prof. Luca A. Ludovico)
12. Standard MIDI File
Rappresentazione del Tempo Delta
• T viene rappresentato in lunghezza variabile, ovvero utilizzando
–
–
un numero variabile di byte
solo 7 bit per byte
• Per la ricostruzione del valore complessivo, si usa una logica tipo
MSB-LSB, ma con un numero grande a piacere di byte
• Ogni byte nella rappresentazione a lunghezza variabile ha il bit più
significativo posto ad un valore fissato, in modo da poterlo
riconoscere.
• Tutti i byte hanno il bit più significativo posto a 1 tranne l’ultimo,
il quale ha il bit valorizzato a 0.
Programmazione MIDI (Prof. Luca A. Ludovico)
12. Standard MIDI File
Esempio di rappresentazione in lungh. variabile
• Sia 0000008016 il valore da convertire in
rappresentazione in lunghezza variabile
00 00 00 80
Si converte il numero in base 2
0000 0000
0000 0000
0000 0000
1000 0000
Si antepongono i bit piùSisignificativi
opportuni
per completare
ottetti
anteponendo
1 a tutti i blocchi, tranne all’ultimo
considerano
(a blocchi
di 7 bit) iglisoli
valori
significativi
1000 0001 0000 0000
Si converte il valore ottenuto in base 16
81 00
• Risultato: 8116 0016
Programmazione MIDI (Prof. Luca A. Ludovico)
12. Standard MIDI File
Esercizi
• Si esprimano in notazione a lunghezza variabile
i seguenti numeri:
–
–
–
–
–
–
1011010112
10001111 011000002
2710
7210
3A16
10F16
Programmazione MIDI (Prof. Luca A. Ludovico)
12. Standard MIDI File
Osservazioni sul Tempo Delta
• Se T = 0, gli eventi MIDI “separati” da T occorrono
simultaneamente
• Esempio: 9016 3C16 4016
0016 9016 4016 4016
ossia:
NoteOn [Ch1, Do4, Vel64]
0016 NoteOn [Ch1, Mi4, Vel64]
crea un accordo Do3 – Mi3 simultaneo
• T separa generici eventi MIDI. Se la coppia di eventi è
NoteOn – NoteOff con messaggi relativi allo stesso
canale e allo stesso pitch, non interpolati da altri
eventi, allora T determina la durata della nota
Programmazione MIDI (Prof. Luca A. Ludovico)
12. Standard MIDI File
Confronto tra scrittura musicale e MIDI
In musica
evento
In MIDI
evento evento
T1
NoteOn
Programmazione MIDI (Prof. Luca A. Ludovico)
12. Standard MIDI File
T2 T4
T3
NoteOff/Note On
t
NoteOff/NoteOn
Esercizio
• Si mostri il chunk MThd per un file MIDI con le seguenti
caratteristiche:
– Tipo 0
– [Un’unica traccia]
– Risoluzione temporale metrical-time di 128 PPQN
• Si mostri un esempio di chunk MTrk corrispondente
all’MThd sopra definito per la seguente situazione:
– Un evento Note On seguito da un evento Note Off per una
nota La dell’ottava centrale di durata una metà sul canale 8
con velocity 99
Programmazione MIDI (Prof. Luca A. Ludovico)
12. Standard MIDI File
Soluzione
• Chunk MThd
4D 54 68 64 00 00 00 06 00 00 00 01 00 80
– Tipo 0
– Un’unica traccia
– Risoluzione temporale metrical-time di 128 PPQN
• Chunk MTrk
4D 54 72 6B ?? ?? ?? ?? … 97 45 63 82 00 87 45 63 …
–
–
–
–
Note On (10012 = 916) sul canale 8 (01112 = 716)
Note Off (10002 = 816) sul canale 8 (01112 = 716)
Pitch 6910 = 4516 Velocity 9910 = 6316
Rappresentazione del T:
25610 = 1000000002  (1)00000102 (0)00000002 = 8216 0016
Programmazione MIDI (Prof. Luca A. Ludovico)
12. Standard MIDI File
Durata in microsecondi di un tick
• Come si trasforma un intervallo in tick in un intervallo in secondi o
sottomultipli?
Attenzione: n tick equivalgono a valori ritmici da un quarto, ma
per passare a valori in unità di tempo assolute è necessario
conoscere il BPM della song
• Sia BPM il valore di beats per minute, ossia il numero di pulsazioni
al minuto, e PPQN la risoluzione in impulsi per pulsazione da un
quarto. Allora la durata in millisecondi vale
d = (60.000 / BPM) / PPQN
• Esempi:
–
–
per BPM = 60, PPQN = 20  d = 0.05 s
(1 quarto dura 0.05 · 20 = 1 s)
per BPM = 120, PPQN = 25  d = 0.02 s (1 quarto dura 0.02 · 25 = 0.5 s)
Programmazione MIDI (Prof. Luca A. Ludovico)
12. Standard MIDI File
Scarica

Gli Standard MIDI File