Suono e Informatica
Il protocollo MIDI
| Sintetizzatore analogico Produce suoni artificiali usando dispositivi elettronici dedicati (ad esempio oscillatori, filtri, generatori di inviluppo, etc.) interconnettibili Poco versatile e poco scalabile; controllo approssimato dei parametri Rapidità di risposta Costi elevati |
Sintetizzatore digitale Produce suoni artificiali usando un microprocessore dedicato che esegue moduli software (oscillatori virtuali) con possibilità di interconnessione (algoritmi) Molto versatile e scalabile; controllo dei parametri molto preciso Rapidità di risposta dipendente dal microprocessore e dall'algoritmo Costi contenuti |
- Esigenze di comunicazione tra strumenti musicali elettronici
I costi contenuti dei sintetizzatori digitali, e il conseguente uso di microprocessori al loro interno, hanno consentito l'uso simultaneo di più moduli sonori;
nasce quindi l'esigenza di far comunicare tra loro i vari moduli sonori.
Normalmente un modulo Master (una tastiera chiamata, appunto, master keyboard) controlla più moduli Slave (di solito degli expander).
Inoltre, al momento dell'uscita dei primi sintetizzatori digitali si stavano affacciando sul mercato i Personal Computer:
Un PC può essere usato come Master e, soprattutto, come sequencer
Lo standard MIDI nasce in questa cornice
- Lo standard MIDI (Musical Instrument Digital Interface)
Interfaccia digitale per strumenti musicali:
Standard hardware per la comunicazione
Hardware per la comunicazione |
|
![]() |
Schema elettrico di un'interfaccia MIDI secondo lo standard internazionale; la UART (Universal Asynchronous Receiver Transmitter), che si interfaccia con il BUS del sistema, gestisce la trasmissione e ricezione dei byte relativi ai codici MIDI. L'optoisolatore serve a disaccoppiare elettricamente l'ingresso di linea dalla UART in modo da garantire una maggiore immunità ai disturbi. |
Spine e prese standard per il collegamento tra moduli: DIN pentapolari Sono indicati i pin usati Lunghezza massima del cavo: 15 mt. |
|
Schema funzionale di una catena MIDI con l'uso della presa Thru
Protocollo di comunicazione di tipo seriale senza connessione a 8 bit con un bit di start e uno di stop;
Velocità di trasmissione: 31250 bit/sec.
Tempo impiegato a trasmettere un byte: 320 microsecondi

