messaggi system common e system real time lezione 9 programmazione midi (prof. luca a. ludovico)

27
Messaggi System Common e System Real Time Lezione 9 Programmazione MIDI (Prof. Luca A. Ludovico)

Upload: benedetta-franceschi

Post on 01-May-2015

219 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Messaggi System Common e System Real Time Lezione 9 Programmazione MIDI (Prof. Luca A. Ludovico)

Messaggi System Common e System Real Time

Lezione 9

Programmazione MIDI (Prof. Luca A. Ludovico)

Page 2: Messaggi System Common e System Real Time Lezione 9 Programmazione MIDI (Prof. Luca A. Ludovico)

Categorie di funzioni MIDI

• Channel Voice Messages– Eventi MIDI essenziali per la performance musicale (es.: Note On, Note Off)

• Channel Mode Messages– Comunicano ai dispositivi il modo di inviare o ricevere informazioni (es.: spegnimento di tutte le note)

• System Common Messages– Messaggi comuni a tutti i dispositivi HW/SW della configurazione MIDI (es.: riferimento al MIDI Time Code, accordatura)

• System Real Time Messages– Messaggi in tempo reale (es.: start e stop)

• System Exclusive Messages– Impostazioni specifiche per il dispositivo (es.: trasferimento campioni)

Programmazione MIDI (Prof. Luca A. Ludovico)9. Messaggi System Common e System Real Time

Page 3: Messaggi System Common e System Real Time Lezione 9 Programmazione MIDI (Prof. Luca A. Ludovico)

Caratteristiche comuni

• Sono messaggi «system» e non «channel»: non è richiesta l’informazione di canale.I 4 bit meno significativi servono ad identificare lo specifico messaggio, anziché il canale

• Il Byte di stato inizia con 1111 Attenzione: in un certo senso anche per i messaggi System Exclusive

• Potenzialmente si tratta di 16 messaggi, ma in realtà sono 6 system common + 6 real-time Quattro combinazioni risultano indefinite

Programmazione MIDI (Prof. Luca A. Ludovico)9. Messaggi System Common e System Real Time

Page 4: Messaggi System Common e System Real Time Lezione 9 Programmazione MIDI (Prof. Luca A. Ludovico)

MESSAGGI SYSTEM COMMONSezione 9.1

Programmazione MIDI (Prof. Luca A. Ludovico) 9. Messaggi System Common e System Real Time

Page 5: Messaggi System Common e System Real Time Lezione 9 Programmazione MIDI (Prof. Luca A. Ludovico)

Messaggi System Common

• Pensati come messaggi di sistema e non in relazione a un canale specifico

• Complessivamente 6 messaggi, il cui Byte di stato ha struttura (1)111 0 xxx (manca informazione sul canale)

• Il numero di byte di dati è eterogeneo: 0, 1 o 2 a seconda dello specifico messaggio

Programmazione MIDI (Prof. Luca A. Ludovico)9. Messaggi System Common e System Real Time

MIDI Out o

MIDI Thru

MIDI InByte di stato11110xxx2

Page 6: Messaggi System Common e System Real Time Lezione 9 Programmazione MIDI (Prof. Luca A. Ludovico)

MIDI Time Code (MTC)

• Versione MIDI di SMPTE Time Code (vedi lezione 8)

• Struttura del messaggio:– 1 byte di stato (1)1110001– 1 byte di dati, per rappresentare parte dell’indirizzo temporale e il time code usato

Programmazione MIDI (Prof. Luca A. Ludovico)9. Messaggi System Common e System Real Time

MIDI Out o

MIDI Thru

MIDI InI Byte di dati

Indirizzo[0..127]10

Byte di stato

MTC Quarter Frame111100012

Page 7: Messaggi System Common e System Real Time Lezione 9 Programmazione MIDI (Prof. Luca A. Ludovico)

Song Position Pointer

• Imposta la posizione di riproduzione di un brano, in risposta a comandi Start, Stop e Continue (vedi messaggi Real Time)

• Struttura del messaggio:– 1 byte di stato (1)1110010– 2 byte di dati, per rappresentare la posizione su 14 bit in termini di LSB e MSB

Programmazione MIDI (Prof. Luca A. Ludovico)9. Messaggi System Common e System Real Time

MIDI Outo

MIDI Thru

MIDI InII Byte di dati

Posizione MSB[1..127]10

I Byte di dati

Posizione LSB[0..127]10

Byte di stato

111100102

