mTroll Hybrid MIDI controller

(or How I Spent Summer 2007)
last update: 2018.05.06


More and more musicians are using laptops in their rigs. Wouldn't it be great to harness the power of those laptops to offer greater control capabilities than are usually available in MIDI foot controllers?

Well, yeah, if you're already using a laptop - but you wouldn't want to lose the flexibility that foot control offers either.

Enter a hybrid hardware/software MIDI foot controller. A hybrid system separates the physical interface from the control logic so that the logic can run on a computer. The logic, or engine, is more easily maintainable and updated when it runs as an application on a computer than as firmware in dedicated hardware.

Inspired by exhibits at Maker Faire, I've written a MIDI control engine and have an open source application available for download. And I've assembled a physical interface that is based on the monome logic kit.

Using the monome, you build your own MIDI foot controller but run the 'brains' of the foot controller on a computer. I'm currently running mTroll on an Asus eee PC Model 900 (Windows 7, single-core Celeron processor, 1GB RAM).

Neither the hardware nor the software requires a MIDI channel. The controller hardware is powered by the computer via USB, supports 64 physical switches, 64 LEDs, and 4 expression pedals.

If you aren't happy with current MIDI foot control offerings or just want to build one yourself, read on to learn more about my DIY MIDI controller.

read more

software overview
developer notes
parts list
process milestones
hardware pictures
software usage / notes
xml data file notes

software overview

(click to enlarge)

Unlimited patch count
Patches can send multiple MIDI messages of any length
Patches support Normal, Toggle, Momentary, Sequence or patchListSequence modes
Normal mode sends one of set MIDI messages when switch pressed, and a different set when another Normal mode patch is selected
Toggle mode sends one set of MIDI messages when switch pressed, and a different set when pressed again
Momentary mode sends one set of MIDI messages when switch pressed, and a different set when released
Sequence mode increments through a list of messages to send when a switch is pressed repeatedly (a toggle with more than 2 sets/states) (Dr. Z )
patchListSequence mode increments through a list of other patches when a switch is pressed repeatedly
Patch state is retained across bank loads
Meta-patch for resetting all patches loaded in a bank
Meta-patch for loading another bank
Native support for Axe-Fx processors (when used with MIDI In)

Unlimited bank count
Banks are simply mappings of patches to switches (physical or virtual)
Banks can address more switches than are physically present on input hardware
A single patch can be used in multiple banks or on multiple switches in the same bank
Multiple patches can be assigned to a single switch in any given bank (the first patch assigned to a switch in a bank owns the expression pedals, switch label and indicator)
Banks can be configured with load and unload patch states (optionally activate or deactivate particular patches at bank load or unload)
Support for default mappings (for instant access switch creation)
Support for defining exclusive switch groups per bank (for radio button functionality)

Expression Pedals
Support for four expression pedals
Each pedal can be configured globally and/or locally per patch
Supports minimum and maximum transmission values, value inversion and manual pedal calibration
Each pedal can be configured for one or two controllers (per pedal, up to 2 globals and 2 per patch locals)
Only one patch at a time has control of the pedals (in addition to the global control which can be disabled per patch)
Support for manual calibration
Support for virtual toggle footswitches at toe and/or heel positions
Support for multiple sweep response curves

Patch and bank settings are stored in plain text XML file (example)
UI is configured via an independent plain text XML file (example)
Same data file can be used with different UI files for display on different resolutions or form factors

Can be used without input hardware (using computer keyboard, and on-screen buttons and indicators)
Support for multiple MIDI out devices (one MIDI out assignment per patch)
Supports independent labels for each switch/button (Dr. Z )
Supports secondary functions per switch via long-press
User-definable LED brightness
LED state can be inverted (lit when off, unlit when on)


application software
mTroll (build 2018.05.06) a Win32 application.
Usage notes here.
To use with a monome board, you must install the FTDI D2XXX drivers (not necessary for operation without a controller).
source code
The application is released as open source software licensed under GPLv3.

mTroll projects have been setup at SourceForge and GitHub. Use the following to clone a copy of the repository:
git clone

The hosted repository includes my altered version of the monome firmware. It is also available as a standalone zip (updated 2007.11.04) (modified ADC port handling, see Expression Pedal Calibration). The original work is licensed under GPL, so my alterations are as well.


Bugs, comments, questions? Contact me.