Playing in a 2 piece band, with the drums and lots of other samples being played back as backing tracks, there was a need to use a looper to add in more elements to the tracks. A hardware based looper fails in this respect, since there is no way to maintain synchronisation. Meaning, slight discrepancies between triggering the start loop and end loop, even if it's ever so minute, will add up as the bars progress, and since there's no drummer to adapt to the loop, it will eventually run off time.

Thus, a software based looper is the way to go. Not just because you can maintain tempo based synchronisation on the DAW software that you're hosting the plugin, but also because most of these software loopers are free, and more functional than a hardware looper could ever be.

There are quite a few to choose from:

Since your arms are occupied with the daunting task of playing an instrument, you need to control the parameters of the looper through your foot. This is where the midi foot controller comes in. If you aren't familiar with what MIDI is, here an article.

Many midi controllers are available in the market, and the Beheringer FCB1010 is one of the most popular ones out there. But the perks of building you're own are:

  1. Cost: you can build one for 1/8th the cost of a commercially available one.
  2. Customization: You can build a controller as per your requirement. This controller has the specs that I want, your needs maybe different. This instructable is thorough enough to act as a guide for a generic midi controller, rather than being confined and limited to someone else's project.
  3. It's USB bus powered, there is no need for an external power supply.
  4. And the perk which is often ignored the most, it's fun ! You get to learn something new, and you'll have something to show for your efforts by the end of it.

The concept is quite simple and straightforward. You press a button, the arduino interprets the signal arriving from the button as a midi "control change" signal (typically represented as MIDI CC), and this signal can be mapped to respond to any of the parameters of the looper.

Step 1: Getting Started..

This project can be done using any micro-controller based on the arduino architecture. I chose a Teensy 3.1. The reason for this has been elaborated in this article.

Hardware list:

  • Arduino
  • Momentary switches
  • 10k resistors
  • 1k potentiometer
  • Tapered LED
  • Resistors for LED
  • 2X16 LCD Display
  • USB Cable Micro-B
  • Breadboard (for prototyping)
  • Perforated board
  • Jumpers and wires

Software list:

Tools and misc:

  • Power drill
  • Jigsaw
  • Soldering iron, solder, flux
  • Scraps of plywood
  • Plate of Aluminium

Skills required:

WARNING: This tutorial involves the operation and usage of power tools, which when handled improperly, may lead to injury, and in ridiculously dumb circumstances, fatality. If you've never used power tools before, go to your neighborhood workshop and ask for assistance. If you are under 18, supervision is strictly required. I shall not be held accountable for any losses that a user of this instructable may sustain, either financial, physical or mental(??).

Basic electrical skills such as soldering, is required.

Coding skills are optional, you are provided the code. But it's advisable to have a background in C/C++ to be able to modify and change parts of the code according to your requirements. For anyone with a background in coding, Arduino programming is very simple and straightforward. Here's some material that can help you get started with arduino programming.

I'll split this tutorial into four parts:

1) Prototyping with a couple of inputs

2) Hardware build

3) Assembly, and basically putting it all together

4) Operation

Step 2: Prototyping

Before you start off with the main build, it's much more convenient to test out the design and see if everything is working. So for this stage, we will set up 2 switches with the Arduino, on pins 0,1 as INPUT, and 2 corresponding LEDs for notification on pins 2,3 as OUTPUT. A 16X2 LCD Display can also be included in the circuit. Generally, an LCD display of this sort has 16 pins. Heed to the order of the pins, numbers 1 and 16 are usually printed as a guidance. The pinout for the LCD display as as follows:

  1. Ground
  2. Supply voltage for logic ( +5v supply )
  3. Operating voltage for LCD contrast ( middle pin of potentiometer )
  4. Instruction code ( pin 19 on teensy )
  5. Read/write signal ( not connected )
  6. Enable signal ( pin 18 on teensy )
  7. Data bus 7 ( not connected )
  8. DB 6 ( not connected )
  9. DB 5 ( not connected )
  10. DB 4 ( not connected )
  11. DB 3 ( pin 17 on teensy )
  12. DB 2 ( pin 16 on teensy )
  13. DB 1 ( pin 15 on teensy )
  14. DB 0 ( pin 14 on teensy )
  15. Ground
  16. Power supply for LCD ( +5V supply )

