Lezione 10
Messaggi System Exclusive
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)
10. Messaggi System Exclusive
Messaggi System Exclusive
• Tutti i messaggi finora analizzati si rivolgono a un
qualsiasi dispositivo MIDI compatibile
• I messaggi System Exclusive si utilizzano per inviare dati
specifici a determinati dispositivi MIDI, per funzioni
generalmente subordinate al produttore
• I messaggi sono detti System Exclusive perché tutti gli
altri dispositivi risultano esclusi dalla comunicazione
–
Il dispositivo ricevente può processare il messaggio, se lo
riconosce come indirizzato a se stesso; in caso contrario lo
ignora
Programmazione MIDI (Prof. Luca A. Ludovico)
10. Messaggi System Exclusive
Invio di un SysEx a un dispositivo specifico
MIDI In
MIDI Out
SysEx per
Roland SD-50
MIDI Out
SysEx per
Roland SD-50
MIDI In
Roland V
MIDI Thru
Programmazione MIDI (Prof. Luca A. Ludovico)
10. Messaggi System Exclusive
SysEx per
Roland SD-50
SysEx per
Roland SD-50
MIDI In
Yamaha MU-80
MIDI Thru
SysEx per
Roland SD-50
SysEx per
Roland SD-50 Roland
MIDI In
SD-50
Struttura generale dei messaggi
• Tutti i messaggi SysEx iniziano e terminano in modo standard,
tramite una coppia di messaggi SysEx – End of SysEx
–
–
Gli identificativi sono messaggi System Common
Non c’è informazione di canale (identificativo del comando occupa i 7 bit, come
per tutti i messaggi System Common)
• Tra l’invio di questa coppia di byte di stato può essere spedito un
qualsiasi numero di byte di dati (a 7 bit), da qualche unità a
migliaia.
–
Attenzione: la sequenza (lunga?) non può essere interrotta
…
MIDI Out
o
MIDI Thru
…
Byte di stato
Byte di stato
Fine SysEx
111101112
F716
Inizio SysEx
111100002
F016
Programmazione MIDI (Prof. Luca A. Ludovico)
10. Messaggi System Exclusive
MIDI In
Messaggi System Exclusive
• Alcuni parametri dei dispositivi MIDI non possono
essere impostati e non sono identificabili tramite
messaggi dello standard MIDI
–
–
perché sono specifici di un dispositivo o di una certa
implementazione del dispositivo da parte di un determinato
produttore
perché lo standard MIDI originario non aveva previsto di
impostarli e/o identificarli tramite messaggi convenzionali
• In questi casi, la soluzione è adottare messaggi MIDI
System Exclusive. Per rispondere alle due esigenze
sopra esposte, esistono due categorie di SysEx.
Piè di pagina: spazio libero per eventuale
nome struttura o altro
Categorie di SysEx
1. SysEx del produttore
2. SysEx universali
1. In tempo reale
2. Non in tempo reale
• In entrambi i casi, i SysEx si usano per veicolare
informazioni non incluse in altri messaggi MIDI.
La prima categoria si rivolge a uno specifico
dispositivo, mentre la seconda (potenzialmente) a
tutti i dispositivi nel sistema.
Piè di pagina: spazio libero per eventuale
nome struttura o altro
Struttura dei messaggi SysEx del produttore
• I messaggi SysEx contengono 8 parti (nel caso di Roland 9 parti),
ciascuna con un ruolo specifico
• Nel diagramma sotto riportato, il riquadro con angoli arrotondati
non identifica (come di consueto) un singolo byte di dati, ma un
insieme di byte di dati la cui numerosità è scritta all’interno
Parti
MIDI Out
o
MIDI Thru
9
(8)
1 byte
1
byte
Byte di stato
Valore di
somma di
controllo
Roland
Fine SysEx
111101112
7
6
5
4
3
?
3
byte
1
byte
1
byte
1
byte
Valore dei
dati
Indirizzo
iniziale
Comando
Invio
Ricezione
ID
modello
ID
dispositivo
Programmazione MIDI (Prof. Luca A. Ludovico)
10. Messaggi System Exclusive
2
1o3
byte
1
1 byte
ID
Byte di stato
produttore
Inizio SysEx
111100002
MIDI In
Esempio
• La parte 2 distingue un prodotto Korg da un prodotto Yamaha
• La parte 3 distingue il primo dispositivo Yamaha dal secondo
dispositivo Yamaha nella catena (i valori di ID dispositivo possono
essere impostati in fase di setup del sistema)
• La parte 4 distingue il Roland JV-1080 dal Roland D-50
• La parte 8 esiste solo per i dispositivi Roland
Parti
MIDI Out
o
MIDI Thru
9
(8)
1 byte
1
byte
Byte di stato
Valore di
somma di
controllo
Roland
Fine SysEx
111101112
7
6
5
4
3
?
3
byte
1
byte
1
byte
1
byte
Valore dei
dati
Indirizzo
iniziale
Comando
Invio
Ricezione
ID
modello
(Model ID)
ID
dispositivo
nella catena
(Device ID)
Programmazione MIDI (Prof. Luca A. Ludovico)
10. Messaggi System Exclusive
2
1o3
byte
1
1 byte
ID
Byte di stato
produttore
Inizio SysEx
111100002
MIDI In
Identificazione del produttore
• Qualsiasi azienda lo desideri può ottenere un ID
univoco per messaggi SysEx, assegnato dal MIDI
Manufacturer’s Association (MMA)
• L’elenco completo è disponibile alla pagina
http://www.midi.org/techspecs/manid.php
• Esempio: i byte della parte 2 in esadecimale valgono
– 4116 per Roland (1 byte)
– 4216 per Korg (1 byte)
– 0016 0016 7A16 per Nvidia (3 byte)
Piè di pagina: spazio libero per eventuale
nome struttura o altro
Identificazione dell’id del dispositivo e del modello
• Dedicando 1 byte di dati a ciascuna delle
informazioni, teoricamente si possono indirizzare solo
128 dispositivi nella catena, e 128 modelli per
produttore.
• Esistono però dei valori standard:
– Ad esempio, Roland di default assegna a tutti i dispositivi
Device ID = 1016
– Ad esempio, Roland di default assegna ai propri synth con
standard GS un Model ID = 4216
Piè di pagina: spazio libero per eventuale
nome struttura o altro
Patch change in un synth GS di Roland
• Messaggio (in esadecimale, raggruppato in parti)
F016 4116 1016 4216 1216 40 11 0016 08 0116 2616 F716
Parte 1: F0
Parte 2: 41
Parte 3: 10
Parte 4: 42
Parte 5: 12
Parte 6: 40 11 00
Parte 7: 08 01
Parte 8: 26
Parte 9: F7
MIDI Out
o
MIDI Thru
Status byte di inizio SysEx
ID del produttore Roland
ID del dispositivo nella catena
ID del modello: generico synth GS
ID del comando Send o Dump; 12 per l’invio, 11 per la richiesta
Indirizzamento del parametro
Dati da inviare: patch change
Somma di controllo Roland. Algoritmo:
Sommare tutti i valori delle parti 6 e 7, convertite in base 10,
Effettuare la divisione intera per 128 e sottrarre il resto ottenuto da 128
Nell’esempio: 64 + 17 + 0 + 8 + 1 = 90; 90 / 128 = 0 con resto 90; 128 – 90 = 3810 = 2616
Status byte di fine SysEx
1 byte
1
byte
Byte di stato
Valore di
somma di
controllo
Roland
Fine SysEx
111101112
?
3
byte
1
byte
1
byte
1
byte
Valore dei
dati
Indirizzo
iniziale
Comando
Invio
Ricezione
ID
modello
ID
dispositivo
Programmazione MIDI (Prof. Luca A. Ludovico)
10. Messaggi System Exclusive
1o3
byte
1 byte
ID
Byte di stato
produttore
Inizio SysEx
111100002
MIDI In
Tipo di riverbero in un Roland JV-1080
• Messaggio (in esadecimale, raggruppato in parti)
F016 4116 1016 6A16 1216 01 00 00 2816 0616 5116 F716
Parte 1: F0
Parte 2: 41
Parte 3: 10
Parte 4: 6A
Parte 5: 12
Parte 6: 01 00 00
Parte 7: 28 06
Parte 8: 51
Parte 9: F7
MIDI Out
o
MIDI Thru
Status byte di inizio SysEx
ID del produttore Roland
ID del dispositivo nella catena
ID del modello JV-1080
ID del comando Send o Dump; 12 per l’invio, 11 per la richiesta
Indirizzamento del parametro di riverbero
Rispettivamente tipo di riverbero (28 -> delay) e valore da impostare
Somma di controllo Roland. Algoritmo:
Sommare tutti i valori delle parti 6 e 7, convertite in base 10,
Effettuare la divisione intera per 128 e sottrarre il resto ottenuto da 128
Nell’esempio: 1 + 0 + 0 + 40 + 6 = 47; 47 / 128 = 0 con resto 47; 128 – 47 = 8110 = 5116
Status byte di fine SysEx
1 byte
1
byte
Byte di stato
Valore di
somma di
controllo
Roland
Fine SysEx
111101112
?
3
byte
1
byte
1
byte
1
byte
Valore dei
dati
Indirizzo
iniziale
Comando
Invio
Ricezione
ID
modello
ID
dispositivo
Programmazione MIDI (Prof. Luca A. Ludovico)
10. Messaggi System Exclusive
1o3
byte
1 byte
ID
Byte di stato
produttore
Inizio SysEx
111100002
MIDI In
SysEx universali
• Comuni a tutti i produttori, quindi non riservati ad
alcun produttore specifico e utilizzabili da qualsiasi
dispositivo MIDI adeguato
• Sono comunque SysEx in quanto delimitati all’inizio e
alla fine da byte F0 (Start SysEx) e F7 (End SysEx)
• Utilizzati per estensioni allo standard MIDI
• L’elenco completo è disponibile all’indirizzo:
http://www.midi.org/techspecs/midimessages.php#4
Piè di pagina: spazio libero per eventuale
nome struttura o altro
Esempi d’uso di SysEx universali
• Abilitare/disabilitare la modalità GM (General MIDI)
nei moduli sonori compatibili
• Impostare il volume master dei dispositivi
multitimbrici
– Per il volume dei singoli canali, esiste il messaggio Control Change 7
• Comunicare lo schema di connessione con altri
dispositivi
• Scambiare dati relativi a forme d’onda di audio
digitale tra campionatori
Piè di pagina: spazio libero per eventuale
nome struttura o altro
Struttura dei messaggi SysEx universali
• Non è più necessario nella parte 2 identificare il produttore; il
primo byte di dati si imposta a 7E per i messaggi non real-time e a
7F per i messaggi real-time
• Sub-ID 1 definisce la categoria della funzione SysEx, mentre Sub-ID
2 aggiunge precisione a tale funzione; il valore da impostare si trova
nella parte successiva (parte 6)
Parti
7
MIDI Out
o
MIDI Thru
6
1 byte
?
Byte di stato
Valore dei
dati
Fine SysEx
111101112
Programmazione MIDI (Prof. Luca A. Ludovico)
10. Messaggi System Exclusive
5
4
3
2
1
1
byte
1 byte
1
byte
1
byte
1
byte
Sub-ID 2
Sub-ID 1
ID
dispositivo
o ID canale
Non
Byte di stato
real-time
o
Inizio SysEx
real-time 111100002
MIDI In
Valori per Sub-ID 1 (in esadecimale)
• Non in real-time
–
–
–
–
–
–
–
–
–
–
–
–
–
–
01  Sample dump header
02  Sample data packet
03  Sample dump request
04  MTC for cueing purpose
05  Sample dump extensions
06  General information
07  File dump
08  MIDI tuning standard
09  General MIDI
7B  End of File
7C  Wait
7D  Cancel
7E  NAK (ricezione errata)
7F  ACK (ricezione corretta)
Programmazione MIDI (Prof. Luca A. Ludovico)
10. Messaggi System Exclusive
• In real-time
–
–
–
–
–
–
–
–
01  MTC full message
02  MIDI Show Control
03  Notation Information
04  Device control
05  Real-time MTC cueing
06  MMC (MIDI Machine
Control) commands
07  MMC responses
08  MIDI tuning standard
Esempio: modalità General Midi On su dispositivi XG
• Messaggio (in esadecimale, raggruppato in parti)
F016 7E16 7F16 0916 0116 F716
Parte 1: F0
Parte 2: 7E
Parte 3: 7F
Parte 4: 09
Parte 5: 01
Parte 6: --Parte 7: F7
Status byte di inizio SysEx
SysEx non Real-Time universale
Risposta del dispositivo su tutti i canali, ossia nessun filtraggio
General MIDI
Abilitato (in alternativa: 00  Disabilitato)
Si noti l’assenza di una Parte 6
Status byte di fine SysEx
Parti
7
MIDI Out
o
MIDI Thru
6
1 byte
?
Byte di stato
Valore dei
dati
Fine SysEx
111101112
Programmazione MIDI (Prof. Luca A. Ludovico)
10. Messaggi System Exclusive
5
4
3
2
1
1
byte
1 byte
1
byte
1
byte
1
byte
Sub-ID 2
Sub-ID 1
ID
dispositivo
o ID canale
Non
Byte di stato
real-time
o
Inizio SysEx
real-time 111100002
MIDI In
Registrazione messaggi SysEx
• Dove? Tipicamente in un sequencer
• Perchè? Due finalità:
1. Salvare tutti i dati del setup corrente per
ripristinare in un secondo momento lo stato del/i
dispositivo/i (bulk dump)
2. Memorizzare codici per istruire lo strumento a
cambiare uno dei propri parametri durante
l’esecuzione
•
Esempio: frequenza di taglio di un filtro, decay di un
riverbero, ecc.
Programmazione MIDI (Prof. Luca A. Ludovico)
10. Messaggi System Exclusive
Esempio di bulk tuning dump (richiesta)
• Richiesta da parte di un dispositivo sorgente a un dispositivo
destinatario di inviare le informazioni sul tuning (accordatura
fine)
• Bulk tuning dump request:
F016 7E16 <device ID> 0816 0016 tt F716
Parte 1: F0
Parte 2: 7E
Parte 3: <device ID>
Parte 4: 08
Parte 5: 00
Parte 6: tt
Parte 7: F7
Status byte di inizio SysEx
SysEx non Real-Time universale
ID del dispositivo destinatario
Sub-ID#1  MIDI Tuning
Sub-ID#2  bulk dump request
Numero del programma di tuning [0..127]
Status byte di fine SysEx
• Il dispositivo destinatario risponde come mostrato nella slide
successiva
Programmazione MIDI (Prof. Luca A. Ludovico)
10. Messaggi System Exclusive
Esempio di bulk tuning dump (risposta)
• Il messaggio di risposta include valori di frequenza espressi su 3 byte
inviati ordinatamente per ciascuno dei 128 pitch MIDI
• Bulk tuning dump reply:
F016 7E16 <device ID> 0816 0116 tt tn [xx yy zz] chksum F716
Parte 1: F0
Status byte di inizio SysEx
Parte 2: 7E
Parte 3: <device ID>
Parte 4: 08
Parte 5: 01
Parte 6: tt
tn
[xx yy zz]
chksum
Parte 7: F7
SysEx non Real-Time universale
ID del dispositivo destinatario
Sub-ID#1  MIDI Tuning
Sub-ID#2  bulk dump reply
Numero del programma di tuning [0..127]
16 caratteri ASCII per definire il nome dell’accordatura
dati sulla frequenza di ogni singola nota (ripetuti 128 volte)
somma di controllo
Status byte di fine SysEx
Programmazione MIDI (Prof. Luca A. Ludovico)
10. Messaggi System Exclusive
Esempio: comandi MMC
• MIDI Machine Control: protocollo per mettere in comunicazione
dispositivi di registrazione basati su SMPTE con sequencer MIDI (vedi
lezione 8)
• Formato standard:
F016 7F16 <device ID> 0616 command F716
Parte 1: F0
Status byte di inizio SysEx
Parte 2: 7F
Parte 3: <device ID>
Parte 4: 06
Parte 5: Parte 6: command
Parte 7: F7
SysEx Real-Time universale
ID del dispositivo destinatario
General Information
Vedi slide successiva
Status byte di fine SysEx
Programmazione MIDI (Prof. Luca A. Ludovico)
10. Messaggi System Exclusive
Esempio: comandi MMC
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
01 Stop
02 Play
03 Deferred Play
04 Fast Forward
05 Rewind
06 Record Strobe (Punch In)
07 Record Exit (Punch out)
08 Record Ready (Record Pause)
09 Pause
0A Eject
0B Chase
0D MMC Reset
40 Write
44 Locate/Go to
47 Shuttle
Programmazione MIDI (Prof. Luca A. Ludovico)
10. Messaggi System Exclusive
Esempio di Goto in MMC
• Il messaggio serve a posizionare la riproduzione/registrazione in un
punto specifico, codificato in SMPTE
• F016 7F16 <deviceID> 0616 4416 0616 0116 hr mn sc fr ff F716
Parte 1: F0
Status byte di inizio SysEx
Parte 2: 7F
Parte 3: <device ID>
Parte 4: 06
Parte 5: Parte 6: 44
06
01
hr
mn
sc
fr
ff
Parte 7: F7
SysEx Real-Time universale
ID del dispositivo destinatario
Sub-ID#1  General Information
Comando LOCATE
Numero di byte seguenti
Sottocomando TARGET
ore, da 0 a 23 (in base 10)
minuti, da 0 a 59 (in base 10)
secondi, da 0 a 59 (in base 10)
fotogrammi, da 0 a 29 (in base 10)
sottoframe o frazioni di fotogramma, da 0 a 99 (in base 10)
Status byte di fine SysEx
Programmazione MIDI (Prof. Luca A. Ludovico)
10. Messaggi System Exclusive
Approfondimenti
• Libreria di messaggi SysEx del produttore compilata da utenti
http://www.sysexdb.com
• Uso di SysEx universali per il micro-tuning (accordatura degli
strumenti per scale differenti da quelle del sistema temperato)
http://www.midi.org/techspecs/midituning.php
• Tutorial sui SysEx
http://www.2writers.com/eddie/TutSysEx.htm
• SysEx relativi al MIDI Machine Control
http://en.wikipedia.org/wiki/MIDI_Machine_Control
Programmazione MIDI (Prof. Luca A. Ludovico)
10. Messaggi System Exclusive
Scarica

Presentazione del corso