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.
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 Songs Piano Exercises
- Medeli SP4200 Connectors
- Medeli SP4200 Using Yamaha Styles
- Medeli SP4200 Voices Analysis
- Medeli SP4200 MIDI Controllers
- Medeli SP4200 Pros and Cons
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 BLERP||Acts as the MIDI-over-BLE link mentioned above||C++||Arduino, BLE Shield, MIDI Shield|
|MIDI Control||Uses the buttons and knobs on the Arduino MIDI Shield to provide a similar but self-contained controller||C++||Arduino, MIDI Shield (with knobs and buttons)|
|MIDI Echo||Plays back notes after set delays and possibly with other instruments and other (usually lower) velocities||C# and C++||Netduino and Arduino, MIDI Shield|
|MIDI Logger||Logs incoming MIDI message on the screen||Python||PC or Raspberry Pi|
|MIDI Remote||Uses an IR remote control receiver to control a sequencer via Play, Stop, Pause, Forward, Backward etc||C++||Arduino, MIDI and IR sensor on Proto board|
|MIDI Theremin||Uses an IR distance sensor to send MIDI Control Change messages based on the distance||C++||Miduino, IR distance sensor, knobs, buttons|
|MIDI Touch||Uses a Nintendo touchpad to send MIDI Control Change messages (one for X, one for Y) based on where the finger touches||C++||Arduino, MIDI Shield and Miduino|
|MIDI Test||Acts as a web server for inputting MIDI messages to be sent via MIDI||C#||Netduino, MIDI Shield|
|MIDI LAN||enables sending MIDI data via Ethernet||C#||Netduino, MIDI Shield|
|MIDI USB||Acts a MIDI USB node for controller data||C++||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