Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
1
Esercitazione su SMF Lezione 12
Programmazione MIDI (Prof. Luca A. Ludovico)
2
Analisi pratica di un breve file MIDI
4D D B FF FF C0 00 FF FF 2F 00 4D B A 00 B B0 0A B0 5B B0 5D C FF 2F 00 Programmazione MIDI (Prof. Luca A. Ludovico) 12. Esercitazione su SMF
3
Visualizzazione in MuseScore
L’apertura di un file MIDI con un software di editing della partitura è del tutto arbitraria, e la migliore o peggiore resa della notazione dipende dagli algoritmi di interpretazione del MIDI specifici del software Scopo pratico: mostrare con notazione convenzionale quale sequenza di eventi ci si può aspettare nell’esercizio Attenzione: alcuni aspetti potrebbero essere fuorvianti. Ad esempio, sembrerebbe un file MIDI di tipo 0, e invece… Programmazione MIDI (Prof. Luca A. Ludovico) 12. Esercitazione su SMF
4
Come segmentare uno SMF in chunk
Esiste sicuramente uno e un solo chunk di intestazione (MThd), di lunghezza complessiva pari a 14 byte e posizionato all’inizio del file Possono esistere uno o più chunk di traccia (MTrk), di lunghezza variabile e delimitati da [4D B … FF 2F 00] Per i file MIDI di tipo 0 vi è un unico chunk MTrk, per il tipo 1 e 2 ne deve esistere almeno uno Il chunk MThd e il/i chunk MTrk tassellano il file MIDI: tutti i byte appartengono a un qualche chunk. Programmazione MIDI (Prof. Luca A. Ludovico) 12. Esercitazione su SMF
5
Ricerca dei chunk di header e di traccia
4D D B FF FF C0 00 FF FF 2F 00 4D B A 00 B B0 0A B0 5B B0 5D C FF 2F 00 Programmazione MIDI (Prof. Luca A. Ludovico) 12. Esercitazione su SMF
6
Analisi del chunk MThd 4D 54 68 64 00 00 00 06 00 01 00 02 01 80 4D 54
72 6B FF FF C0 00 FF FF 2F 00 4D B A 00 B B0 0A 30 00 B0 5B B0 5D C FF 2F 00 Come si capisce fin dove si estende? E’ un chunk di lunghezza fissa La sua lunghezza è comunque scritta nell’header del chunk Dal byte successivo inizia il primo MTrk, riconoscibile dalla sequenza 4D B Programmazione MIDI (Prof. Luca A. Ludovico) 12. Esercitazione su SMF
7
Analisi del chunk MThd 4D 54 68 64 00 00 00 06 00 01 00 02 01 80 …
4D : intestazione di 4 byte del MIDI Track header chunk : questi 4 byte informano che seguiranno 6 byte di dati 00 01: questi 2 byte informano che il file MIDI è di tipo 1 E’ vero? Si contano le tracce, ossia i chunk MTrk. Verifica con viewer esadecimale 00 02: questi 2 byte informano che dopo il MThd seguiranno 2 blocchi di traccia MTrk E’ vero? Verifica con viewer esadecimale 01 80: informazione che specifica la risoluzione in impulsi per quarto di nota. Risulta: PPQN = = 38410 Programmazione MIDI (Prof. Luca A. Ludovico) 12. Esercitazione su SMF
8
Analisi del primo chunk MTrk
4D D 54 72 6B FF FF C0 00 FF FF 2F 00 4D B A 00 B B0 0A 30 00 B0 5B B0 5D C FF 2F 00 Come si capisce fin dove si estende? E’ un chunk di lunghezza variabile, ma si può leggere il valore nell’header del chunk. Attenzione: aprendo il file con un viewer esadecimale, è scritto in base 16!!! Si conclude con il meta di fine traccia FF 2F 00, seguito da un nuovo MTrk Programmazione MIDI (Prof. Luca A. Ludovico) 12. Esercitazione su SMF
9
Come segmentare i contenuti di MTrk
L’intero contenuto di un chunk MTrk (per contenuto si intende la parte successiva all’header) è un susseguirsi di coppie [tempo delta, evento] I tempi delta vanno interpretati proseguendo la lettura dei byte finché non si trova il byte che ha il bit più significativo posto a 0 (tutti i byte che lo precedono in DT iniziano con una cifra esadecimale 8) In molti casi il tempo delta si esprime su un unico byte; un caso particolare è il tempo delta posto a 00, per indicare simultaneità o occorrenza immediata Gli eventi devono essere segmentati secondo le regole di decodifica degli eventi MIDI o dei metaeventi tipici degli SMF Ciascuno di essi ha una sua lunghezza, variabile da evento a evento ma predeterminata (ad es. i messaggi Note On e Note Off occupano 3 byte, il messaggio Program Change ne occupa 2, il metaevento Segnatura di tempo 7) Quello che segue una coppia [tempo delta, evento] è una nuova coppia Programmazione MIDI (Prof. Luca A. Ludovico) 12. Esercitazione su SMF
10
Analisi del primo chunk MTrk
… 4D B FF FF C0 00 FF FF 2F 00 … 00: Tempo Delta. Questo byte posto a 0 stabilisce che il successivo evento rispetto al precedente si verificherà dopo 0 tick, quindi senza alcun ritardo FF : evento Meta di segnatura di tempo 03: Numeratore = 3 02: Denominatore = 2^02 = 4 60: un colpo di metronomo ogni 96 tick MIDI (in questo caso, al sedicesimo) 08: 8 note da 1/32 in una nota ¼ Segnatura di tempo per le misure è ¾ Programmazione MIDI (Prof. Luca A. Ludovico) 12. Esercitazione su SMF
11
Analisi del primo chunk MTrk
… 4D B FF FF C0 00 FF FF 2F 00 … 00: Tempo Delta pari a 0 tick FF C0: evento Meta di tempo metronomico 0927C016 = = n; Per definizione n = ( ∙ d / 4) / BPM Sono noti i valori di n e di d è possibile calcolare il BPM BPM = 100 pulsazioni al minuto La velocità metronomica del brano MIDI è impostata a 100 BPM Programmazione MIDI (Prof. Luca A. Ludovico) 12. Esercitazione su SMF
12
Analisi del primo chunk MTrk
… 4D B FF FF C0 00 FF FF 2F 00 … 00: Tempo Delta pari a 0 tick FF : evento Meta di tonalità 01: 1 diesis in chiave (Sol Maggiore/Mi minore) 00: la tonalità è maggiore Tonalità del brano è Sol Maggiore Programmazione MIDI (Prof. Luca A. Ludovico) 12. Esercitazione su SMF
13
Analisi del primo chunk MTrk
… 4D B FF FF C0 00 FF FF 2F 00 … 00: Tempo Delta pari a 0 tick FF 2F 00: fine del blocco di traccia Programmazione MIDI (Prof. Luca A. Ludovico) 12. Esercitazione su SMF
14
Analisi del secondo chunk MTrk
4D D 54 72 6B FF FF C0 00 FF FF 2F 00 4D B A 00 B B0 0A 30 00 B0 5B B0 5D C FF 2F 00 Come si capisce fin dove si estende? E’ un chunk di lunghezza variabile, ma si può leggere il valore nell’header del chunk. 2A16 = 4210 Si conclude con il meta di fine traccia FF 2F 00 Programmazione MIDI (Prof. Luca A. Ludovico) 12. Esercitazione su SMF
15
Analisi del secondo chunk MTrk
… 4D B A 00 B B0 0A 30 00 B0 5B B0 5D C FF 2F 00 00: Tempo Delta pari a 0 tick B : Evento MIDI Control Change n. 7 (Volume) Ctrl Change (Ch. 1) Channel Volume Value: 100 Osservazione: questo evento MIDI e i successivi sono stati automaticamente inseriti dal software utilizzato per esportare il MIDI Programmazione MIDI (Prof. Luca A. Ludovico) 12. Esercitazione su SMF
16
Analisi del secondo chunk MTrk
… 4D B A 00 B B0 0A 30 00 B0 5B B0 5D C FF 2F 00 00: Tempo Delta pari a 0 tick B0 0A 30: Evento MIDI Control Change n. 10 (PanPot) Ctrl Change (Ch. 1) PanPot Value: 48 Programmazione MIDI (Prof. Luca A. Ludovico) 12. Esercitazione su SMF
17
Analisi del secondo chunk MTrk
… 4D B A 00 B B0 0A 30 00 B0 5B B0 5D C FF 2F 00 00: Tempo Delta pari a 0 tick B0 5B 40: Evento MIDI Control Change n. 91 (Riverbero) Ctrl Change (Ch. 1) Riverbero Value: 64 Programmazione MIDI (Prof. Luca A. Ludovico) 12. Esercitazione su SMF
18
Analisi del secondo chunk MTrk
… 4D B A 00 B B0 0A 30 00 B0 5B B0 5D C FF 2F 00 00: Tempo Delta pari a 0 tick B0 5D 10: Evento MIDI Control Change n. 93 (Chorus) Ctrl Change (Ch. 1) Chorus Value: 16 Programmazione MIDI (Prof. Luca A. Ludovico) 12. Esercitazione su SMF
19
Analisi del secondo chunk MTrk
… 4D B A 00 B B0 0A 30 00 B0 5B B0 5D C FF 2F 00 00: Tempo Delta pari a 0 tick C0 04: Evento MIDI Program Change n. 4 (Piano Elettrico) Program Change (Ch.1) Value: 4 Programmazione MIDI (Prof. Luca A. Ludovico) 12. Esercitazione su SMF
20
Analisi del secondo chunk MTrk
… 4D B A 00 B B0 0A 30 00 B0 5B B0 5D C FF 2F 00 00: Tempo Delta pari a 0 tick : Evento MIDI Note On, pitch 69 (La centrale), velocity Note On (Ch.1) Pitch: Velocity: 100 Programmazione MIDI (Prof. Luca A. Ludovico) 12. Esercitazione su SMF
21
Analisi del secondo chunk MTrk
… 4D B A 00 B B0 0A 30 00 B0 5B B0 5D C FF 2F 00 86 00: Tempo Delta pari a tick (1) (0) = La risoluzione al quarto era = 38410, quindi è ΔT della minima : Evento MIDI Note Off, pitch 69 (La centrale), velocity Note Off (Ch.1) Pitch: Velocity: 100 Programmazione MIDI (Prof. Luca A. Ludovico) 12. Esercitazione su SMF
22
Analisi del secondo chunk MTrk
… 4D B A 00 B B0 0A 30 00 B0 5B B0 5D C FF 2F 00 81 40: Tempo Delta pari a tick (1) (0) = La risoluzione al quarto era = 38410, quindi è ΔT della croma : Evento MIDI Note On, pitch 66 (Fa#), velocity Note On (Ch.1) Pitch: Velocity: 100 Programmazione MIDI (Prof. Luca A. Ludovico) 12. Esercitazione su SMF
23
Analisi del secondo chunk MTrk
… 4D B A 00 B B0 0A 30 00 B0 5B B0 5D C FF 2F 00 81 40: Tempo Delta pari a tick (1) (0) = La risoluzione al quarto era = 38410, quindi è ΔT della croma : Evento MIDI Note Off, pitch 66 (Fa#), velocity Note Off (Ch.1) Pitch: Velocity: 100 Programmazione MIDI (Prof. Luca A. Ludovico) 12. Esercitazione su SMF
24
Analisi del secondo chunk MTrk
… 4D B A 00 B B0 0A 30 00 B0 5B B0 5D C FF 2F 00 00: Tempo Delta pari a 0 tick FF 2F 00: Fine del chunk di traccia Programmazione MIDI (Prof. Luca A. Ludovico) 12. Esercitazione su SMF
25
Visualizzazione nel sequencer
Legenda Griglia: linea scura quarto Programmazione MIDI (Prof. Luca A. Ludovico) 12. Esercitazione su SMF
26
ESERCITAZIONE Sezione 12.1
Programmazione MIDI (Prof. Luca A. Ludovico) 12. Esercitazione su SMF
27
Esercizio di analisi: 14_esercizio.mid
4D C0 4D B F B0 7B FF 2F 00 Programmazione MIDI (Prof. Luca A. Ludovico) 12. Esercitazione su SMF
28
Identificazione dei chunk e della loro lunghezza
4D C0 4D 54 72 6B F B0 7B 00 00 FF 2F 00 Legenda: Header dell’MThd Header dell’MTrk Lunghezza dell’MThd Lunghezza dell’MTrk Programmazione MIDI (Prof. Luca A. Ludovico) 12. Esercitazione su SMF
29
Analisi del chunk MThd 4D 54 68 64 00 00 00 06 00 00 00 01 03 C0 …
4D : intestazione di 4 byte del MIDI Track header chunk : questi 4 byte informano che seguiranno 6 byte di dati sino alla fine di questo chunk header 00 00: questi 2 byte informano che il file MIDI è di tipo 0 E’ vero? Si contano le tracce, ossia i chunk MTrk. 00 01: questi 2 byte informano che dopo il MThd seguirà 1 blocco di traccia MTrk E’ vero? Verifica con viewer esadecimale 03 C0: informazione che specifica la risoluzione in impulsi per quarto di nota. Risulta: PPQN = 03C016 = 96010 Programmazione MIDI (Prof. Luca A. Ludovico) 12. Esercitazione su SMF
30
MTrk: suggerimenti 4D 54 68 64 00 00 00 06 00 00 00 01 03 C0 4D 54
72 6B F B0 7B 00 00 FF 2F 00 Legenda: Note On Note Off Tempo Delta Controller Fine traccia Le frecce mettono in corrispondenza l’accensione e lo spegnimento della stessa nota Programmazione MIDI (Prof. Luca A. Ludovico) 12. Esercitazione su SMF
31
Qualche osservazione Considerando i soli nibble (4 bit) più significativi del byte di stato degli eventi MIDI, alcuni valori sono standard dal punto di vista dell’interpretazione della performance: 9x indica un messaggio NoteOn 8x indica un messaggio NoteOff Bx indica un control change Cx indica un program change … Ovviamente, essendo messaggi di canale, il secondo nibble non è standard Come si riconoscono le coppie di apertura/chiusura di un evento musicale? Il NoteOff (8x) corrisponde a un precedente NoteOn (9x) ove la x è la stessa e il primo byte di dati è uguale. Programmazione MIDI (Prof. Luca A. Ludovico) 12. Esercitazione su SMF
32
Visualizzazione nel sequencer
Legenda Griglia: linea scura quarto; linea chiara sedicesimo Colori: mattone ch. 1; oliva ch. 2 Programmazione MIDI (Prof. Luca A. Ludovico) 12. Esercitazione su SMF
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.