A Fritzing diagram is as shown.

- A 10k resistor is used with the switch as a Pull-down resistor. Meaning, whenever the switch is not toggled on, it is pulled to the ground, so that it is not affected by erroneous noise signal which may be present due to other active devices. Simply speaking, when the switch is off, the resistor ensures that it is off. Any value from 1k - 100k will do.

- Choosing the resistor value for your LED. The following tutorial explains how you can choose the resistor value for the LEDs you have.

There is another way to determine the required resistance. Use a 10k potentiometer, connect one wire from from the longer edge of the LED to the wiper, or middle pin of the pot. Connect a wire from either of the pins of the pot to one of the digital pins on the arduino. Now rotate the wiper till the LED glows sufficiently bright, then measure the resistance across the pins using a multimeter. This is a raw estimate of the required resistance.

Always use an LED with a resistor. An LED glows the brightest without one, but since there is nothing limiting the current from the arduino to the LED, the entire available current is transferred to the LED, which will ruin it in the long run.

Once the circuit is done, connect your arduino to your PC using a USB cable. Follow the instruction below, if you've never used an arduino before. This basically explains how to compile and upload an already existing code(or sketch, as they call it) onto your arduino.

Also, remember to set the device as a midi device.

Select "MIDI" from Tools -> USB type.

The code for this prototype is uploaded below. It is thoroughly commented and is self explanatory.

Now, we test if the circuit and code are functional.

Press both the buttons, do the corresponding LEDs light up ?

To test if the computer is actually receiving any MIDI signal from the button you just depressed, you need the software, MIDI OX, installed.

In MIDI OX, go to Options -> MIDI Device, and select your device. Mine shows us as Teensy MIDI.

Whenever, you press and release a button, an output similar to this should show up. Are you getting a similar output ?

If everything goes fine, we conclude that all the components and code are working fine, and we can move on to building an enclosure for the project.

Step 3: 2) Hardware Build


For my Midi footswitch project, I used scraps of available plywood, around 10mm in thickness, for the base and the sides of the enclosure. Cut out pieces to make an enclosure of dimensions 70 X 13 X (10,6) cm. To align everything in place, we need to cut out box joints or finger joints on the edges of the work pieces which fit together. The following material explains what box joints are and how you make them.

Cutting out box joints precisely, by hand, is painstaking work. If you have router table, a very simple box joint jig can be fashioned and the job can be done in a jiffy. Since I do not have a router table or any workbench for that matter, I had to resort to doing it by hand.

Regular Butt joints, and just nailing the wood pieces together will NOT give it enough structural strength required to sustain hours of being stomped on!

After it's finished, it should look something like this.

I nailed the bottom base piece to the rest of the contraption, and filed off protruding edges of the box joints, and I glued the joints together using wood glue. I had some laminate material left over, so I cut out piece of it, and stuck it on to the outer surface to make it look nice !

Metal work

For the piece that goes on the top, I could only use a maximum of 5mm thick wood, since the groove on the LED to be screwed in, allowed only that much. I decided to use an aluminium plate instead. The plate that I used is about 3mm in thickness, and has a sort of honeycomb pattern on it (which I thought was pretty cool).

I cut out the exact dimensions to fit the box that we've made, using a jigsaw and metal cutting blade. To cut out the holes to encompass the switches, the LEDs, the LCD display and to fasten screws, I used 2 drill bit sizes. A 12/32 inch bit for the switches, and a 8/32 inch bit for the LEDs and screws. For housing the LCD display, I marked out the rectangular dimensions on the plate, drilled two holes on opposite sides and used a jigsaw to cut a rectangular slot in the plate.

Step 4: 3) Assembly

The circuit design is fairly simple and straightforward. I haven't provided a circuit diagram for the entire build, but it should be easily deducible from the diagram included for prototyping. It's very easy to build it, but make sure to manage the wires neatly, because there are going to be a lot of them, and it could get messy ! Also best practice dictates that you colour code the wires, red for +5V supply, black for ground, one colour just for the switch inputs, and one colour for the LED inputs, so that you can easily differentiate them and diagnose a problem if necessary.

Drill out a small hole for the USB cable. For this, mount the perf board onto the wooden base, and then mark out a section in the wood, where the cable needs to come through. My slot grew wider due to measuring inaccuracies, but I just filled it with some M-seal to make the extension sturdy.