Page 8: Messaggi System Common e System Real Time Lezione 9 Programmazione MIDI (Prof. Luca A. Ludovico)

Song Position Pointer

• Come si rappresenta la posizione? Tramite al più 214 = 16.384 valori, che corrispondono a.. ?

• Timing Clock: viene inviato 24 volte per ogni pulsazione 24 tick per pulsazione

• Nella logica SPP uno step corrisponde a 6 tick, quindi si hanno 24/6 = 4 step per pulsazione– Facendo corrispondere convenzionalmente la pulsazione al valore ritmico di un quarto, ogni step SPP corrisponde a un

sedicesimo

Programmazione MIDI (Prof. Luca A. Ludovico)9. Messaggi System Common e System Real Time

Page 9: Messaggi System Common e System Real Time Lezione 9 Programmazione MIDI (Prof. Luca A. Ludovico)

Song Position Pointer

• L’indicazione di tempo non è rilevante per il MIDI, che ragiona a numero di pulsazioni e step– In MIDI ha senso parlare di «n-esimo step della m-esima pulsazione», non di «n-esima figura ritmica della m-esima battuta» (ad esempio

terzo ottavo di battuta 5)– Si può comunque passare dalla seconda definizione alla prima, a patto di conoscere l’indicazione di tempo (ad esempio il terzo ottavo di

battuta 5 nel tempo di 6/8)

Programmazione MIDI (Prof. Luca A. Ludovico)9. Messaggi System Common e System Real Time

Durata della battuta in 2/2, 4/4, ecc.

Durata della battuta in 3/4, 6/8, ecc.

Page 10: Messaggi System Common e System Real Time Lezione 9 Programmazione MIDI (Prof. Luca A. Ludovico)

Esempi

• Esempi– 2 byte di dati, ossia 14 bit corrispondono a un massimo di 16.384 valori da un sedicesimo in un brano, pari a 4.096

pulsazioni da un quarto– In un tempo di 4/4 sono 1024 battute, in 3/4 sono circa 1635 battute

• Osservazione– Le song MIDI vengono convenzionalmente fatte iniziare sul beat numerato 0.

Dunque, se il valore ricevuto per la Song Position è 8, il dispositivo punta al primo sedicesimo del terzo quarto.

Programmazione MIDI (Prof. Luca A. Ludovico)9. Messaggi System Common e System Real Time

Page 11: Messaggi System Common e System Real Time Lezione 9 Programmazione MIDI (Prof. Luca A. Ludovico)

Esercizio [5 min]

• Come fare in modo che un sequencer (o un altro dispositivo MIDI) punti a battuta 33, inizio della seconda pulsazione in un brano in 4/4?

• Risultato: SPP deve puntare allo step 516. Infatti:32 x 4 x 4 + (numero di step in 32 battute)

4 = (numero di step della prima pulsaz.) 516

(1)1110010 (0)0000100 (0)0000100

SPP LSB MSB

• Non si conta il primo sedicesimo della seconda pulsazione perché la numerazione parte da 0.

Programmazione MIDI (Prof. Luca A. Ludovico)9. Messaggi System Common e System Real Time

Page 12: Messaggi System Common e System Real Time Lezione 9 Programmazione MIDI (Prof. Luca A. Ludovico)

Song Select

• Carica nella memoria di un sequencer (e dei dispositivi collegati) il brano dal numero selezionato, a partire da un set di song MIDI.

• Struttura del messaggio:– 1 byte di stato (1)1110011– 1 byte di dati, per rappresentare il numero del brano. Quindi un set può comprendere fino a 128

song

Programmazione MIDI (Prof. Luca A. Ludovico)9. Messaggi System Common e System Real Time

MIDI Out o

MIDI Thru

MIDI InI Byte di dati

Numero del brano

[0..127]10

Byte di stato

Song Select111100112

Page 13: Messaggi System Common e System Real Time Lezione 9 Programmazione MIDI (Prof. Luca A. Ludovico)

Tune Request

• Il dispositivo ricevente avvia una procedura di auto-accordatura per calibrare i propri oscillatori– Tipico dei moduli sonori con circuiti elettrici analogici

• Struttura del messaggio:– 1 byte di stato (1)1110110

Programmazione MIDI (Prof. Luca A. Ludovico)9. Messaggi System Common e System Real Time

MIDI Out o

MIDI Thru

MIDI InByte di stato

Tune Request111101102

Page 14: Messaggi System Common e System Real Time Lezione 9 Programmazione MIDI (Prof. Luca A. Ludovico)

