La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Standard MIDI File: eventi MTrk

Presentazioni simili


Presentazione sul tema: "Standard MIDI File: eventi MTrk"— Transcript della presentazione:

1 Standard MIDI File: eventi MTrk
Lezione 11 Standard MIDI File: eventi MTrk Programmazione MIDI (Prof. Luca A. Ludovico)

2 Struttura generale di uno SMF
MThd <lunghezza dei dati dello header><dati dello header> MTrk <lunghezza dei dati della track> <dati della track> M T h d Lunghezza M T r k Lunghezza M T r k Lunghezza Programmazione MIDI (Prof. Luca A. Ludovico) 11. Standard MIDI File

3 Prima struttura: MIDI Track header (MThd) chunk
MThd <lunghezza dei dati dello header><dati dello header> Contenuto esadecimale del chunk 4D x nn nn tt tt HEADER DATI (codice ASCII per MThd) (lunghezza pari a 6 byte) (tipo SMF) (tracce MTkr) (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 M T h d Lunghezza Programmazione MIDI (Prof. Luca A. Ludovico) 11. Standard MIDI File

4 Altre strutture: MIDI Track (MTrk) chunk
MTrk <lunghezza dei dati dello header><dati della track> Contenuto esadecimale del chunk 4D B nn nn nn nn ?? ?? ?? ?? ?? ?? HEADER DATI (codice ASCII per MTrk) (lunghezza variabile) (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 M T r k M T h d Lunghezza Programmazione MIDI (Prof. Luca A. Ludovico) 11. Standard MIDI File

5 Apertura di file MIDI con viewer esadecimale
Gli SMF sono salvati in formato binario E’ possibile aprirli tramite un viewer esadecimale: TextPad (scaricabile da Editor online ( …) Esperimento: ascolto e visualizzazione in esadecimale dei file MIDI di tipo 0 e di tipo 1 Riconoscimento e parsing dell’MThd Riconoscimento del (o degli) MTrk Differenze tra tipo 0 e tipo 1, verifica del numero di tracce Programmazione MIDI (Prof. Luca A. Ludovico) 11. Standard MIDI File

6 MIDI Running Status MIDI è seriale: eventi originariamente simultanei non possono essere trasmessi nello stesso istante. Con frequenza Kbit/s e10 bit per byte di dati MIDI, un messaggio Note On o Note Off (3 byte) richiede 960µs, circa 1 ms, per la trasmissione Per ridurre il ritardo introdotto e la quantità di dati trasmessi si può usare la tecnica del "running status“ (o stato di esecuzione) Idea: inviare uno status byte solo se il messaggio non è dello stesso tipo di quello precedente sullo stesso canale. Programmazione MIDI (Prof. Luca A. Ludovico) 11. Standard MIDI File

7 Esempio di MIDI Running Status
Contenuto del campo MTrk per un evento MIDI di un accordo maggiore di Do con stato di esecuzione Risultato: … B 49 … Tempo delta Byte di stato Valore I byte di dati II byte di dati Note On, Ch. 1 9016 Pitch (C3) 2416 Velocity 4016 00 Stato di esec. N/A Pitch (E3) 2816 5516 Pitch (G3) 2B16 4916 Programmazione MIDI (Prof. Luca A. Ludovico) 11. Standard MIDI File

8 Confronto Senza running status Con running status MIDI Out o MIDI Thru
MIDI In MIDI Out o MIDI Thru MIDI In Programmazione MIDI (Prof. Luca A. Ludovico) 11. Standard MIDI File

9 Osservazioni L’efficacia del metodo migliora usando messaggi Note On con velocity = 0 anzichè Note Off Altri esempi notevoli: variazione valore nei controller continui o pitch bend wheel Osservazioni: Non ci sono limiti di tempo all’esecuzione del byte di stato Si applica solo ai messaggi channel voice e channel mode; non viene influenzato dai real-time; viene interrotto da SysEx e System Common Cosa succede se lo stato di esecuzione viene cancellato? Programmazione MIDI (Prof. Luca A. Ludovico) 11. Standard MIDI File

10 Descrizione degli eventi
Nel MIDI Track (MTrk) chunk si trovano eventi <event> separati da tempi delta <delta_time> <event> = <MIDI event> |<sysex event> | <meta-event> <MIDI event> = qualsiasi channel message si adotta la tecnica del running status <sysex event> = F0 <length> <System Exclusive bytes> il primo byte ha valore F0, e sono costituiti da più byte <meta-event> = FF <type> <length> <bytes> per informazioni di tipo descrittivo, non direttamente relate alla performance musicale, contenute nelle tracce MTrk (ad es. però il BPM è fondamentale) il primo byte ha valore FF, e sono costituiti da più byte Programmazione MIDI (Prof. Luca A. Ludovico) 11. Standard MIDI File

11 I metadati: metro della misura
FF xx yy kk 08 FF: definisce il tipo di evento  metadato 58: identifica il tipo di metadato  metro della misura 04: quantità di byte contenuti nella parte seguente (costante) xx: numeratore del rapporto della suddivisione della misura Es: per ¾ = 03 yy: codifica del denominatore del rapporto Il numero da inserire è l’esponente cui elevare la base 2 per ottenere il denominatore prescelto, espresso in esadecimale Es.: interi: yy = 00, metà: yy = 01, quarti: yy = 02, ottavi: yy = 03, … kk: numero di MIDI clock per un click di metronomo, sapendo che la pulsazione è suddivisa in 24 clock. 08: definisce che ci sono 8 note da 1/32 in una nota ¼ Introdotto per compatibilità con software che interpretano in modo differente la pulsazione rispetto al valore da un quarto Programmazione MIDI (Prof. Luca A. Ludovico) 11. Standard MIDI File

12 Esempio di metro Si consideri il file Michelle_type0.mid. Si cerchi la prima indicazione di metro (FF 58) FF 0416  num = 4; 0216  den = 202; Ne consegue: metro = 4/4 1816  il metronomo batte ogni 12 clock MIDI (ottavi) Altro esempio: FF Tempo di 6/8; 2416  il metronomo si avverte ogni 36 clock (quarti con il punto) id lungh. dati id lungh. dati Programmazione MIDI (Prof. Luca A. Ludovico) 11. Standard MIDI File

13 I metadati: tempo metronomico
FF xx xx xx FF: definisce il tipo di evento  metadato 51: identifica il tipo di metadato  tempo metronomico 03: quantità di byte contenuti nella parte seguente (costante) xx xx xx: microsecondi per nota da un quarto x = ( · d / 4) / bpm è la quantità di microsecondi per ogni nota da un quarto d è il denominatore del metro della misura bpm è il numero di battiti al minuto del metronomo (tempo metronomico) Si ricava dalla proporzione x[ms] : d/4[pulsazioni] = [ms] : bpm[pulsazioni], ove d tiene conto del denominatore del metro mentre la pulsazione MIDI corrisponde convenzionalmente sempre al quarto Attenzione: questo metadato va sempre specificato dopo il metro, e se cambia il metro va rispecificato Programmazione MIDI (Prof. Luca A. Ludovico) 11. Standard MIDI File

14 Esempio di tempo metronomico
Si consideri il file Michelle_type0.mid Si cerchi la prima indicazione di tempo (FF 51) FF A1 1F 07A11F16 = = n; Per definizione n = ( · d / 4) / bpm Essendo noti i valori di n e di d, è possibile calcolare il bpm bpm = 120 pulsazioni al minuto id lungh. dati Programmazione MIDI (Prof. Luca A. Ludovico) 11. Standard MIDI File

15 I metadati: armatura di chiave
FF xx yy FF: definisce il tipo di evento  metadato 59: identifica il tipo di metadato  armatura di chiave 02: quantità di byte contenuti nella parte seguente (costante) xx: numero di accidenti in chiave (vedi slide successiva) yy: definisce il modo Maggiore yy = 00 Relativo minore yy = 01 I sequencer lo scrivono e leggono in tracce distinte Può essere considerato opzionale, poiché l’altezza della nota alterata è definita dal secondo byte di Note On Programmazione MIDI (Prof. Luca A. Ludovico) 11. Standard MIDI File

16 Codifica degli accidenti in chiave
Maggiore Minore Diesis: xx = 00 : - - Do Magg. La min. xx = 01 : 1# Sol Magg. Mi min. xx = 02 : 2# Re Magg. Si min. xx = 03 : 3# La Magg. Fa# min. xx = 04 : 4# Mi Magg. Do# min. xx = 05 : 5# Si Magg. Sol# min. xx = 06 : 6# Fa# Magg. Re# min. xx = 07 : 7# Do# Magg. La# min. Bemolle: xx = FF : 1b Fa Magg. Re min. xx = FE : 2b Sib Magg. Sol min. xx = FD : 3b Mib Magg. Do min. xx = FC : 4b Lab Magg. Fa min. xx = FB : 5b Reb Magg. Sib min. xx = FA : 6b Solb Magg. Mib min. xx = F9 : 7b Dob Magg. Lab min. Programmazione MIDI (Prof. Luca A. Ludovico) 11. Standard MIDI File

17 Esempio di armatura di chiave
Si consideri il file Michelle_type0.mid Si cerchi la prima indicazione di armatura (FF 59) FF FF 00 FF  1 bemolle 00  modo maggiore Tonalità: Fa Magg. id lungh. dati Programmazione MIDI (Prof. Luca A. Ludovico) 11. Standard MIDI File

18 I metadati: nome della traccia
FF 03 ll xx xx … FF: definisce il tipo di evento  metadato 03: identifica il tipo di metadato  nome della traccia ll: quantità di byte contenuti nella parte seguente (variabile), ossia il numero di caratteri nella stringa alfanumerica che costituisce il nome xx xx …: il testo, codificato carattere per carattere, che sarà associato alla traccia dal sequencer Esempio: FF C Esempio: FF F 6C 69 6E 20 49 Programmazione MIDI (Prof. Luca A. Ludovico) 11. Standard MIDI File

19 I metadati: nome dello strumento
FF 04 ll xx xx … FF: definisce il tipo di evento  metadato 04: identifica il tipo di metadato  nome dello strumento ll: quantità di byte contenuti nella parte seguente (variabile), ossia il numero di caratteri nella stringa alfanumerica che costituisce il nome xx xx …: il nome dello strumento, codificato carattere per carattere, con o senza spazi Esempio: ricerca di FF 04 nel file Michelle_type1.mid Programmazione MIDI (Prof. Luca A. Ludovico) 11. Standard MIDI File

20 I metadati: testo cantato (lyrics)
FF 05 ll xx xx … FF: definisce il tipo di evento  metadato 05: identifica il tipo di metadato  testo cantato ll: quantità di byte contenuti nella parte seguente (variabile), ossia il numero di caratteri nella stringa alfanumerica che costituisce il testo cantato xx xx …: il testo, codificato carattere per carattere, con o senza spazi Esempio: | ΔT | Note On | ΔT | FF F 20 2D | ΔT | Note Off | ΔT | ... corrisponde al testo “Pro –” Programmazione MIDI (Prof. Luca A. Ludovico) 11. Standard MIDI File

21 I metadati: fine della traccia MTrk
FF 2F 00 FF: definisce il tipo di evento  metadato 2F: identifica il tipo di metadato  fine della traccia 00: quantità di byte contenuti nella parte seguente (in generale variabile, ma in questo caso fissa) Ogni traccia MTrk termina con un evento di chiusura formato da tre 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. Programmazione MIDI (Prof. Luca A. Ludovico) 11. Standard MIDI File


Scaricare ppt "Standard MIDI File: eventi MTrk"

Presentazioni simili


Annunci Google