Sei sulla pagina 1di 32

Elementi di Programmazione MIDI – Francesca Ortolani

ELEMENTI DI PROGRAMMAZIONE MIDI


(Appunti per le lezioni di HD Recording – estratto da
“Sintesi del Suono – Appunti e approfondimenti per i corsi di Music Technology”)

Francesca Ortolani

5.1 Introduzione al protocollo MIDI


Al Capitolo 2 abbiamo già introdotto dal punto di vista storico il protocollo MIDI (Musical
Instrument Digital Interface). Riassumiamo brevemente quanto detto. Nel 1981 la Sequential Circuits
(Smith/Wood) propone una versione del MIDI, un protocollo di comunicazione tra strumenti
musicali, le cui specifiche vengono pubblicate l’anno successivo, 1982, come Specification 1.0.

Il MIDI viene presentato ufficialmente al pubblico nel 1983 e il primo synth dotato di porte MIDI
fu proprio uno strumento della Sequential Circuits, il Prophet 600. Nei mesi a venire i vari produttori
scelsero o meno di adattare i propri strumenti secondo le specifiche hardware e software pubblicate
nel 1984 a seguito di un accordo tra produttori. Queste specifiche, che garantivano la compatibilità
fra le macchine, da allora non subirono sostanziali modifiche e il protocollo MIDI che conosciamo
oggi è praticamente lo stesso dai lontani primi anni ’80.

Grazie all’esistenza di uno standard, l’utente che compra una macchina che ne rispetti le
specifiche è sicuro che tale dispositivo possa essere integrato in un sistema MIDI compatibile.

L’interfaccia MIDI consente la trasmissione seriale di bit alla velocità di 31250 bit/sec. Essendo la
trasmissione asincrona, i messaggi MIDI saranno racchiusi fra 2 bit (start/end) che determineranno
l’inizio e la fine della sequenza trasmessa.

START BIT =0
STOP BIT =1

Avendo tale velocità di trasmissione, per inviare un byte (= 8 bit) + bit start + bit end occorreranno
320 μsec (10/31250).

Se si fosse scelta invece una trasmissione di tipo sincrono, ogni dispositivo slave, ovvero che viene
pilotato da un master, avrebbe dovuto rispondere al master, che aveva inviato il messaggio, con un
feedback di avvenuta ricezione. Essendo il sistema MIDI componibile da tanti dispositivi, tutti questi
avrebbero inviato messaggi di feedback continuamente, occupando moltissima banda disponibile.

