Last updated:

JSFX Effects for MIDI Makey Makey


Makey Makey is a controller that emulates computer keyboard press/release and mouse events, in response to touch of conductive materials linked to the board thanks to electric wires. In simple words, it allows to do send a signal to a computer by touching a conductive object, another person, graphite, water, vegetables, bananas…

Because it is fun and easy to use, it became quite popular and is widely used in DIY crafting communities and tech learning workshops.

Almost two years ago, the lovely Mary offers me one of these Makey Makey controller for Christmas. What a nice gift! ❤

It was very fun to trigger samples from modeling playdough sculptures and other weird controllers. 😛

That said, I felt a bit limited with the kind of input it provides. Having keyboard and mouse input is good in a lot of situations, like for making a remote controller or a game controller, but really for building music instruments, for which MIDI signals are the norm to trigger musical events (from samplers,virtual instruments etc…) within a DAW.
Using Makey Makey in this kind of softwares requires the keyboard input have to be converted into MIDI data, which can be nicely done with software like FreePiano. But as that keyboard inputs can only be sent to the window in focus, and every time you touch another window than the one of keyboard to MIDI converter software, you lose that focus, and so, no the keyboard inputs are sent elsewhere, and no MIDI is sent. Worst, it may trigger undesired keyboard shortcuts, which is not very convenient. This does not happen with MIDI, which doesn’t require window focus (it works with a system of flow/routing).

The hing is that I realized few days ago that I missed something. And it was written on the Makey Makey box all this time!

As it is built on the Arduino Leonardo board (an affordable open source electronic circuit designed to be moded and extended), you can reprogramm its firmware as you want! The nice thing is that a certain MineMooder already coded a Makey Makey firmware to make it send MIDI data, and wrote a tutorial about using Makey Makey as a MIDI controller. Many thanks to him!

I followed the tutorial carefully, installing softwares to mod the Makey Makey, and to route the MIDI signals in a DAW. It was not that easy to make it work on both Windows and Mac but I ultimately succeed it. Exciting!

I started to play a bit with it. It was way more handy! And soon, another need appear. Indeed, changing the notes triggered by a connector requires to mod the Makey Makey custom firmware, and to flash the board with it, again and again. Not very flexible.

Sure, VST plugins to route MIDI notes to others already exists, but I didn’t find any platform-agnostic ones, and none of them were designed especially for Makey Makey.

That’s how I decided to built a MIDI effects set to be able to route and change MIDI notes signals properties coming out of a moded Makey Makey board on the fly within a DAW.

Why JSFX for MIDI Manipulation?

As my main DAW is REAPER, and as I did a lot of scripting for it already, I of course thought about JSFX right away. JSFX are MIDI-Audio effects used as script, which is perfect for simple usage like what I needed to do.

There is some advantages of using JSFX rather than standard DAW plugin format like VST:

  • Easy to program (less than 150 lines of code for each of the following scripts)
  • As the final effects is a script, the users can mod it to fit their own needs if they want to
  • You don’t have to take care of GUI if you don’t want to: sliders display is part of JSFX so they are really easy to define
  • Cross-platform
  • Can be use in other DAW than REAPER thanks to ReaPlug ReaJS, a free VST effect by Cockos
  • JSFX sliders can be automated

That’s how I came up with a set of plugins especially designed for MIDI based Makey Makey. It took me few days of learning, conceptualization, optimization, but I finally succeed to do what I had in mind.

Sure, ideally these scripts could have been merged into one single interface, but there is some limitations using JSFX sliders:

  • 64 sliders max (you have to you script a whole user interface yourself, which is kind of complex).
  • No vertical scrollbar if effect UI is to high (which is problematic especially on laptops)

Also, to make debugging easier, I forked the great MineMooder Makey Makey firmware so that it handles Note Off events. It also feature some small changes like the default velocity. I advice you to use my custom version if you planned to use my JSFX with your Makey Makey.

Effects List

Here are the JSFX I coded especially for Makey Makey MIDI workflow. Note that they work based on the MIDI root note used by original MineMooder firmware. Be sure to respect the signal flow (aka, don’t put the note mapper in front of the other JSFX). All of them are optional, you can use only those that you need.

As you will see, all sliders have the name of the physical input of the Makey Makey, which make them quite handy to use!

Monitor Makey Makey input.
First, monitor Makey Makey input.
Map velocity of each inputs.
Map velocity of each inputs.
Map channel for each inputs.
Map channel for each inputs.
Map notes for each inputs.
Finally, map notes for each inputs.

You can of course create your own effects presets..


Here is a demo of these JSFX using:

All of these could be freely downloaded for free!

( What a well-crafted controller. 😛 )

Other Useful JSFX

Other JSFX are especially useful for MIDI Makey Makey workflow:

  • Fixed MIDI Note Length (native), prevent too close notes to be sent. Useful to avoid indesired quick note repetions.
  • X-Raym_MIDI Note to CC (from X-Raym’s REAPER-ReaScripts repo), can help you map a MIDI Note to a MIDI CC event.
My custom single MIDI note to CC JSFX. If needed, a full CC mapper with all Makey Makey input could be coded.
My custom single MIDI note to CC JSFX. If needed, a full CC mapper with all Makey Makey input could be coded.


Do you want to enjoy these JSFX and the joy of routing your banana piano notes on the fly in your DAW?

Go check the GitHub of the project to see how to install them. It features detailed instructions on every steps of the process.


I hope you enjoyed this tutorial and that it will help you to make great projects!

Cheers 🙂