System Exclusive (SysEx) & End of Exclusive (EOX)

• Coppia di messaggi per iniziare/concludere un messaggio System Exclusive (si veda la prossima lezione)

• Struttura del messaggio SysEx:1 byte di stato (1)1110000, seguito da n byte di dati che rappresentano il vero e proprio messaggio System Exclusive

• Struttura del messaggio End of Exclusive:1 byte di stato (1)1110111

Programmazione MIDI (Prof. Luca A. Ludovico)9. Messaggi System Common e System Real Time

Page 15: Messaggi System Common e System Real Time Lezione 9 Programmazione MIDI (Prof. Luca A. Ludovico)

Riassunto

• Parte fissa | Flag System Common | Parte variabile

• (1)1110000SysEx• (1)1110001MIDI Time Code Quarter Frame• (1)1110010Song Position Pointer• (1)1110011Song Select• (1)1110100Reserved• (1)1110101Reserved• (1)1110110Tune Request• (1)1110111 End of Exclusive

Programmazione MIDI (Prof. Luca A. Ludovico)9. Messaggi System Common e System Real Time

Page 16: Messaggi System Common e System Real Time Lezione 9 Programmazione MIDI (Prof. Luca A. Ludovico)

MESSAGGI SYSTEM REAL TIMESezione 9.2

Programmazione MIDI (Prof. Luca A. Ludovico) 9. Messaggi System Common e System Real Time

Page 17: Messaggi System Common e System Real Time Lezione 9 Programmazione MIDI (Prof. Luca A. Ludovico)

Messaggi Real Time

• Controllano in tempo reale tutti i dispositivi del sistema, e sono indipendenti dal canale. Si usano per sincronizzare i dispositivi basati sul clock (es. sequencer e batterie elettroniche)

• Vengono inviati con stringenti requisiti temporali– Messaggi snelli, costituiti da un unico byte (byte di stato)– Possono interpolarsi ai byte di altri messaggi (vedi prossima slide)

• Complessivamente 6 messaggi, il cui Byte di stato ha struttura (1)111 1 xxx (manca informazione sul canale)

Programmazione MIDI (Prof. Luca A. Ludovico)9. Messaggi System Common e System Real Time

Page 18: Messaggi System Common e System Real Time Lezione 9 Programmazione MIDI (Prof. Luca A. Ludovico)

• Esempio: interpolazione messaggi generici (ad es. Note On e Note On, o Note Off e Control Change)– Il mittente lo sa, ma il destinatario non li può ricostruire

• Esempio: interpolazione di un messaggio generico con un Real Time– Il mittente lo sa, il destinatario lo riconosce ed estrapola

Interpolazione di messaggi

Programmazione MIDI (Prof. Luca A. Ludovico)9. Messaggi System Common e System Real Time

? ???

Page 19: Messaggi System Common e System Real Time Lezione 9 Programmazione MIDI (Prof. Luca A. Ludovico)

(MIDI) Timing Clock

• Segnale di sincronizzazione basato sul tempo (BPM)

• Invio di 24 tick per pulsazione (vedi lezione 8), che si comportano come impulsi

• Sincronizzazione tramite il solo byte di stato, posto a (1)1111000

Programmazione MIDI (Prof. Luca A. Ludovico)9. Messaggi System Common e System Real Time

Byte di stato

Timing Clock111110002

MIDI Out o

MIDI Thru

MIDI In

Page 20: Messaggi System Common e System Real Time Lezione 9 Programmazione MIDI (Prof. Luca A. Ludovico)

Start, Stop e Continue

• Controllano una sequenza MIDI in uno o più slave.– Start: portarsi a Song Position 0 (inizio della sequenza)– Stop: fermare la riproduzione mettendola in pausa– Continue: riprendere la riproduzione dal punto di interruzione– Un eventuale messaggio SPP permetterà di riposizionare il punto di riproduzione

Programmazione MIDI (Prof. Luca A. Ludovico)9. Messaggi System Common e System Real Time

Byte di stato

Start: 111110102

Continue: 111110112

Stop: 111111002

MIDI Out o

MIDI Thru

MIDI In

Page 21: Messaggi System Common e System Real Time Lezione 9 Programmazione MIDI (Prof. Luca A. Ludovico)

Esercizio [10 min]