I messaggi MIDI vengono trasmessi in gruppi di 8 bit (quindi ciascun gruppo assume valori possibili
tra 0 e 255, perché 28 = 256 . Si ha che 256 possibilità non bastano a coprire la complessità del
sistema MIDI, quindi a seconda della precisa disposizione dei bit in un messaggio, la macchina saprà
interpretare diversi tipi di messaggi.

1
Elementi di Programmazione MIDI – Francesca Ortolani

5.2 Interfaccia MIDI


L’interfaccia MIDI è composta da 3 porte (IN, OUT, THRU), attualmente realizzate con connettori
femmina DIN o mini DIN a 5 poli.

IN: riceve i dati in ingresso


OUT: trasmette i dati in uscita
THRU: trasmette in uscita una copia
dei dati ricevuti in ingresso

Al pin 5 del connettore avviene la


connessione per il trasferimento dei dati MIDI
in un’unica direzione. Essendo quindi il
collegamento simplex avrò bisogno di una
porta IN e una porta OUT.
Figura 5.1 Connettore DIN 5 poli. Utilizzato nelle porte MIDI.

Figura 5.2 Porta MIDI IN e porta MIDI THRU

Figura 5.3 Porta MIDI OUT

2
Elementi di Programmazione MIDI – Francesca Ortolani

Figura 5.3: i dati provenienti da un bus UART vengono inviati al pin 5 dalla porta MIDI OUT. Collego quindi con
un cavo (consigliato: non più di 15 mt per evitare riflessioni sulla linea) l’uscita MIDI (OUT) di un dispositivo
all’ingresso MIDI (IN) di un altro. In questo modo un impulso di corrente scorre nel LED (D2) dell’optoisolatore e
lo accende eccitando il fototransistor (Q1) che trasferisce in uscita la tensione applicata in ingresso alla porta
(che ritroviamo ai capi del diodo D1). Il segnale è inviato quindi al bus UART del dispositivo ricevente o alla sua
porta MIDI THRU.

Oggi le connessioni MIDI possono avvenire anche attraverso le moderne porte USB di tipo B
(tipicamente).

Figura 5.4 Estremità di un cavo USB tipo A/tipo B

Master e Slave
In un sistema MIDI alcuni strumenti si comportano come master e altri come slave:

MASTER: strumenti che pilotano altri strumenti


SLAVE: strumenti che vengono pilotati da altri strumenti

cioè i master mandano comandi che gli slave eseguono.

Nota: La trasmissione tra master e slave è efficace se questi si interfacciano sugli stessi canali.
Esempio: Seleziono CH1 su MASTER e CH1 su SLAVE → Il master comanda lo slave
CH1 su MASTER e CH2 su SLAVE → Il master non riesce a comandare lo slave

Utilizzo di strumenti master e slave, esempi

Esempio 1

Figura 5.5 A è master sia di B che di C

3
Elementi di Programmazione MIDI – Francesca Ortolani

Esempio 2

Figura 5.6 A è master di B; B è master di C; A non è master di C.

Gli strumenti master sono tutti quei dispositivi dotati di controller, come synth con tastiera
“muta” (master keyboard) oppure controller rotativi, slider…
Gli strumenti slave sono ad esempio gli expander, i quali sono privi di controller o qualsiasi
strumento dotato di una porta di ingresso MIDI che possa essere pilotato in remoto.

Soft Thru
Il computer può comportarsi sia come master che come slave e cambiare il proprio
comportamento rapidamente. Per evitare che l’utente debba ricablare continuamente le proprie
macchine a seconda del comportamento desiderato, è stata introdotta la porta SOFT THRU.

Il seguente esempio spiega il funzionamento di un sistema


MIDI in cui sia presente una porta Soft Thru:
Il Soft Thru funziona come THRU quando sto suonando la
tastiera e voglio sentire quello che sto suonando tramite
expander, invece funziona come OUT quando il computer
riproduce ciò che è stato registrato e necessita
dell’expander, il quale è dotato di uscite audio, per avere
un suono in uscita. Attenzione a non confondersi: in
questo caso si parla di registrazione nel senso MIDI,
ovvero memorizzo una sequenza di comandi (es.”suona la
nota...sul canale…”).

Figura 5.7 Esempio di utilizzo della porta SOFT


THRU

4
Elementi di Programmazione MIDI – Francesca Ortolani

5.3 Strumenti accessori in una rete MIDI


MIDI Merge Box

La Merge Box serve per collegare più master ad un singolo slave. Il lavoro di questa scatola è
smistare i messaggi provenienti dai master in modo opportuno.

Figura 5.8 Utilizzo della Merge Box in un sistema MIDI

MIDI Thru Box

La MIDI Thru Box indirizza i messaggi di un master verso diversi slave con un collegamento a
stella. Questa scatola è utile per evitare errori di trasmissione quando nel proprio sistema MIDI sono
presenti molti slave. La Thru Box permette anche di velocizzare la trasmissione.

Figura 5.9 Utilizzo della Thru Box in un sistema MIDI

5
Elementi di Programmazione MIDI – Francesca Ortolani

Interfacce MIDI multiporta

Le interfacce multiporta si possono utilizzare per connettere il computer al sistema MIDI. Ogni
porta viene gestita dal software separatamente. In questo modo ho una moltiplicazione dei canali a
disposizione: 16 X n porte.

Un utilizzo tipico di questi dispositivi è in un sistema in cui siano presenti strumenti multitimbrici che
occupano un gran numero di canali.

5.4 Messaggi MIDI


Entriamo nel vivo della programmazione MIDI. Su questo libro si daranno alcuni cenni che,
tuttavia, saranno sufficienti per iniziare a lavorare con il protocollo MIDI.

All’interno di un messaggio MIDI esistono 2 tipi di byte MIDI: STATUS BYTE e DATA BYTE.

Entrambi status byte e data byte sono composti da 8 bit (inviati tra altri 2 bit di start ed end), ma
hanno funzioni diverse.

Abbiamo già detto che con 8 bit possiamo codificare 256 valori diversi. I primi 128 (da 0 a 127)
saranno per i DATA BYTE e i secondi 128 (da 128 a 255) per gli STATUS BYTE. Quindi gli STATUS BYTE
inizieranno con 1 e i DATA BYTE con 0 (al paragrafo 5.7 si spiegherà come funziona il sistema binario).

1xxx xxx STATUS BYTE


0xxx xxx DATA BYTE

(Si dice anche che il MIDI è un sistema a 7 bit reali, in quanto il primo di 8 è già determinato. )

Status byte e Data byte


I due tipi di byte MIDI si distinguono per la loro diversa funzione all’interno del messaggio:

STATUS BYTE: specificano il tipo di messaggio (informazione qualitativa)


DATA BYTE: specificano il valore associato a quel tipo di messaggio (informazione quantitativa)

Un messaggio MIDI è così strutturato:

STATUS DATA 1 DATA 2

Il secondo Data Byte può non essere sempre presente. Solitamente si hanno 2 Data Byte in un
messaggio.

Es. Messaggio di “Note on”:


STATUS: comando Note On
DATA 1: numero della nota
DATA 2: valore velocity

6
Elementi di Programmazione MIDI – Francesca Ortolani

5.4.1 Formato dello Status Byte

In generale lo STATUS BYTE è formato in questo modo:

1xxx nnnn

I primi 4 bit (1xxx) si riferiscono all’istruzione principale. Il secondo gruppo di 4 bit (nnnn)
rappresenta il numero di canale su cui indirizzare l’istruzione contenuta nel primo gruppo (se si tratta
di un messaggio di canale) oppure l’istruzione di un messaggio di sistema.

Nel MIDI ho a disposizione 16 canali, codificati nel gruppo nnnn con i valori da 0 a 15 (0000 -
1111). Per quanto riguarda il primo gruppo di bit, essendo il primo bit sempre 1, saranno gli altri tre,
xxx, a determinare il tipo di messaggio. Ho quindi 23 = 8 possibili combinazioni per il messaggio.

5.4.2 Categorie di messaggi MIDI: messaggi di CANALE e di SISTEMA

I messaggi possono essere di CANALE o di SISTEMA.

Quelli di CANALE sono inviati ai singoli canali e riguardano l’esecuzione musicale. Essi sono individuati
dalle prime 7 combinazioni dei bit xxx del primo gruppo di 4 bit come visto al paragrafo precedente.

Quelli di SISTEMA sono rivolti al sistema MIDI e sono individuati dall’ultima combinazione ovvero
1111.

Esempio: 1000 1010 = Note On sul canale 11

Attenzione a non sbagliarsi: 1010 in binario si traduce in 10 nel sistema decimale. All’utente però i
canali risultano cominciare dal numero 1 (non da 0), perciò si ha 10+1 = 11.

BIN HEX MESSAGGIO


1000 nnnn 8nH NOTE OFF
1001 nnnn 9Nh NOTE ON
1010 nnnn AnH AFTERTOUCH POLIFONICO
1011 nnnn BnH CONTROL CHANGE
1100 nnnn CnH PROGRAM CHANGE
1101 nnnn DnH AFTERTOUCH DI CANALE
1110 nnnn EnH PITCH BEND
1111 nnnn FnH MESSAGGI DI SISTEMA
Tabella 5.1 Possibili combinazioni 1xxx nnnn

7
Elementi di Programmazione MIDI – Francesca Ortolani

STATUS DATA 1 DATA 2


8NH (NOTE OFF) NUMERO NOTA VELOCITY
9Nh (NOTE ON) NUMERO NOTA VELOCITY
AnH (AFTERTOUCH POL.) NUMERO NOTA PRESSURE
BnH (CONTROL CHANGE) NUMERO CONTROLLO VALORE CONTROLLO
CnH (PROGRAM CHANGE) NUMERO PROGRAMMA -
DnH (AFTERTOUCH CH.) PRESSURE -
EnH (PITCH BEND) POSITION MSB POSITION LSB
FnH (SYSTEM) Vedi dopo
Tabella 5.2 Significato dello Status Byte e dei Data Byte 1 e 2 nelle 8 combinazioni

I messaggi di canale e i messaggi di sistema si suddividono in sottocategorie:

SYSTEM
CHANNEL VOICE COMMON MSG
MSG (messaggi di
CHANNEL VOCE)
MESSAGES SYSTEM REAL-TIME
CHANNEL MODE MESSAGES MSG
MSG (messaggi di
MODO)
SYSTEM
EXCLUSIVE MSG

Channel Messages

Lo STATUS BYTE di un messaggio di CANALE è sempre 1xxx nnnn. Per quanto riguarda i 3 bit
xxx solo le prime 7 di 8 combinazioni sono utilizzate per indicare questa categoria di messaggi.

Quando il sistema riconosce dai primi 4 bit del messaggio che si tratta di un messaggio di canale,
prende in esame il secondo nibble (4 bit = 1 nibble), che indica su quale canale è indirizzato il
messaggio.

Questi messaggi vengono generati tutte le volte che viene selezionato e variato un controllo o
viene suonata una nota, etc…

Channel Voice Messages

Questi messaggi sono generati durante l’esecuzione del brano. Tra questi: NOTE ON/OFF, PITCH
BEND, CONTROL CHANGE, PROGRAM CHANGE, AFTERTOUCH POLY e di CANALE.

8
Elementi di Programmazione MIDI – Francesca Ortolani

NOTE OFF: messaggio che ordina ad uno slave di smettere di suonare una certa nota su un certo
canale:

STATUS DATA 1 DATA 2


8nH kkH vvH
1000 nnnn 0kkk kkkk 0vvv vvvv
(Note Off) (Key Num) (Velocity)

Un messaggio di NOTE OFF non interrompe il suono, ma solo il suo invio. Il release del suono
comincia al giungere del NOTE OFF.

Il numero di nota va da 0 a 127, coprendo un range di 128 note da C-2 a G8 (il DO centrale sarebbe
C3. Le lettere indicano la dicitura anglosassone per le note). Si può trovare uno standard di
manifattura diverso, ovvero che va da C-1 a G9 (in questo caso il DO centrale si trova in C4).
Attenzione quindi se si utilizzano strumenti che usano standard diversi ad avere la giusta
corrispondenza di ottava. Il costruttore fornirà all’utente le informazioni comprendenti sia la
posizione del DO centrale sia l’effettivo range (TRUE VOICE) coperto dallo strumento (non
necessariamente l’intero range di 128 note).

Attenzione! Non è detto che il suono relativo a C3 abbia frequenza inferiore a C5: dipende da
come il timbro usato è associato alle note (vedi esempio tipico dei kit percussivi: ogni nota è una
percussione diversa).

Velocity

La Velocity è la velocità con cui si preme/rilascia un tasto. È usata più frequentemente per
controllare il volume della nota, in realtà la velocity può controllare tanti altri parametri come il cut
off di un filtro, pitch, pan…
Si può impostare sullo slave quale parametro controllare. Non sempre tutti gli strumenti
ricevono/trasmettono la velocity. Uno strumento che non la riceve ignorerà il data byte relativo alla
velocity, considerando solo gli altri.

Non sempre si trova un messaggio di NOTE OFF a seguire un messaggio di NOTE ON. È comune
trovare piuttosto un messaggio di NOTE ON con VELOCITY = 0.

Running Status

Il MIDI supporta il running status, ovvero finché lo STATUS non cambia, si può evitare di inviarlo
nuovamente, limitandosi a trasmettere solo i DATA, risparmiando tempo, memoria e banda.

9
Elementi di Programmazione MIDI – Francesca Ortolani

NOTE ON: messaggio che ordina ad uno slave di suonare una certa nota su un certo canale:

STATUS DATA 1 DATA 2


9nH kkH vvH
1001 nnnn 0kkk kkkk 0vvv vvvv
(Note On) (Key Number) (Velocity)

Le tastiere che non sono sensibili alla velocity trasmettono ogni nota con valore della velocity
intermedio (64).

NOTE ON con Vel = 0 NOTE OFF

AFTERTOUCH POLIFONICO: controllo della pressione esercitata sui tasti in stato di ON (ovvero non si
può rilasciare un tasto e poi usare l’aftertouch).

STATUS DATA 1 DATA 2


AnH kkH aaH
1010 nnnn 0kkk kkkk 0aaa aaaa
(Poly Key (Key Number) (Pressure
Pressure) Aftertouch)

L’AFTERTOUCH controlla vari parametri e funzioni impostabili sullo slave: vibrato, tremolo, volume…

L’aftertouch POLIFONICO fa sì che questo controllo sia distinto per ogni singolo tasto. Per fare ciò la
tastiera necessita di un sensore per ogni tasto.

Il DATA BYTE 2 si riferisce alla quantità di pressione esercitata sul tasto.

AFTERTOUCH DI CANALE: vale quanto detto per quello polifonico, ma non necessita di un sensore
per ogni singolo tasto, piuttosto di uno globale per l’intera tastiera:

STATUS DATA 1
DnH aaH
1101 nnnn 0aaa aaaa
(Channel (Pressure
Pressure) Aftertouch)

Questo messaggio invia la stessa informazione di pressione esercitata per tutto il canale (Nota: c’è un
solo DATA BYTE per la pressione).

10
Elementi di Programmazione MIDI – Francesca Ortolani

PROGRAM CHANGE: messaggio che ordina ad uno slave di cambiare programma tra una serie di 128
preset:

STATUS DATA 1
CnH ppH
1100 nnnn 0ppp pppp
(Program (Preset
Change) Number)

Questi preset cambiano a seconda del tipo di strumento. Originariamente per “programma” si
intendeva solo un certo timbro di un certo synth. Oggi invece si intende una generica configurazione
di funzione, che può essere anche un effetto su un DSP, i livelli di un mixer, lo split di una master
keyboard…

Dato che 128 è un numero limitato, sono stati introdotti i BANCHI selezionabili tramite BANK SELECT
e comprendenti fino a 128 preset.

PITCH BEND: messaggio che ordina ad uno slave di alterare il pitch in modo continuo (glissato) per
simulare l’effetto bending (es. come sulla chitarra):

STATUS DATA 1 DATA 2


EnH mmH llH
1110 nnnn 0mmm mmmm 0lll llll
(Pitch Bender (Bender (Bender
Change) Position MSB) Position LSB)

Il messaggio di PITCH BEND può essere inviato tramite joystick o rotella (wheel) bidirezionale con
ritorno a molla.

Il PITCH BEND (o PITCH BENDER CHANGE) indica in pratica la posizione del controller del pitch
(rotella, joystick).

Il range frequenziale dipende dallo strumento slave e da come esso è impostato (il vincolo
meccanico della rotella non conta). Solitamente di default troviamo un range di ±2 semitoni, ma
possiamo impostare fino a ±24 semitoni (il range è aggiustabile tramite un controller RPN – leggi di
seguito).

I DATA BYTE sono due: POSITION MSB e POSITION LSB. Avendone due si fornisce al pitch bender
una risoluzione migliore (14 bit invece di 7). In questo modo l’effetto sarà più continuo e meno “a
scatti”. Con 14 bit possiamo discretizzare 214 = 16384 livelli di pitch.

11
Elementi di Programmazione MIDI – Francesca Ortolani

CONTROL CHANGE: messaggio che ordina ad uno slave di cambiare controllo:

STATUS DATA 1 DATA 2


BnH ccH ppH
1011 nnnn 0ccc cccc 0ppp pppp
(Control (Control (Control
Change) Number) Position)

Siccome bisogna stabilire sia QUALE controllo sia QUANTO controllo si deve applicare, il CONTROL
CHANGE utilizza anche il primo DATA BYTE per trasmettere un’informazione qualitativa (funzione che
invece sarebbe tipica di uno STATUS BYTE).

Il secondo DATA BYTE invece svolge la sua tipica funzione quantitativa.

Nel 1985 la MMA (MIDI Manufactures Association) ha definito una tabella che assegna in modo
univoco un numero a ciascun controller.

I controller si suddividono in CONTROLLI CONTINUI e CONTROLLER AD INTERRUTTORE.

Un CONTROLLER CONTINUO può assumere ciascun valore di 128 inviabili nel DATA BYTE 2.

I CONTROLLER AD INTERRUTTORE sono OFF da 0 a 63 e ON da 64 a 127.

Per quanto riguarda il primo DATA BYTE, i controller:

• 0 – 63 sono continui
• 64 – 95 sono ad interruttore (ad eccezione di 70-74, 91-95 che sono continui a 7 bit)
• 96 – 101 sono riservati alla trasmissione dei messaggi di MODO.

I controller continui da 0 a 63 sono a 14 bit. Questo vuol dire che serviranno due DATA BYTE per
fornire l’informazione quantitativa. Per questo i controller continui sono ripetuti due volte:

0 – 31 MSB (Most Significant Byte)


32 – 63 LSB (Least Significant Byte)

Channel Mode Messages

Questi messaggi riguardano il controllo generale di un dispositivo e non dei singoli parametri: in
pratica definiscono la risposta dello strumento ai VOICE MESSAGES.

I messaggi di MODO sono richiamati da uno STATU BYTE di Control Change e dai DATA BYTE che si
riferiscono ai controller da 120 (78) a 127 (7F).
Tra questi messaggi troviamo: ALL SOUND OFF, RESET ALL CONTROLLERS…

12
Elementi di Programmazione MIDI – Francesca Ortolani

ALL SOUND OFF: messaggio che silenzia tutte le note che suonano, che erano state attivate con
NOTE ON, ma non ancora “rimosse” con NOTE OFF:

STATUS DATA 1 DATA 2


BnH 78H 00H
1011 nnnn 0111 1000 0000 0000
(Control (All Sound Off) (ignorato)
Change)

Precisamente questo messaggio non silenzia in assoluto TUTTE le note: quelle in ingresso MIDI IN
(es. da tastiera) continuano a suonare.

ALL NOTES OFF: messaggio che silenzia TUTTE le note in assoluto (anche MIDI IN !!):

STATUS DATA 1 DATA 2


BnH 7BH 00H
1011 nnnn 0111 1011 0000 0000
(Control (Reset) (ignorato)
Change)

Questo messaggio è una specie di “Panic Button”: funziona soprattutto per sbloccare le note che non
smettono di suovare.

LOCAL CONTROL: messaggio che attiva/disattiva la tastiera localmente, facendo in modo che i
parametri del synth siano controllati attraverso MIDI IN da uno strumento esterno:

STATUS DATA 1 DATA 2


BnH 7AH OFF: 00H
1011 nnnn 0111 1010 0000 0000
(Control (Local Ctrl) ON: 80H
Change) 1000 0000

(Attenzione! Il DATA BYTE ON inizia con 1 !!)

OMNI MODE OFF: (All Notes Off) in questo modo il dispositivo risponderà solo ai messaggi VOICE su
un numero limitato di canali, di solito uno solo (Base Channel):

STATUS DATA 1 DATA 2


BnH 7CH 00H
1011 nnnn 0111 1101 0000 0000
(Control (Omni Mode (ignorato)
Change) Off)

13
Elementi di Programmazione MIDI – Francesca Ortolani

OMNI MODE ON: (All Notes On) in questo modo, senza riguardo di quale canale riceva il messaggio,
lo strumento risponderà comunque al messaggio (ovvero risponde a tutti e 16 i canali):

STATUS DATA 1 DATA 2


BnH 7DH 00H
1011 nnnn 0111 1100 0000 0000
(Control (Omni Mode (ignorato)
Change) On)

MONO MODE ON: (Poly Off) in questo modo si comunica ad uno slave di selezionare il modo
MONO. Il DATA BYTE 2 indica su quali canali devono essere ricevute/trasmesse le voci monofoniche:

STATUS DATA 1 DATA 2


BnH 7EH mmH
1011 nnnn 0111 1110 0000 mmmm
(Control (Mono Mode) (Channel
Change) Allocation)

Dato il canale N saranno interessati al MONO i canali N+M-1 (<16). Se il valore del DATA BYTE 2 è 0,
allora MONO sarà allocato su tutti i canali.

POLY MODE ON: (Mono Off) in questo modo si comunica ad uno slave di attivare il POLYMODE. Lo
strumento risponde polifonicamente alle informazioni MIDI:

STATUS DATA 1 DATA 2


BnH 7FH 00H
1011 nnnn 0111 1111 0000 0000
(Control (Poly Mode (ignorato)
Change) On)

System Messages

Questi messaggi sono ricevuti da tutto il sistema MIDI, ovvero da tutti gli strumenti collegati, e non
contengono informazioni di canale.

14
Elementi di Programmazione MIDI – Francesca Ortolani

SYSTEM
COMMON MSG

SYSTEM SYSTEM REAL


MESSAGES TIME MSG

SYSTEM
EXCLUSIVE MSG

Il formato per questi messaggi è il seguente:

1111 xxxx (ho quindi 2 4 = 16 diversi messaggi possibili)

System Exclusive Messages

Questi messaggi sono usati per mandare informazioni specifiche ad un certo modello di
strumento o classe compatibile, servono per comunicare con la macchina, per fare il backup della
memoria, per impostare dei parametri… Si usano poco, soprattutto si usano per macchine hardware.
I Virtual Instruments di solito non li ricevono.

Sono formati quasi sempre da 4 sezioni:

- START F0
- ID Può indicare l’identificativo della macchina
- DATA Può indicare un parametro da modificare e un valore
- END F7

Esistono 4 tipi di Sys-Ex:

1. Commercial: usato per tutte le macchine messe in commercio.


- ID: Manufacturer ID
00 7C
xx case storiche (41 Roland, 47 Akai…)
00 xx xx altre case (00 00 7E Alesis, 00 01 06 Presonus…)

Device ID
Identificativo della macchina (nel caso ci fossero macchine uguali in un sistema,
l’utente può impostare questo parametro per distinguerle).
Default 00 (Roland 01)

Model ID
Identificativo del modello (es. Roland A-37)

15
Elementi di Programmazione MIDI – Francesca Ortolani

2. Non Commercial: usato per macchine MIDI che non vengono messe in commercio.
- ID: 7D Universal Non Commercial.

3. Universal Non-Real Time: usato per i messaggi che non necessitano di una risposta
immediata.
- ID: ID
7E Universal Non-Real Time.
Channel Number
00 7F (7F = GLOBAL)
Sub ID
Varie funzioni.

4. Universal Real Time: usato per i messaggi in tempo reale (vedi


Sincronizzazione MIDI Time Code).
- ID: ID
7F Universal Real Time.
Channel Number
00 7F (7F = GLOBAL)
Sub ID
Varie funzioni.

System Common Messages

I System Common sono messaggi che riguardano il timecode, l’accordatura degli oscillatori, la
selezione di una song, tra questi: QUARTER FRAME, SONG POSITION, SONG SELECT, TUNE REQUEST.

System Real Time Messages

Questi messaggi sono formati dal solo STATUS BYTE. Possono essere inviati in qualsiasi momento,
anche tra byte di altri messaggi interrompendo il flusso in corso.

Si tratta di una serie di vari messaggi di sincronizzazione delle macchine: CLOCK START, CONTINUE,
STOP, ACTIVE SENSING, SYSTEM RESET.

Es. CLOCK

Il CLOCK è un segnale di sincronismo tra diversi dispositivi ed è inviato almeno 24 volte ogni nota
da 1/4. Per questo si chiama anche PPQN (Pulse per Quarter Note) oppure CPQN (Clock per Quarter
Note).

Il PPQN è la risoluzione di timing (temporizzazione) di un sequencer MIDI e indica il numero di


divisioni in cui una nota da 1/4 è stata suddivisa relazionandosi quindi direttamente con la capacità
del sequencer di rappresentare fini variazioni ritmiche.

I vecchi synth arrivavano a 96 PPQN; ora si arriva anche a 768 PPQN.


16
Elementi di Programmazione MIDI – Francesca Ortolani

Trucco: con un PPQN basso, raddoppiando il tempo di una song e suonando a metà tempo si avrà un
effettivo raddoppio della risoluzione.

Vedi di seguito Sincronizzazione per approfondimenti.

17
Elementi di Programmazione MIDI – Francesca Ortolani

Figura 5.10 Tabella riassuntiva dei Messaggi System Exclusive [P. Guaccero]

18
Elementi di Programmazione MIDI – Francesca Ortolani

SINCRONIZZAZIONE

L’importanza della sincronizzazione è di fare in modo che due macchine che intendiamo far lavorare
insieme, suonino “a tempo”, ovvero siano d’accordo per quanto riguarda il tempo, la posizione del
cursore nella song e ciò che è correlato a tutto questo.

Quando si parla di sincronizzazione ci sono sempre un MASTER e uno SLAVE.


Il master di regola è sempre la macchina più lenta (es. macchina analogica è master su macchina
digitale). Questo perché lo slave deve rispondere ai comandi del master. Se il master è troppo
veloce, più veloce dello slave, quest’ultimo non riesce a rispondere a tutti i comandi.

MIDI CLOCK
La sincronizzazione MIDI CLOCK è basata sul tempo musicale (invece il MIDI Time Code è basata su
SMPTE: hh:mm:ss:ff). Il MIDI Clock non è universale, ma si può utilizzare solo su macchine dotate di
un sequencer, ovvero che ragionano in termini musicali.

Tutti i messaggi che riguardano la sincronizzazione sono messaggi di sistema.

Funzioni principali:
- Start/Stop (Start equivale a Locate 0)
- Scorrimento Sincrono (serve per far andare di pari passo master e slave)
- Locate

1. Start/Stop sono gestite da 3 messaggi di sistema real time (1 solo byte):


START FAH 11111010 impone play/rec dall’inizio della song.
CONTINUE FBH 11111011 impone di riprendere il play/rec dall’ultimo stop.
STOP FCH 11111100 impone l’interruzione di play/rec.

2. Scorrimento sincrono è gestita da 1 messaggio di sistema real time (1 solo byte):


TIMING CLOCK F8H 11111000

Viene inviato 24 volte ogni nota da ¼ (risoluzione MIDI base), per cui si parla di Clock Per Quarter
Note (o Pulse Per Quarter Note). Osserva che 24 è divisibile per 2, 3, 4, 8, quindi il 24 si presta bene
alle devisioni in terzine. Con questa suddivisione si arriva ad una risoluzione fino alla terzina di
sessantaquattresimi (con il Time Code la sincronizzazione è ancora più precisa). Se ho ad esempio
60bpm -> 60*24 = 1440 msg/min.

3. Locate è gestita da un messaggio di sistema comune:


SONG POSITION POINTER STATUS F2H + DATA LSB hhH + DATA MSB mmH

Permette di associare un indirizzo assoluto ad ogni beat della sequenza. Posiziona lo slave nel punto
dove si posiziona il master. L’unità di misura del Song Position Pointer è il sedicesimo: 1/16
musicale. Il master dice allo slave quanti sedicesimi sono passati dall’inizio della song. Con 14 bits di
risoluzione, se ho battute da 4/4, ottengo dallo start 16384 sedicesimi in totale e quindi 1024
battute a disposizione per una song.

Esempio pratico in Cubase: Utilizzando una sincronizzazione MIDI Clock, Cubase può essere solo master,
mentre con il Time Code è anche slave. Nel menù Transport, trovo la voce “Sync Setup”. Selezionandola si
apre una finestra per la gestione della sincronizzazione. Posso aprire la stessa cliccando con CTRL su Sync sulla
Transport Bar. Nella finestra trovo il riquadro MIDI Clock Destinations, dove selezione a quali uscite deve
essere inviato il MIDI Clock:
MIDI Clock Follows Project Position: si utilizza quando voglio che lo slave segua il master nel caso
19
Elementi di Programmazione MIDI – Francesca Ortolani

voglia fare un loop, un locate, un salto, altrimenti lo slave


continuerebbe per la sua strada. Nota che alcuni dispositivi
reagiscono al cambiamento di posizione brutalmente.
Always Send Start Message: si utilizza con macchine che non conoscono il messaggio
CONTINUE. Selezionando questa opzione il master invia soltanto
Start e ignora Continue.
Send MIDI Clock in Stop Mode è utile per i sistemi che ad esempio hanno un arpeggiatore che
continua ad arpeggiare anche se la macchina è in stop.

MIDI TIME CODE SMPTE


Si esprime in hh:mm:ss:ff:bb

Ogni frame ci sono 80 subframe.

Frames per second


CINEMA 24 fps
PAL - SECAM 25 fps
NTSC B/N 30 fps
NTSC COLOR 29,97 fps = 30 drop frame

Spiegazioni…
Sono sufficienti 24 fotogrammi al secondo per dare l’illusione a chi guarda lo schermo che l’immagine sia
continua. Questo dipende dalla persistenza dell’immagine sulla retina dell’occhio. 24 fotogrammi al secondo è
oltre il limite di percezione della retina. Il drop frame deriva dalle correzioni effettuate sulla sottoportante del
chroma affinché le armoniche superiori del chroma non interferiscano con l’audio che si trova più sù in
frequenza. La sottoportante del chroma è stata quindi abbassata, di conseguenza il frame rate.
Le frequenze di semiquadro 50 e 60 sfps hanno lo stesso valore delle rispettive frequenze di rete (Europa,
USA), perché una volta era difficile fare degli oscillatori per la frequenza di quadro (o semiquadro) stabili a
lungo termine. Dato che la frequenza di rete è stabile poiché generata da macchine elettriche (alternatori) di
grande inerzia meccanica, allora si è deciso di agganciare gli oscillatori alla frequenza di rete.

Master e Slave devono avere la stessa risoluzione in frame impostata.


Nota che per il MTC 29,97 e 30d non sono distinguibili.

Esistono 3 tipi di TIME CODE:

LTC (Longitudinal Time Code)


È un segnale digitale codificato come Manchester Bifase che si può registrare anche su nastro sotto
forma di onda quadra modulata. In pratica il timecode si trova sotto forma di segnale audio.

VITC (Vertical Interval Time Code)


Viene scritto fra i fotogrammi del video in un paio di linee non visibili durante il ritorno di quadro
verticale. Quando visibile si mostra come dei quadratini bianchi su sfondo nero.

MTC (MIDI Time Code)


Il segnale viene codificato in messaggi MIDI e trasmesso su cavi MIDI.

ADAT SYNC
Utilizzato solo con l’ASIO Positioning Protocol.

20
Elementi di Programmazione MIDI – Francesca Ortolani

MTC Quarter Frame


È un messaggio chiamato in questo modo perché viene inviato 4 volte ogni frame.
Nel MTC la funzione START è accorpata con lo SCORRIMENTO SINCRONO.
È un messaggio di SISTEMA comune: STATUS BYTE (F1) + 1 DATA BYTE.
Il primo nibble del Data Byte serve a indicare l’informazione qualitativa. Nota che siccome è un
DATA BYTE deve cominciare per 0, quindi il valore massimo sarebbe 7. Si utilizza una Configurazione
LSNibble + MSNibble. L’ultima combinazione del primo nibble dice inoltre che si tratta di un codice
SMPTE. Il MTC non utilizza i sub frame.

QUARTER FRAME
STATUS BYTE F1H System Common Status Byte (= QUARTER FRAME)
DATA BYTE 0nnn dddd (0nnn = tipo di messaggio; dddd = campo per i dati di tempo)

0nnn = tipo di messaggio


0 = frames LSnibble
1 = frames MSnibble
2 = seconds LSnibble
3 = seconds MSnibble
4 = minutes LSnibble
5 = minutes MSnibble
6 = hours LSnibble
7 = hours MSnibble

La trasmissione di una word di messaggio SMPTE richiede l’invio di 8 messaggi Quarter Frame
numerati progressivamente, uno per ogni quarto di frame. Quindi lo slave ricostruisce il timecode
con un ritardo di 2 frame (4 messaggi + 4 messaggi = 8 totale).
Sarebbe anche meglio che il clock sia comune al master e allo slave e meglio ancora se fornito da un
dispositivo dedicato a questo scopo. Altro problema sono le latenze diverse delle varie schede
utilizzate.

MTC Full Frame


È un SYS-EX Real Time, comincia quindi per F0 e finisce con F7. Si è scelto questo tipo di messaggio
perché servono tanti byte per comunicare le informazioni con precedenza assoluta. È una specie di
autolocator e consente a tutte le macchine del sistema di posizionarsi in un determinato punto della
sequenza con la precisione del frame.

START F0
ID Universal RealTime 7F
Channel Number 7F
Sub-ID Long Form MTC 01 01
(MTC Full Frame)
hh+fps (type) xx
mm xx
ss xx
ff xx
END F7

Esempio pratico: impostazione su Cubase del Timecode


Menù Transport -> Synchronization Setup (oppure sulla Transport Bar SYNC+Click).
Cubase per il Timecode può essere sia master che slave.
21
Elementi di Programmazione MIDI – Francesca Ortolani

Cubase Master
Timecode source: Internal Timecode
MIDI TimeCode Destination: Scegliere porta MIDI

Cubase Slave
Timecode source: MIDI TimeCode
MIDI TimeCode Source: Scegliere sorgente per il Timecode

Se il Timecode arriva da una macchina analogica: opzioni su Machine Control Master.

Application:
Lock Frames: imposta numero di frame su slave da bloccare prima che lo slave
parta.
Drop out Frames: imposta numero di frame che lo slave deve aspettare prima di
sganciarsi (se per N frame lo slave non riceve il timecode si
sgancia). Nota che il timecode su una macchina analogica ad
esempio crea problemi in quanto è un segnale audio che deve
essere convertito in forma di messaggi MIDI.
Inhibit Restart ms: si può inibire il restart per un certo numero di ms.

MIDI TimeCode Follows Project Time: è selezionabile anche per Timecode come visto per MIDI Clock e
funziona ugualmente male.

OFFSET
Su Cubase è proprio riferito allo START della sessione (vedi Project Setup).
L’Offset è il punto in cui si aggancia lo slave.

Tasto SYNC
Se utilizzo Cubase come slave devo attivare il tasto SYNC sulla Transport Bar (solo nel caso SLAVE). Compare la
scritta Idle (in attesa). Non appena arriva il segnale compare la scritta Lock xx.

MIDI MACHINE CONTROL (MMC)


Il MMC è una parte del protocollo MIDI che serve per controllare i comandi di trasporto, ad
esempio, di un registratore a nastro (che deve quindi avere un’interfaccia MIDI a questo punto).

Esempio pratico in Cubase:


Cubase può comportarsi sia da Master che da Slave per il MMC ed ha una barra di trasporto dedicata al MMC.
Ricordarsi di premere ONLINE su questa barra, altrimenti non funziona.

Colleghiamo Cubase ad un registratore esterno: si vede che il Midi Machine Control da solo non funziona.
Praticamente ho bisogno di un segnale di MTC proveniente dal registratore verso cubase.

Cubase (MASTER) MMC Registratore (SLAVE)


Registratore (MASTER) MTC Cubase (SLAVE)

Quindi, si noti che, anche se sembra che sia Cubase a controllare la macchina, in realtà Cubase è agganciato al
trasporto della macchina, ovvero al suo Timecode. Anche per questo Cubase ha l’MMC Master a parte.
Cubase può anche armare/disarmare le tracce sullo slave (vedi impostazioni Master su Synchronization Setup
-> MMC).

22
Elementi di Programmazione MIDI – Francesca Ortolani

5.5 Controlli

Controlli Continui

(tra parentesi il numero nel sistema esadecimale)

0 (00) BANK SELECT MSB e 32 (20) BANK SELECT LSB::

Questo controller richiama un banco. I banchi contengono fino a 128 programmi. I valori MSB e LSB
saranno forniti dal costruttore.

0 (00) Banchi sopra al #129


32 (20) Banchi da #1 a #128

1 (01) MODULATION WHEEL:


controlla le modulazioni, Vibrato, Tremolo, a seconda di come è programmato lo slave ed è inviato da
una rotella UNIDIREZIONALE e senza ritorno a molla o da un joystick.

2 (02) BREATH CONTROLLER:


introdotto dalla Yamaha, è mandato da un controller che rileva la pressione del fiato. In questo modo
si cerca di simulare la sensazione data da uno strumento a fiato. I parametri più controllati con
BREATH sono Volume e Pitch.

3 (03) UNDEFINED:
Non ancora definito. Disponibile per applicazioni future.

4 (04) FOOT CONTROLLER:


è inviato da controller a pedale. La sua funzione dipende da come è programmato lo slave (può
essere la stessa di un Modulation Wheel o Breath).

5 (05) PORTAMENTO TIME:


regola il tempo di portamento, ovvero il tempo di variazione in frequenza continua fra due note
(glissato). Nota: il portamento avviene quando l’evento della seconda nota è stato effettivamente
letto. Vedi PORTAMENTO CONTROLLER per impostare la nota di sorgente.

6 (06) DATA ENTRY:


cambia il valore dei parametri delle funzioni di strumenti esterni (expander, synth, computer…),
attivate tramite un messaggio RPN, NRPN. Si può trovare sotto forma di fader, slider, manopola.

7 (07) MAIN VOLUME:


regola il volume principale del canale. È poco comune trovare strumenti che lo trasmettono, mentre
quasi tutti invece lo ricevono.

23
Elementi di Programmazione MIDI – Francesca Ortolani

8 (08) BALANCE:
controlla il bilanciamento di un segnale STEREO.

0 = LEFT
64 = CENTER
127 = RIGHT

10 (0A) PAN:
regola il posizionamento di un segnale MONO.

0 = LEFT
64 = CENTER
127 = RIGHT

11 (0B) EXPRESSION:
impostato il MAIN VOLUME range, EXPRESSION regola il volume all’interno del range impostto.

16 – 19 (10 – 13) GENERAL PURPOSE:


sono controller definiti dai costruttori e descritti nei manuali operativi degli strumenti.

Controlli Continui a 7 bit

84 (54) PORTAMENTO CONTROLLER:


fornisce le informazioni aggiuntive a realizzare il portamento (Vedi controller 5). Indica da quale nota
la nota successiva deve fare il glissato.

70 – 74 (46 – 4A) SOUND CONTROLLERS:


modificano i parametri del suono.

Sound Variation: controlla qualsiasi parametro associato allo strumento che genera il
suono. Es. se il dispositivo usa dei campioni, questo controller può
modificare ad esempio la sample rate.

Sound Timbre: controlla il filtro VCF dello strumento.

Sound Release/Attack: regola il tempo di release/attack controllando il VCA dello strumento.

Sound Brightness: controlla la frequenza di cut off del filtro VCF dello strumento.

91 – 95 (5B – 5F) EFFECTS DEPTH:


controllano i processori di segnale e gli effetti, definendo la quantità di effetto da applicare
(TREMOLO, CHORUS, CELESTE, PHASER, EXTERNAL FX).

24
Elementi di Programmazione MIDI – Francesca Ortolani

Controlli ad Interruttore

64 (40) SUSTAIN - DAMPER PEDAL:


se attivato, prolunga i suoni anche dopo il rilascio del tasto.

65 (41) PORTAMENTO:
ON/OFF portamento.

66 (42) SOSTENUTO:
ON/OFF sustain.

67 (43) SOFT PEDAL:


Simula l’effetto della sordina di un pianoforte.

68 (44) LEGATO FOOTSWITCH:


ON/OFF legato. Se attivo, le note vengono suonate legate (non staccate). In pratica viene modificato
in automatico (attenuato) l’attacco delle note.

69 (45) HOLD 2:
duplica il tempo di rilascio delle note suonte. A differenza di SUSTAIN, che allunga il tempo di rilascio
permanentemente.

Controlli per Dati

96 – 97 (60 – 61) DATA INCREMENT/DECREMENT:


incrementa/decrementa il valore di un parametro asociatio a NRPN/RPN.

98 – 99 (62 – 63) NRPN:


(LSB/MSB) indica un parametro che un dispositivo MIDI pemette di controllare tramite DATA
ENTRY/INCREMENT/DECREMENT. Siccome ogni dispositivo può definire un particolare NRPN, è
possibile che due macchine diverse interpretino lo stesso numero in due modi diversi, creando un
conflitto. Un buon dispositivo dovrebbe poter permettere di disabilitare la ricezione di NRPN. Questi
parametri non sono registrati da MMA, ma liberamente definiti dal costruttore. Funzionano come gli
RPN.

100 – 101 (64 – 65) RPN:


(LSB/MSB) indica un parametro che un dispositivo MIDI permette di controllare tramite DATA
ENTRY/INCREMENT/DECREMENT. La MMA assegna RPN a specifiche funzioni.

Applicazioni ed esempi
Con i CC RPN mi servono 1 STATUS BYTE + 2 DATA BYTE per indicare quale controllo voglio
selezionare. Per impostare la quantità di controllo mi serve il CC DATA ENTRY.

25
Elementi di Programmazione MIDI – Francesca Ortolani

Come detto, gli RPN sono MSB e LSB: 101 (64H) – 100 (65H).
Le funzione gestite con RPN sono: Pitch Bend Range, Channel Fine Tuning (accordatura fine), Channel
Coarse Tuning (accordatura grezza, per semitoni)1.
La combinazione dei DATA BYTE 2 dell’RPN MSB e LSB determina la funzione (ricorda, il DATA BYTE 1
determina il tipo di CC, MSB o LSB).

Pitch Bend Range MSB 00H


LSB 00H
Channel Fine Tuning MSB 00H
LSB 01H

Channel Coarse Tuning MSB 00H


LSB 02H

RPN NULL MSB 7FH


LSB 7FH

Nota che, una volta inviato un RPN, basta inviare solo DATA ENTRY. RPN NULL serve se per caso
vengono inviati DATA ENTRY indesiderati. Questo RPN annulla quindi l’azione dei DATA ENTRY
successivi.

Per quanto riguarda il CC DATA ENTRY MSB (LSB si usa raramente) è il DATA BYTE 2 che determina la
quantità di controllo.

Pitch Bend Range 00H = no pitch bend


01H = ±1 semitono
Etc.

Channel Fine Tuning 40H = accordatura standard (064)


(max ±1 semitono) 00H = -1 semitono (000)
7FH = +1 semitono (127)

Channel Coarse Tuning 40H = accordatura standard (064)


(max ±48 semitoni) L’escursione è di 4 ottave ±48 semitoni (da 16 a 112 in decimale)
Aggiungo/Diminuisco = ±semitono

1
Channel Fine Tuning e Channel Coarse Tuning possono ancora trovarsi con il loro vecchio nome Master Fine
Tuning e Master Coarse Tuning
26
Elementi di Programmazione MIDI – Francesca Ortolani

Figura 5.11 Tabella riassuntiva dei CC RPN [P. Guaccero]

27
Elementi di Programmazione MIDI – Francesca Ortolani

5.6 Tavole Riassuntive

TAVOLA DEI MESSAGGI MIDI


MESSAGGI DI CANALE

MESSAGGIO STATUS BYTE PRIMO DATA BYTE SECONDO DATA BYTE


NOTE OFF 8n Numero di Nota Velocity
NOTE ON 9n Numero di Nota Velocity
AFTERTOUCH An Numero di Nota Quantità di Pressione
POLIFONICO
CONTROL CHANGE Bn Numero di Controllo Valore del Controllo
PROGRAM CHANGE Cn Numero di Programma -
AFTERTOUCH DI Dn Quantità di Pressione -
CANALE
PITCH BEND En LSB MSB

MESSAGGI DI SISTEMA

Messaggi Comuni al Sistema

MESSAGGIO STATUS BYTE PRIMO DATA BYTE SECONDO DATA BYTE


SYSTEM EXCLUSIVE F0 Codice Fabbricante ???
F1
SONG POSITION F2 LSB MSB
POINTER
SONG SELECT F3 Numero della Song
F4, F5
TUNE REQUEST F6
END OF EXCLUSIVE F7

Messaggi in Tempo Reale

MESSAGGIO STATUS BYTE PRIMO DATA BYTE SECONDO DATA BYTE


TIMING CLOCK F8
F9
START FA
CONTINUE FB
STOP FC
FD
ACTIVE SENSING FE
SYSTEM RESET FF

28
Elementi di Programmazione MIDI – Francesca Ortolani

TAVOLA DEI CONTROLLI MIDI


CONTROLLI CONTINUI

DEC HEX CONTROLLER


0 00 Bank Select MSB (Banks above
#129)
1 01 Modulation Wheel or Lever
2 02 Breath Controller
3 03 Undefined
4 04 Foot Controller
5 05 Portamento Time
6 06 Data Entry MSB
7 07 Main Volume
8 08 Balance (0 = left, 64 = center,
127 = right)
9 09 Undefined
10 0A Pan (0 = left, 64 = center, 127 =
right)
11 0B Expression (0 = lower volume,
64 = same, 127 = higher)
12-15 0C-0F Undefined
16-19 10-13 General Purpose Controllers
(#’s 1-4)
20-31 14-1F Undefined
32 20 Bank Select LSB (Banks #1 -
#128)
33-63 21-3F LSB for controllers 1-31

CONTROLLI AD INTERRUTTORE

DEC HEX CONTROLLER


64 40 Damper Pedal (Sustain)
65 41 Portamento
66 42 Sostenuto
67 43 Soft Pedal
68 44 Legato Footswitch (0-3F =
Normal, 40-7F = Legato)
69 45 Hold 2
70 46 Sound Controller #1 (Sound
Variation)
71 47 Sound Controller #2
(Timbre/Harmonic Intensity)
72 48 Sound Controller #3 (Release
Time)
73 49 Sound Controller #4 (Attack
Time)
74 4A Sound Controller #5
(Brightness)
75-79 4B-4F Undefined

29
Elementi di Programmazione MIDI – Francesca Ortolani

80-83 50-53 General Purpose Controllers


(#’s 5-8)
84 54 Portamento Controller (PTC) (n
= channel, v = source note)
91 5B Effects Depth #1 (External
Effects Depth)
92 5C Effects Depth #2 (Tremolo
Depth)
93 5D Effects Depth #3 (Chorus
Depth)
94 5E Effects Depth #4 (Celeste –
Detune - Depth )
95 5F Effects Depth #5 (Phaser
Depth)

