mTroll Hybrid MIDI controller

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

introduction

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 (the extremely slow 16GB SSD model).

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
download
developer notes
parts list
process milestones
hardware pictures
software usage / notes
xml data file notes
contact

software overview

screenshot
(click to enlarge)

Patches
Unlimited patch count
Patches can send multiple MIDI messages of any length
Patches support Normal, Toggle, Momentary or Sequence 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 )
Patch state is retained across bank loads
Meta-patch for resetting all patches loaded in a bank
Meta-patch for loading another bank

Banks
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 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

Configuration
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

Other
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 )
User-definable LED brightness
LED state can be inverted (lit when off, unlit when on)

download

application software
The current version of the Win32 application requires the Qt 4.4.1 libraries (and VS2008 dependencies) (built 2008.11.02). The Qt libraries are downloaded separately from the app since they are bulky and not likely to change as often as the app. Extract the contents of the Qt zip file to the application directory.

mTroll (build 2010.01.03) a Win32 application (no installer; just unzip and run - configuration is done via the included XML files). Usage notes here. Don't forget Qt too if you have not already installed the 4.4.1 binaries.

To use with a monome board, you must install the FTDI D2XXX drivers (not necessary for standalone operation).
source code
The application is released as open source software licensed under GPLv3. The source code for the Qt port is available here (archived 2010.01.03).

My altered version of the monome firmware (updated 2007.11.04) is included in the application source download (modified ADC port handling, see Expression Pedal Calibration). The original work is licensed under GPL, so my alterations are as well.

My Win32 C++ implementation of a monome serial protocol handler (updated 2007.11.03). Licensed under the zlib/libpng License. (A version for Qt is included in the application source download.)

contact

Bugs, comments, questions? Contact me.