Trasmissione seriale di un byte più lo start e lo stop
Significato dei comandi MIDI
|
Il musicista tiene premuto un tasto e una nota viene emessa. Nel gergo MIDI questo evento viene chiamato Note On |
|
Il musicista rilascia il tasto e la nota cessa di suonare. Questo evento viene chiamato Note Off |
| L'evento di note on (o note off) è relativo a una delle note che è possibile suonare sullo strumento. Ogni nota della scala temperata occidentale è associata, nello standard MIDI, a un numero a 7 bit (da 0 a 127) secondo lo schema sottostante |
|
Oltre all'altezza delle note possiamo controllare, tramite comandi e parametri MIDI:
La dinamica (ppp, pp, p, mp, mf, f, ff, fff) con il parametro detto Key Velocity (relativo alla nota, cioè al tasto)
L'intonazione con il comando Pitch Bend (la "rotella" che nei sintetizzatori permette di "stonare" la nota suonata)
Il timbro scegliendolo fra vari preset (detti anche programmi)
Diversi effetti e fonti esterne di input, etc.
Ogni comando è composto da un byte di stato seguito da uno o più byte di dati (parametri)
Ad esempio, la pressione del tasto relativo alla nota DO3 (il Do centrale) su un sintetizzatore produce la sequenza di byte: 144 60 64 (90 3C 40 in Hex); il primo è il byte di stato relativo al comando Note On, il secondo è il codice della nota, il terzo è la Key Velocity. Una tale sequenza di byte viene chiamata messaggio.
- Messaggi ordinari
Questa categoria di messaggi è relativa ai comandi usati durante l'esecuzione musicale; tali comandi sono
Note On e Note Off che già conosciamo
After Touch (detto anche Key Pressure) che indica il livello di pressione con cui è stato spinto un determinato tasto
Control Change che permette di selezionare un controller (ad esempio la modulation wheel o il pedale di volume o qualsiasi altro dispositivo di controllo della performance)
Program Change che permette di cambiare preset relativo al timbro (ad esempio se vogliamo eseguire un brano con il timbro del pianoforte o con quello del vibrafono)
Channel Pressure provoca un effetto uguale a quello prodotto da after touch tranne per il fatto che si applica a tutti i tasti premuti.
Pitch Bend permette i glissati e le "stonature" tramite un controllo continuo dell'altezza.
La tabella sottostante mostra il formato dei messaggi relativi ai comandi appena descritti; una loro caratteristica importante è che si riferiscono a un canale.
Ogni canale individua una sorgente indipendente di suoni
Ogni sorgente sonora può essere un distinto sintetizzatore o una delle "voci" di un sintetizzatore "multi-timbrico".
Ciò che viene inviato su un canale viene ignorato dagli altri canali
Un sintetizzatore può essere impostato in modalità Omni Mode: in questo caso accetterà messaggi relativi a qualsiasi canale
Il numero di canali che è possibile usare è 16 (da 0 a 15)
![]() |
Messaggio MIDI conseguente alla pressione del tasto DO3 su un sintetizzatore operante sul canale 0 (il primo). Il byte di stato è 144 + 0 |
![]() ![]() |
La stessa nota suonata sul canale 1 produce un messaggio il cui byte di stato è dato da 144 + 1 |
| hex | dec | bin | messaggio | dati | ||
| 80 | 128 | 1000nnnn | 0kkkkkkkk | 0vvvvvvvv | Note Off | k = n.nota |
| v = key velocity (se v=0, Note Off) | ||||||
| 90 | 144 | 1001nnnn | 0kkkkkkk | 0vvvvvvv | Note On | k = n.nota |
| v = key velocity | ||||||
| A0 | 160 | 1010nnnn | 0kkkkkkk | 0vvvvvvv | After Touch | k = n.nota |
| v = valore di pressione | ||||||
| B0 | 176 | 1011nnnn | 0ccccccc | 0vvvvvvv | Control Change | c = n. controllo |
| v = nuovo valore | ||||||
| C0 | 192 | 1100nnnn | 0ppppppp | Program Change | p = n. programma | |
| D0 | 208 | 1101nnnn | 0vvvvvvv | Channel Pressure | v = pressione | |
| E0 | 224 | 1110nnnn | 0vvvvvvv | 0zzzzzzz | Pitch Bend | v = parte piú significativa |
| z=parte meno significativa |
- Messaggi di sistema
Questa categoria di messaggi riguarda vari aspetti, come la sincronizzazione o il posizionamento, e alcuni specifici di ciascun tipo di strumento, mediante i quali è possibile intervenire in modo molto piú approfondito sul funzionamento dello strumento stesso.
Un messaggio di sistema è relativo a un dato sistema di produzione del suono
Le tabelle sottostanti elencano tali comandi insieme ai loro formati
Il messaggio System Exclusive ha particolare importanza in quanto permette di intervenire sui parametri di generazione del suono interni a un certo tipo di sintetizzatore
SYSTEM COMMON MESSAGES
| hex | bin | messaggio | dati | |
| F1 | 11110001 | non definito | ||
| F2 | 11110010 | 0hhhhhhh | Song Position Pointer | h=posizione |
| F3 | 11110011 | 0sssssss | Song Select | s=brano |
| F4 | 11110100 | non definito | ||
| F5 | 11110101 | non definito | ||
| F6 | 11110110 | Richiesta di accordatura | ||
| F7 | 11110111 | End of System Exclusive |
SYSTEM REAL TIME MESSAGES
| dati | messaggio | |
| hex | bin | |
| F8 | 11111000 | Timing Clock: il sistema viene sincronizzato su questo segnale, che viene inviato 24 volte per ogni metronomo |
| F9 | 11111001 | Non definito |
| FA | 11111010 | Start: fa partire l'esecuzione dall'inizio del brano |
| FB | 11111011 | Continue |
| FC | 11111100 | Stop: arresta l'esecuzione |
| FD | 11111101 | Non·definito |
| FE | 11111110 | Active Sensing: se viene ricevuto questo messaggio, il ricevitore si aspetta di continuare a riceverlo almeno ogni 300 ms, altrimenti il ricevitore suppone che la connessione sia interrotta e interrompe tutte le note attive. E' una rudimentale forma di handshaking |
| FF | 11111111 | System Reset: tutto il sistema viene inizializzato alle stesse condizioni in cui si trovava all'accensione >> |
SYSTEM EXCLUSIVE MESSAGES
| dati | significato | |||
| hex | dec | bin | ||
| F0 | 240 | 11110000 | 0iiiiiii | Identificazione: è un codice assegnato a ogni fabbricante (p.es: Yamaha 67) |
| (0*******) | Dati specifici, stabiliti dal modo di funzionamento del particolare strumento; qualsiasi numero di dati | |||
| F7 | 247 | 11110111 | EOX: fine del sistema esclusivo |
- Sequencer digitali
![]() |
Uso
dell'interfacciamento MIDI per controllare un sistema di
produzione del suono tramite un programma eseguito su un
computer. I programmi di questo tipo sono chiamati Sequencer |
Ormai è possibile pilotare un dispositivo MIDI di produzione del suono usando un programma di notazione musicale
Molto spesso un sintetizzatore MIDI multi-timbrico fa parte della dotazione hardware del computer (è un elemento della scheda sonora)
- Standard MIDI File
La sequenza di eventi musicali codificata tramite messaggi MIDI può essere memorizzata in un file usando un formato standard
Nei PC i file MIDI standard hanno estensione .MID
Formato dei dati: Big Endian
| Value | Variable-Length | ||
| Hex | Bin | Hex | Bin |
| 00 | 00000000 | 00 | 00000000 |
| C8 | 11001000 | 8148 | 10000001 01001000 |
| 100000 | 00010000 00000000 00000000 | C08000 | 11000000 10000000 00000000 |
Struttura dello header
| Offset | Length | Type | Description | Value |
| 0x00 | 4 | char[4] | chunk ID | "MThd" (0x4D546864) |
| 0x04 | 4 | dword | chunk size | 6 (0x00000006) |
| 0x08 | 2 | word | format type | 0 - 2 |
| 0x10 | 2 | word | number of tracks | 1 - 65,535 |
| 0x12 | 2 | word | time division | ticks per beat or frames per second |
Time division: se il bit più significativo è 0 allora i restanti 15 bit avranno il significato di tick per tempo (beat); se invece è 1 allora la divisione sarà in frame SMPTE al secondo.
Struttura della traccia
| Offset | Length | Type | Description | Value |
| 0x00 | 4 | char[4] | chunk ID | "MTrk" (0x4D54726B) |
| 0x04 | 4 | dword | chunk size | number of event bytes |
| 0x08 | track event data | |||
Da 0x08 inizia la lista di eventi che costituisce la sequenza (per quella traccia)
Meta-eventi
Sono eventi che non generano messaggi MIDI eseguibili ma servono per impostare parametri ad alto livello relativi alla sequenza (tempo, tonalità, etc.) o descrizioni (testo generico, Copyright Notice, nome dello strumento, etc.)
Formato:
| Meta Event | Type | Length | Data |
| 255 (0xFF) | 0-255 | variable-length | type specific |
Text Event
| Meta Event | Type | Length | Text |
| 255 (0xFF) | 1 (0x01) | string length | ASCII text |
Copyright Notice
| Meta Event | Type | Length | Text |
| 255 (0xFF) | 2 (0x02) | string length | ASCII text |
Sequence/Track Name
| Meta Event | Type | Length | Text |
| 255 (0xFF) | 3 (0x03) | string length | ASCII text |
Instrument Name
| Meta Event | Type | Length | Text |
| 255 (0xFF) | 4 (0x04) | string length | ASCII text |
Lyrics
| Meta Event | Type | Length | Text |
| 255 (0xFF) | 5 (0x05) | string length | ASCII text |
End Of Track
| Meta Event | Type | Length |
| 255 (0xFF) | 47 (0x2F) | 0 |
Set Tempo
| Meta Event | Type | Length | Microseconds/Quarter-Note |
| 255 (0xFF) | 81 (0x51) | 3 | 0-8355711 |
Key Signature
| Meta Event | Type | Length | Key | Scale |
| 255 (0xFF) | 89 (0x59) | 2 | -7-7 | 0-1 |
Time Signature
| Meta Event | Type | Length | Numer | Denom | Metro | 32nds |
| 255 (0xFF) | 88 (0x58) | 4 | 0-255 | 0-255 | 0-255 | 1-255 |
Formato di un generico evento MIDI
| Delta Time | Event Type Value | MIDI Channel | Parameter 1 | Parameter 2 |
| variable-length | 4 bits | 4 bits | 1 byte | 1 byte |
Delta Time è l'intervallo di tempo che separa l'evento dal precedente (anche se non esiste).
Il formato dei successivi byte è quello consueto dei messaggi MIDI così come sono usati dai sintetizzatori e con lo stesso significato. Ad esempio, se, nella sequenza, deve essere suonato un DO3 troveremo, nel file MIDI dopo il delta time, i tre byte 90h 3Ch 40h.
| Home |