CONTROLLI PER DATI

DEC HEX CONTROLLER


96 60 Data Increment
97 61 Data Increment
98 62 Non-Registered Parameter
Number LSB
99 63 Non-Registered Parameter
Number MSB
100 64 Registered Parameter Number
LSB
101 65 Registered Parameter Number
MSB
102-119 66-77 Undefined

MESSAGGI DEL MODO DI CANALE

DEC HEX CONTROLLER


120 78 All Sound Off
121 79 Reset All Controllers
122 7A Local Control
123 7B All Notes Off
124 7C Omni Mode Off
125 7D Omni Mode On
126 7E Mono Mode On (Poly Off)
127 7F Poly Mode On (Mono Off)

30
Elementi di Programmazione MIDI – Francesca Ortolani

5.7 Sistemi numerici


Sistema Binario (BIN)

BASE 2 : {0, 1} nel sistema binario posso avere solo le due cifre 0 e 1.

20 21 22 23 2 4 25 26 27
potenze di 2.
1 2 4 8 16 32 64 128

Esempio 1: Esempio 2:
1 1 0 1 = 13 0 1 1 1 1 0 1 0 = 122
23 22 21 20 27 26 25 24 23 2 2 21 20
8 4 0 1 0 64 32 16 8 0 2 0

Posso procedere anche al contrario, partendo da una cifra decimale:

99 = 01100011

Sistema Esadecimale (HEX)

BASE 16 : {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F} significato: A = 10, F = 15

160 = 1, 161 = 16, 162 = 256

Esempio 1: Esempio 2: Esempio 3:


69 H = 105 A0 H = 10 ∗16 + 0 ∗1 = 160 BEH = 11∗16 + 14 ∗1 = 190
6 ∗16 + 9 ∗1

Posso procedere anche al contrario, partendo da una cifra decimale. Voglio rappresentare il numero
decimale 234 in esadecimale:

234
Eseguo la divisione . Come risultato otterrò un quoziente Q e un resto R.
16

In questo caso si ha Q = 14, R = 10 , perciò in definitiva si avrà per 234 QRH = EAH .

Conversione di un byte da BIN a HEX e poi a DEC (esempio):

31
Elementi di Programmazione MIDI – Francesca Ortolani

Per prima cosa divido il byte in 2 nibble da trattare separatamente. Fatto questo ricavo il valore in
esadecimale dei singoli nibble e procedo in questo modo:

1011 | 1100
11 12
B C → BCH = 11 ∗16 + 12 ∗1 = 188

Posso procedere al contrario, partendo dal numero decimale. Ad esempio per il numero 133:

133 = 8 | 5 H
1000 | 0101

32