Standard MIDI File: eventi MTrk

Slides:



Advertisements
Presentazioni simili
Esercitazione su SMF Lezione 14
Advertisements

Indici di Posizione Giulio Vidotto Raffaele Cioffi.
Consentono di descrivere la variabilità all’interno della distribuzione di frequenza tramite un unico valore che ne sintetizza le caratteristiche.
.  I tipi di dati non primitivi sono gli array, le struct e le union.  Gli array sono degli aggregati di variabili dello stesso tipo.  La dichiarazione.
Creare e modificare suoni
Unità di apprendimento 1
IL SOFTWARE (FPwin 6.0).
© 2007 SEI-Società Editrice Internazionale, Apogeo
Unità di apprendimento 1
Unità didattiche 1) Figure e Valori musicali
La rappresentazione delle informazioni
Introduzione al linguaggio C
Dal problema al processo risolutivo
Terza Lezione → Navigare nel file System → parte 2
DISTRIBUZIONI TEORICHE DI PROBABILITA’
Lezione n°9 Prof.ssa Rossella Petreschi
Trasmettitori e ricevitori
Dal problema al processo risolutivo
Editing digitale della partitura Creazione di plugin
File con indice (sparso)
Web MIDI API - Esempi Lezione 24
La frazione come numero razionale assoluto
Dati MIDI in Java Lezione 19
Organizzazione fisica
I FILES AD ACCESSO SEQUENZIALE
PROGRAMMAZIONE BASH – ISTRUZIONE IF
I tag essenziali.
Informatica A.A. 2016/17 Prof. Italo Epicoco
La Statistica Istituto Comprensivo “ M. G. Cutuli”
Creazione di pagine per Internet
Introduzione L’8254 è un interval timer event/counter, progettato per risolvere i problemi del controllo del timing, comuni ad ogni microcomputer. E’ costituito.
Rappresentazione dei Numeri
Programmazione e Laboratorio di Programmazione
A/D seconda parte.
Messaggi Control Change
APPROFONDIMENTI CON ESEMPI DI CAMPIONAMENTO E SUCCESSIVA RICOSTRUZIONE PER INTERPOLAZIONE LINEARE Nelle pagine che seguono sono riportati i risultati del.
Vari e semplici programmi.
Programmazione e Laboratorio di Programmazione
RTP MIDI e Network Musical Performances
Programmazione e Laboratorio di Programmazione
Lettura di input MIDI da Web MIDI API
© 2007 SEI-Società Editrice Internazionale, Apogeo
Lezione 7 Laboratorio 1 Programmazione MIDI (Prof. Luca A. Ludovico)
Messaggi System Exclusive
Messaggi Channel Mode Lezione 5
Sincronizzazione Lezione 6
Esercitazione su Instruction Level Parallelism
Web MIDI API - Esempi Lezione 17
Messaggi System Common e System Real Time
Standard MIDI File Lezione 10
Algoritmi e Strutture Dati
Esercitazione su SMF Lezione 12
Esercizi sulla Web MIDI API
Collegamento di input e output tramite Web MIDI API
Sistemi Digitali.
Laboratorio II, modulo “Skype”.
La struttura dei primi programma in C
APPUNTI SUL LINGUAGGIO C Esercizi su File e Alberi Binari
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
UNIT 12 INTERFACCIA SERIALE.
Programmazione e Laboratorio di Programmazione
Uno step sequencer Lezione 18
ALGORITMO E’ una successione finita di passi che consente di risolvere tutti i problemi di una classe e di determinare il risultato. Caratteristiche: Finito.
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Come compilare le slides Lezioni da pubblicare solo sul Web
Corso di programmazione, Simulazione, ROOT, code, ecc. ecc.
Transcript della presentazione:

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

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

Prima struttura: MIDI Track header (MThd) chunk MThd <lunghezza dei dati dello header><dati dello header> Contenuto esadecimale del chunk 4D 54 68 64 00 00 00 06 00 0x 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

Altre strutture: MIDI Track (MTrk) chunk MTrk <lunghezza dei dati dello header><dati della track> Contenuto esadecimale del chunk 4D 54 72 6B 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

Apertura di file MIDI con viewer esadecimale Gli SMF sono salvati in formato binario E’ possibile aprirli tramite un viewer esadecimale: TextPad (scaricabile da http://www.textpad.com) Editor online (https://hexed.it/, https://www.onlinehexeditor.com, …) 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

MIDI Running Status MIDI è seriale: eventi originariamente simultanei non possono essere trasmessi nello stesso istante. Con frequenza 31.25 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

Esempio di MIDI Running Status Contenuto del campo MTrk per un evento MIDI di un accordo maggiore di Do con stato di esecuzione Risultato: … 90 24 40 00 28 55 00 2B 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

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

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

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

I metadati: metro della misura FF 58 04 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

Esempio di metro Si consideri il file Michelle_type0.mid. Si cerchi la prima indicazione di metro (FF 58) FF 58 04 04 02 18 08 0416  num = 4; 0216  den = 202; Ne consegue: metro = 4/4 1816  il metronomo batte ogni 12 clock MIDI (ottavi) Altro esempio: FF 58 04 06 03 24 08 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

I metadati: tempo metronomico FF 51 03 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 = (60.000.000 · d / 4) / bpm 60.000.000 è 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] = 60.000.000[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

Esempio di tempo metronomico Si consideri il file Michelle_type0.mid Si cerchi la prima indicazione di tempo (FF 51) FF 51 03 07 A1 1F 07A11F16 = 499999 = n; Per definizione n = (60.000.000 · 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

I metadati: armatura di chiave FF 59 02 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

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

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

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 03 05 46 6C 75 74 65 Esempio: FF 03 08 56 69 6F 6C 69 6E 20 49 Programmazione MIDI (Prof. Luca A. Ludovico) 11. Standard MIDI File

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

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 05 05 50 72 6F 20 2D | ΔT | Note Off | ΔT | ... corrisponde al testo “Pro –” Programmazione MIDI (Prof. Luca A. Ludovico) 11. Standard MIDI File

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