Piccola guida al protocollo MIDI con Arduino UNO

MIDI con Arduino

Analizziamo il protocollo MIDI con Arduino, vediamo come funziona e come programmarlo attraverso il software.

MIDI, l’interfaccia digitale per strumenti musicali, è un protocollo utile per controllare sintetizzatori, sequencer e altri dispositivi musicali. I dispositivi MIDI sono generalmente raggruppati in due grandi classi: controller (cioè dispositivi che generano segnali MIDI basati su azioni umane) e sintetizzatori (inclusi campionatori, sequencer e così via). Questi ultimi prendono i dati MIDI e producono suoni, luci o altri effetti.

La forza del MIDI sta nell’essere completamente specificato e adatto allo scopo per cui è stato concepito e la maggior parte dei produttori lo ha adottato con quello spirito risultando in uno standard mondiale che è ancora in uso da oltre 20 anni dalla sua introduzione.  L’enorme numero di strumenti MIDI realizzati assicura che il MIDI non scomparirà o cambierà.

Come funziona

Il MIDI è un protocollo seriale che opera a 31.250 bit al secondo. La porta seriale integrata della scheda (anche sul Mega) può inviare dati a quella velocità.

I byte MIDI sono divisi in due tipi: byte di comando e byte di dati. I byte di comando hanno un valore sempre superiore a 127, quindi da 0x80 a 0xFF in esadecimale. I byte di dati sono sempre inferiori a 127 o da 0x00 a 0x7F in esadecimale. I comandi includono operazioni come note on, note off, pitch bend e così via. I byte di dati includono valori come l’altezza della nota da suonare, la velocità (o durata dell’impulso), il volume della nota, la quantità di pitch bend e così via. Per maggiori dettagli, vedere le specifiche MIDI o una delle numerose guide ai protocolli MIDI sul Web.

I dati MIDI sono generalmente annotati in esadecimale, perché i banchi e gli strumenti MIDI sono raggruppati in gruppi di 16.

Un esempio: controller MIDI

In questo articolo mostreremo come creare un controllore di eventi MIDI utilizzando Arduino. Ci serviranno i seguenti componenti:

5-pin DIN Connector

Tutti i connettori MIDI sono femmine, per definizione delle specifiche MIDI. Ecco come collegare il connettore alla scheda:

  • Pin 5 del jack MIDI collegato al pin 1 digitale tramite un resistore da 220 ohm
  • Pin 2 del jack MIDI collegato a terra
  • Pin 4 del jack MIDI collegato a +5V tramite un resistore da 220 ohm
MIDI con Arduino
Schema costruttivo

Il programma: MIDI.ino

Di seguito mostriamo un programma di esempio, che utilizza la nostra scheda Arduino come controller MIDI programmabile:

Questo programma mostra come utilizzare il pin di trasmissione seriale (pin 1) per inviare dati di note MIDI. Se questo circuito è collegato a un sintetizzatore MIDI, suonerà le note da F#-0 (0x1E) a F#-5 (0x5A) in sequenza.

Nel Setup() definiamo la velocità di trasmissione della seriale allineandoci alle specifiche MIDI (31250Hz). È anche possibile utilizzare la software serial per non occupare il canale di trasmissione hardware.

Il Loop() invece esegue un ciclo for() definito in esadecimale tra 0x1E e 0x5A (ovvero, rispettivamente tra i valori decimali 30 e 90, o le note FA#0 – FA#5). Ciascuna nota viene inviata attraverso il canale MIDI 1 (0x90) attraverso la funzione noteOn.

La funzione noteOn() richiede tre parametri: il canale (o comando), il valore della nota in standard MIDI e la velocity, ovvero una codifica che restituisce la dinamica del suono. La funzione non fa altro che scrivere sulla seriale questi tre parametri, che saranno inviati attraverso il jack MIDI opportunamente collegato ad un ingresso MIDI esterno.

Il Loop() provvederà quindi ad attendere 100 millisecondi, e ad inviare un nuovo comando per silenziare la nota precedente (comando velocity posto a 0x00). Ulteriori 100 millisecondi di attesa prima di leggere una nuova nota.

Attraverso questo semplice programma opportunamente collegato ad un MIDI box o ad un software, possiamo quindi definire le note di una melodia ed inviarle al controller per farle eseguire come un sequencer programmabile. Inoltre possiamo modificare le caratteristiche della nota attraverso i byte di comando.

Estensioni

Abbiamo semplicemente intaccato la superficie di questo tema, complesso e interessante. Possiamo infatti modificare il tipo di strumento suonato, l’espressione, il volume, inviare note su 16 canali contemporaneamente… ma la superficie di questo schermo è troppo ridotta per parlarne ora.

Se l’argomento vi interessa, se vorreste saperne di più su come utilizzare il protocollo MIDI con Arduino per fare musica, scriveteci!

Definire ciò che si è non risulta mai semplice o intuitivo, in specie quando nella vita si cerca costantemente di migliorarsi, di crescere tanto professionalmente quanto emotivamente. Lavoro per contribuire al mutamento dei settori cardine della computer science e per offrire sintesi ragionate e consulenza ad aziende e pubblicazioni ICT, ma anche perche’ ciò che riesco a portare a termine mi dà soddisfazione, piacere. Così come mi piace suonare (sax, tastiere, chitarra), cantare, scrivere (ho pubblicato 350 articoli scientfici e 3 libri sinora, ma non ho concluso ciò che ho da dire), leggere, Adoro la matematica, la logica, la filosofia, la scienza e la tecnologia, ed inseguo quel concetto di homo novus rinascimentale, cercando di completare quelle sezioni della mia vita che ancora appaiono poco ricche.

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.