This is it, time to upload a fully functional sketch(code) into your arduino. There are two sketches you can download. The first one is the sketch to my midi controller. Choose this, if you're building something similar to what I've build. The second sketch is a generic midi controller sketch which can extend many midi functionalities through USB, such as control change messages, note on/off values with velocity, continuous control change messages for analog pots, and even for touch sensitive pins.

Step 5: 4) Operation

Now that your controller is fully functional, let's get to the task at hand,

programming it to control our software looper, Mobius. I have used Reaper as my DAW host software, your's maybe different, but the same steps apply.

1) First, go to Options > Preferences. Go under MIDI device. Enable your arduino device's input, output and control. Mine shows up as Teensy MIDI.

2) Create a track, and load the VST Mobius.

3) Create another track, this is going to be your instrument track. Arm the record button. It can either be an audio track for recording guitar, or a midi track for recording a sampler or a VSTi. We need to route the output of this to Mobius. Click on the I/O button and drag it on to the Mobius track. Click on I/O button again and disable master/parent send. We do this, so that we hear audio just from the Mobius track, and not from the instrument track; the instrument track is dummy, just for capturing input.

4) Create another track, this is going to be our control track. Drop down the input selection to this channel, select 'Input: MIDI' -> 'Teensy MIDI' -> 'All channels'. This makes it a midi track. Enable Record Arm and enable Monitoring. This is important. Now drag the I/O button on to the Mobius track.

5) Open up the Mobius VST. Go to 'Configuration' -> 'Midi devices'. Select your midi device from Plugin Input Device and Plugin Output Device.

6) Now we need to map the buttons to a specified function. Go to 'Configuration' -> 'Midi Control'. Select a function you like, say Record, check the Midi Capture box. Press a button on your MIDI controller that you want to assigned. There should be corresponding parameters that should be displayed, something like 'Channel 1 Note 67'. Press the 'New' button to finalize the assignment.

This is how my buttons are assigned:

  1. Record
  2. Overdub
  3. Next Track
  4. Previous Track
  5. Reverse
  6. Mute (current track)
  7. Global Mute
  8. Global Reset
  9. Undo
  10. Redo

This is the layout that I'm comfortable with, you can assign other functions where you see fit.

You should be ready to go. Give it a try and spend some time to figure out the software's features and details, it has a learning curve.

Step 6: Concluding...

There you go, a satisfying build if you're an amateur DIY enthusiast. If you've got any questions whatsoever, just post a comment below, and I'll be sure to answer your queries. Below is a video of a demonstration of the midi footswitch, of me playing Sigur Ros's Hoppipolla, showing the core features of Mobius.

Also, it would be great if you can check out my Soundcloud page. I post a lot of my tracks there, all free to download, ranging from Post-rock and acoustic to progressive.


Happy surfing !