• Si voglia caricare da un set la song numerata 12, mandarla in esecuzione dall’inizio, metterla in pausa, riavviarne la riproduzione dal punto corrente, portarsi all’inizio del terzo quarto di battuta 1 ed eseguirla da quel punto.Si mostri la sequenza di messaggi MIDI richiesti.

1. Song select (1)1110011 (0)00011002. Start (1)11110103. Stop (1)11111004. Continue (1)11110115. Stop (1)11111006. Song Position Pointer (1)1110010 (0)0001000 (0)00000007. Continue (1)1111011

Programmazione MIDI (Prof. Luca A. Ludovico)9. Messaggi System Common e System Real Time

Page 22: Messaggi System Common e System Real Time Lezione 9 Programmazione MIDI (Prof. Luca A. Ludovico)

Active Sensing

• Abilita la funzionalità di Active Sensing sui dispositivi riceventi, che da quel momento si attendono almeno un messaggio MIDI ogni 300 ms– Se alla porta MIDI ricevente non viene spedito alcun evento per 270 ms, il mittente sa di dover mandare un nuovo

messaggio Active Sensing– Se il destinatario non riceve nulla, considera chiusa tale porta di connessione e invia un comando All Notes Off al

modulo sonoro

• Si tratta di una caratteristica opzionale dei dispositivi, non sempre implementata

Programmazione MIDI (Prof. Luca A. Ludovico)9. Messaggi System Common e System Real Time

Byte di stato

Active Sensing111111102

MIDI Out o

MIDI Thru

MIDI In

Page 23: Messaggi System Common e System Real Time Lezione 9 Programmazione MIDI (Prof. Luca A. Ludovico)

System Reset

• Riporta tutti i parametri di un dispositivo MIDI ai valori preimpostati (valori di fabbrica, o valori all’istante di accensione)

• Viene ricevuto da tutti i dispositivi, su tutti i canali

Programmazione MIDI (Prof. Luca A. Ludovico)9. Messaggi System Common e System Real Time

Byte di stato

System Reset111111112

MIDI Out o

MIDI Thru

MIDI In

Page 24: Messaggi System Common e System Real Time Lezione 9 Programmazione MIDI (Prof. Luca A. Ludovico)

Riassunto

• Parte fissa | Flag System Common | Parte variabile

• (1)1111000Timing Clock• (1)1111001Reserved• (1)1111010Start• (1)1111011Continue• (1)1111100Stop• (1)1111101Reserved• (1)1111110Active Sensing• (1)1111111 System Reset

Programmazione MIDI (Prof. Luca A. Ludovico)9. Messaggi System Common e System Real Time

Page 25: Messaggi System Common e System Real Time Lezione 9 Programmazione MIDI (Prof. Luca A. Ludovico)

CONCLUSIONI

Programmazione MIDI (Prof. Luca A. Ludovico) 9. Messaggi System Common e System Real Time

Page 26: Messaggi System Common e System Real Time Lezione 9 Programmazione MIDI (Prof. Luca A. Ludovico)

Considerazione generale sui messaggi MIDI

• Come riconoscere l’ID di un messaggio MIDI? Il riferimento iniziale è dato in generale dal II, III e IV bit più significativo dello Status byte.

• A seconda di tali valori (e di conseguenza della famiglia di messaggi), l’ID dello specifico messaggio è codificato:– esclusivamente in tali bit per tutti i messaggi Channel Voice, ad eccezione dei Control Change– nel I Byte di dati per tutti i messaggi Control Change (parte dei Channel Voice e tutti i Channel Mode)

Status byte: 1011cccc ove cccc identifica il canale

– tramite il V, VI, VII e VIII bit dello Status Byte per i messaggi System Common, Real Time e System ExclusiveStatus byte: 1111xxxx ove xxxx identifica il messaggio

Programmazione MIDI (Prof. Luca A. Ludovico)9. Messaggi System Common e System Real Time

Page 27: Messaggi System Common e System Real Time Lezione 9 Programmazione MIDI (Prof. Luca A. Ludovico)

I 3 bit identificativi del messaggio

• (1) 000 cccc Note Off • (1) 001 cccc Note On• (1) 010 cccc Polyphonic Key Pressure (Aftertouch)• (1) 011 cccc Control Change• (1) 100 cccc Program Change• (1) 101 cccc Channel Pressure (After-touch)• (1) 110 cccc Pitch Wheel Change• (1) 111 xxxx System Common messages

System Real Time messagesSystem Exclusive messages

Programmazione MIDI (Prof. Luca A. Ludovico)9. Messaggi System Common e System Real Time