What is MIDI

For all those who are not familiar with the MIDI protocol and who have come across this site out of curiosity, we decided to open a page to provide the basics to approach the world of MIDI controllers.


A really simplified introduction to understand MIDI on the fly.

A more detailed overview of the way in which MIDI messages are structured numerically and how they are read in an Arduino environment.

Use the MIDI_Monitor to see the data

The best way to quickly understand is the direct experience, so let’s try the MIDI monitor.

The MIDI_Monitor is a part of the DART_Editor, and it makes the incoming MIDI data readable and audible.

  • Run the DART_Editor.
  • At startup, choose the MIDI IN/OUT ports of your controller.
  • Any action on the modifiers is now producing…
    • a sound effect
    • and a flow of numbers in the MIDI_Monitor section.


Reading the 3 bytes of a MIDI message.

  • look at the section C and press a button of the DART controller.
  • a MIDI message is commonly transmitted in 3 bytes, as shown in the Raw_Data monitor.
    1. STATUS BYTE  
    2. DATA BYTE 1
    3. DATA BYTE 2
  • Get familiar with MIDI messages by turning knobs and pressing buttons 😉
  • More infos about the MIDI_Monitor are contained in the DART_EDITOR guide.

Content of a MIDI message

Let’s see what information contains a MIDI message in some of the most common cases:

In the example of  pressing a key on a digital piano,

a MIDI message, composed of three numbers, is transmitted as three bytes:

  • Status byte – it tells us that a NOTE is played or stopped and on which channel (16 channels are available).
  • Data byte1 – it tells us what the pitch of the note is.
  • Data byte2 – it tells us what intensity (velocity) the note has.

In the example of rotating of a knob on a midi controller,

many MIDI messages will be emitted one after the other for every slight movement of the knob. Each of these messages is  composed of three numbers, transmitted as three bytes:

  • Status byte – it tells us that a CC (Control Change message) has been emitted and on which channel (1-16).
  • Data byte1 –  it tells us what the number of CC is.
  • Data byte2 – it tells us what position (from 0 to 127) the knob has.

the content of a MIDI message can vary greatly according to the use of different types of control (a pitch bend wheel, a dj jog wheel, a percussive pad and so on).



During the experience of self-constructing MIDI devices it may be useful to know the numerical range relative to the Status Byte of the most important types of MIDI messages. Here is a handy summary table:


MIDI message Status byte
Note 144 – 159
Poly AT 160 – 175
Control Change 176 – 191
Program Change 192 – 207
AT 208 – 223
Pitch Bend 224 – 239

This guide is just an attempt to make MIDI messages easy to understand and it’s enough to just start playing with the DART framwork, but for a very deep knowledge about MIDI protocol, we suggets to read a detailed manual 🙂