Hi . Great tutorial. I have an old misi foot controller that wont pur out a MIDI signal. Therefore it has all the switches in place and i was hoping to for a teensy or arduino and LCD screen. My question is this, does the teensy/arduino put out a midi signal thatbi can use to control my FX processors? If not how would I get it to (if it's possible)?<br>I hope this is bot a stupid question but my expertise is in the fabrication but programming etc is not.<br>Thanks in advance. Ian
<p>Hey there, thanks you! </p><p>I'm not sure I understand why you would need a midi controller to control your FX pedal, since the FX pedal itself can be controlled by your foot. What is the need for an additional layer of indirection? Do you perhaps have an FX pedal without foot controls? </p><p>In either case, this is possible, but there is no easy way to do it. Let's explore:</p><p>You write you code for the midi controller in C Language, and your computer recognizes this as a midi controller. Fine and good. Your processor however might be coded in another language or might be using its own proprietary language. So it's difficult to know if they can inter-operate. Also, there is the question of connecting the devices in the first place. How would you connect your midi controller to your FX processor? Your processor might have a USB Out which can be used to connect to an output device (your computer). But your midi controller is an input device and FX processor won't recoginze it, even if you manage to connect them.</p><p>There is a situation where this may work. It depends on your processor. I have a Boss GT-10, and this has a software such that I can connect my processor to a computer, run the software and control my GT10 through the computer. In such a situation, you can connect your midi controller to the same computer, and control the software which inturn controls the processor. Sounds tricky! But I don't see a way around it.</p><p>Let me know if you've got any more questions!</p>
Hi, sorry but i dont think i explained very clearly. I was asking how easy it would be to integrate the teensy into the faulty foot controller (replacong the faulty parts) and have it send the MIDI signals to the rack FX etc. I have a Behreinger FCB1010 at the moment but find it limiting (and too big as i dont need the expression pedals (and had thought of cutting that end of the unit off!)). The faulty Nobels MF2 i have is a better size (and build) and is ready built with all the switches ( and expression pdal inputs should i need them later) my only (?) Job would be to integrate the teensy and code it. What is the limit of the amount of switches etc i could connect to the teensy- the MF2 has 12switches and 4 input sockets for expression pedals. I hope this is clearer. Ian
<p>Ahh, my bad! This makes more sense. Yes you can definitely integrate a Teensy to your faulty midicontroller. You can strip out all the circuitry and just leave the switches in place. I'm guessing these are SPDT switches, even DPDT's are fine. You need to use the ground and Normally Open terminals of the switch. You can follow the rest of the tutorial for everything else. The Teensy 3.1 has 33 digital pins, and hence can accommodate 33 switches! So you are covered. If you are ever using Expression pedal port, you need to connect those to the Teensy's analog pin, but hopefully you are not going to be doing that, this tutorial doesn't cover that. </p><p>Let me know if you've got any more questions!</p>
<p>hi, I'm trying to do it using teensy 2.0 but I can not match the pins. you have any suggestions? many thanks, bye</p>
<p>Hey there, sorry for the late reply!</p><p>It doesn't matter which Teensy you have, or which arduino based micro controller you have, for that matter. You just need to connect your components to dedicated digital pins on your micro controller. On the Teensy 3.1, all the pins that I have used are digital pins, as you can see in one of the pictures above (Step 2).</p><p>Attached, is a pin out diagram of a Teensy 2. As you can see, 0 - 10 are digital pins, and you can use any of them for connecting your switches or LED's. You might want to exclude the LCD display since you do not have a lot of pins available on your Teensy 2. </p><p>Let me know if you've got any more questions! Cheers.</p>
<p>SUCH a good tutorial! I especially appreciate the video walkthrough on how to connect reaper to Mobius! </p>
<p>This is awesome. I wish I had this tutorial a year ago... I've built something really similar. I'll post a basic instructable and refer people here for more details.<br>Mine has a few differences as you can see in the photo. I don't have a screen, just two leds for feedback. <br>I have four states that I can select. <br>1. Midi controller assignments (for mobius etc.)<br>2. Midi note assignments. (Key of C with Transpose up, down and minor buttons)<br>3. Piezo electric drum inputs from jacks on the back<br>4. Room for ideas and expansion (likely a distance sensor and two pots doing a range of things depending on other buttons pushed)</p>
<p>Thank you ! :) That's quite a cool project you've done aswell. Serves as a multipurpose midi utility box. I especially like the idea of a seperate breakout box, the Teensy has many inputs to spare, why waste them right ! :D </p><p>But I've got a question, if you're using an electronic kit, the module itself should generate midi note values foreach of the triggers. Are the triggers bypassing the teensy ? Or are you usingcustom made triggers, and using the electrical signals generated from the piezo trigger and fed it into the Teensy to act as a custom module ?</p>
<p><a href="https://www.instructables.com/id/USB-Midi-Foot-Pedal-and-Drumkit/" rel="nofollow">https://www.instructables.com/id/USB-Midi-Foot-Peda...</a><br>Here is the idea. I've made custom triggers with piezos and I just have jacks in the back and a jack on the triggers, so they can be plugged in the back via a standard guitar cable.</p>
<p>This is pretty sick! </p>
Thanks man!
<p>Nice project, thanks for sharing!</p>
Thank you ! :)<br>

About This Instructable




Bio: An audiophile, a guitarist and a DIY enthusiast. I like learning new stuff and experimenting. Check out my SoundCloud page to know more: https://soundcloud ...
More by Thrifleganger:Teensy MIDI USB foot controller for controlling Mobius Looper 
Add instructable to: