DIY Floor controller and monitor

I’ve been a long time Gig Performer user and I use it primarily for guitar.

When I used real hardware I was never a guitar’n’amp kind of player and was always drawn to using lots of pedals. As soon as I moved to the digital domain I pretty much went to town with it and now use a whole stack of virtual pedals - plus multiple pre-amps, amps, and cabinets.

Gig Performer rapidly became the easiest way to manage all this but I really didn’t want have a laptop on stage with me - partly for the look (I confess) but also for the headspace it would put me in. I just didnt want to be in a trackpad-fiddling frame of mind while on stage.

So I built a floor pedal setup with a shedload of buttons to control it all. It’s Teensy-powered ( - so that means it’s like an Arduino and is programmed with C++ - and only needs a USB cable to get its power and to do all the MIDI stuff. I decided to put a screen at my feet and used a USB-powered monitor for that (it’s this one but I think there are better ones now:

I built it first as a prototype with a harness of wires to all the switches and LEDs but that was too risky for stage use so I made some PCBs through Aisler ( and rebuilt it.

USB will safely run 5m so I got Neutrik 5m cables (easily the best USB connectors for the stage) and they are long enough for me. The computer that drives this is a Mac mini in a rack that I place on a small keyboard stand but it could be anything you want to take on stage. A downside of not using a laptop is that I have to take a trackpad and keyboard with me just to boot up and control the Mac mini when I get set up - not a big problem in practice. I made a small sliding shelf in the rack for this.

In Gig Performer I have a button widget for each of the footswitches and these turn things on and off. Then using GP Script, I can easily get the state of each widget to be transmitted to the floor unit on activation of a variation. And the widgets naturally listen to the relevant footswitch just like they can to any controller.

I have three pedals - one for volume, one for wah and one that can be assigned to any plugin parameter per variation (e.g. reverb size or tremolo depth or speed) - again using GP Script.

The four buttons on the left hand end are used to switch rackspaces and variations (up/down for each).

I’m actually part way through re-thinking what buttons I use for waht - hence the masking tape labels on the floor unit. Gig Performer offers such great flexibility that it gets tempting to do this every so often! Perhaps one day I’ll add LCD displays to each footswitch so I can update the functions through GP Script…


This is extremely impressive @elucid. It’s right up my alley and I completely get your comment about the headspace with preferring to just have the footswitches and screen.

I confess I remember seeing this on the S-Gear forum a while back. So has it been a stable part of your setup for a few years now?

Wow - Great stuff!

A question on the Neutron USB - can the ‘D’ connector be removed so it can go straight to a PC socket rather than having to use a Neutrik D socket? I have a ‘D’ USB socket on my custom controller (which is getting there slowly…) and have looked at the Neutrik cables for the same reason but couldn’t work out if you can remove the end or not…

You have indeed seen an earlier version on the S-Gear forum. Like you (I think?), I am a confirmed S-Gear user! That version had fewer footswitches and was just wires inside (no PCBs).

So that was my prototype and in fact I had no problems with it but I was worried about its reliability so I decided to make it more rugged on the inside and added a bunch of switches while I was doing it. I also added multiplexing so it could in theory scale up pretty much indefinitely.

Code-wise it’s been rocksolid - the Teensy has been entirely stable.

It’s very important to get the right switches. Even something that looks the part is not necessarily very good at actually, you know, switching. I learnt that the hard way…

The connectors on the cable are firmly Neutrik D connectors with a USB A or B connector inside. The USB connectors in the chassis sockets are reversible so they can be either A or B. This means you connect inside the chassis using ordinary USB cables - no need for any soldering.

But I don’t think you can do what you are asking, no (if I’ve understood you correctly).

Tel us more about your custom controller!

Probably because of switch bouncing I guess… Did you use Schmitt triggers for the switches?

In fact I use software debouncing rather than going the hardware route. I tried lots of code (home made and other people’s libraries) but in the end I used this:

which is written to work with multiplexed buttons. Most libraries out there only work with Arduino-style pins. It works really well, too.

Actually the switch comment was more around mechanical reliability (not all switches reliably register a press, bizarrely enough. I’m using momentaries, by the way) and robustness (I’ve snapped some right off just by accidentally kicking them!).

1 Like

good lord, you just led me down a rabbit hole of reading about debouncing, which has no practical use for me at all, though i LOVE your floor controller. but that jack ganssle article on debouncing - hilarious!!!