Skip to content



MIDI or Musical Instrument Digital Interface is a ubiquitous standard for how to control musical instruments digitally and has been improved over time, way beyond it’s humbe beginnings. It’s now supported via numerous communication links including the original 31.25 kbps interface, USB, Wi-Fi and BLE.

You find everything MIDI-related at the source: MIDI Association. All specifications are here: MIDI Association – Official MIDI Specifications. Specifications are free, but you need to register and you are not allowed to publish them elsewhere.

Suggested reading list if you are new to MIDI:

  • What Is MIDI? that tells the history of electronic instruments and MIDI.
  • MIDI 1.0 Detailed Specification for an overview of possibilities.
  • General MIDI 2 Specification for what most keyboards, synthesizers and pianos support today.

Medeli SP4200 Instructions

I own a Thomann SP5600, that’s a re-branded version of Medeli SP4200, a digital piano that’s sold under a number of brand names. These instructions were written to help me better understand how to use this instrument, in part because the owner’s manual is at times not very helpful. The document also describes how to communicate with it via MIDI (see page 13). It’s written with other users in mind and follows the sections of the Owner’s Manual closely.

Medeli SP4200 Instructions


Other Medeli SP4200 documents


To add controllers to the SP4200 (and similar non-synth GM(2)-compatible instruments) I made a mobile application called MIDIPads and a simple Arduino application that provides multiple controllers using the phone screen as numerous independent pads that can be reconfigured easily in code. It’s currently relying on an Arduino as the MIDI-over-BLE link, so it’s not for general use (yet).

MIDIPads Principle



Except for the above smartphone controller solution I’ve made a couple of other MIDI projects over the years, not the least:

MIDI BLERPActs as the MIDI-over-BLE link mentioned aboveC++Arduino, BLE Shield, MIDI Shield
MIDI ControlUses the buttons and knobs on the Arduino MIDI Shield to provide a similar but self-contained controllerC++Arduino, MIDI Shield (with knobs and buttons)
MIDI EchoPlays back notes after set delays and possibly with other instruments and other (usually lower) velocitiesC# and C++Netduino and Arduino, MIDI Shield
MIDI LoggerLogs incoming MIDI message on the screenPythonPC or Raspberry Pi
MIDI RemoteUses an IR remote control receiver to control a sequencer via Play, Stop, Pause, Forward, Backward etcC++Arduino, MIDI and IR sensor on Proto board
MIDI ThereminUses an IR distance sensor to send MIDI Control Change messages based on the distanceC++Miduino, IR distance sensor, knobs, buttons
MIDI TouchUses a Nintendo touchpad to send MIDI Control Change messages (one for X, one for Y) based on where the finger touchesC++Arduino, MIDI Shield and Miduino
MIDI TestActs as a web server for inputting MIDI messages to be sent via MIDIC#Netduino, MIDI Shield
MIDI LANenables sending MIDI data via EthernetC#Netduino, MIDI Shield
MIDI USBActs a MIDI USB node for controller dataC++Adafruit Feather 32u4, sensors

Long before this (1986?) I made a MIDI board for the proprietary system we used at my first job (Axis Communications), as well as the basis for some of the above projects, then developed in C for running on a PC.


  • Investigate and implement new ways to communicate MIDI, not the least follow the specification for MIDI over BLE, to make MIDIPads and other MIDI apps independent of an Arduino as a link. Also USB over MIDI is of course interesting for that.
  • Using Python on a PC or Raspberry Pi for MIDI control. Then primarily through USB for the best performance / least latency.
  • A pipe dream is to develop new types of controllers that are practically useful by many. A few options I’ve considered:
    • a commercial version of MIDIPads that communicates BLE MIDI directly to any instrument that supports it
    • a proper theremin that looks like one, with both note and volume using portamento etc
    • a hand gesture controlled 1D, 2D or 3D controller with multiple different controls available simultaneously using a phone’s camera and one hand
    • a facial gesture controller, either using a camera or close to invisible stretch sensors
    • a controller with multiple physical pads, strips, switches for better tactility
    • a controller with pressure-sensitive pads, so that pitch, modulation etc can be controlled by light pressing instead of a (rather impractical but traditional) wheel
    • a breath controller for primarily modulation or filter effects
    • a vest-based controller using sewed in sensors
    • etc