Custom MIDI controller for a live, VST based Guitar and Tracks rig

Similar projects worth following
Over the past couple of years I have been experimenting with a VST based live Guitar rig. In order to bring this to full usefulness it requires a MIDI controller for switching FX and patches on the fly. At the same time I also need a MIDI controller to run backing tracks and clicks. But no MIDI controllers exist which do what I want them to do.


A custom, dynamic MIDI controller based specifically around controlling a VST based guitar rig in Deskew GigPerformer, and running backing tracks and clicks in Ableton Live 10.

This controller will give a huge amount of control and display feedback in a single foot controller to allow me to get on and play with minumum amount of setup or hassle.

(in case you were wondering, STJØRN means 'control' in Icelandic)

The 'issue' with commercially available MIDI controllers is that whilst they are generally all very flexible, they are flexible in a universal way. Whilst this makes them useful for a wide range of use cases, it doesn't make them as useful for particularly specific use cases.

This is why I ended up starting the STJØRN project - to create a MIDI controller that would do what I want it to do in the way that I want to do it.

Key Features

  • Based on the Teensy 3.2 microcontroller
  • Housed in a 'reclaimed' Line 6 FBV Shortboard chassis
  • Three 'modes' of operation
    • Song > Control of Ableton Live and/or Loop Community Prime for control of tracks and clicks
    • Rig > Control of Gig Performer for switching VST based guitar amp/FX modelling patches
    • Looper & Pads > Control of a live looper - using Ableton's Looper - as well as triggering of soft-synth pads in any key
  • 8 assignable soft-click footswitches per mode
    • Depending on the mode, footswitches have access to short, long, and double press as required
  • RGB LED per footswitch to show current state
  • Quick access 'next song' button 
  • Bright, clear, 14-segment based LED screen for display of song, rig, and tracks info
  • Built in expression pedal
    • Expression pedal changes control output depending on mode, e.g. in Rig it controls a virtual volume pedal in the Gig Performer rig, in Song it controls tracks volume, etc
  • USB MIDI connection to host computer
    •  to communicate with Ableton Live (including custom MAX for Live patches), Gig Performer, and Lemur and OnSong on iPad via Bluetooth MIDI or WiFi OSC (both hosted on computer)
  • Built-in, relay based microphone switcher
    • For use of a single microphone to feed both front of house vocals and band talkback
    • Relay based switching allows footswitch to also trigger other actions if required, or for an external controller to trigger the mic switcher
  • 2 additional soft-click footswitches for control of OnSong (iPad based chord chart app)
  • External expression pedal input for additional control
  • 'Expansion' port based on i2c using Sparkfun Qwiic differential connector
    • This will allow future expansions such as a hardware FX switcher, additional footswitches, remote screens, etc

Adobe Portable Document Format - 220.93 kB - 06/06/2020 at 12:41


Zip Archive - 561.09 kB - 06/06/2020 at 12:40



Stripboard layout for relay activated mic switcher circuit (see project log for details) for use in DIY Layout Creator

diy - 840.19 kB - 05/22/2020 at 07:51


  • 1 × Line 6 FBV Shortboard Or whatever enclosure - I picked this as it already has great ergonimics of switch and screen placement for what I wanted so why build my own!
  • 1 × PJRC Teensy 3.2 'Arduino' microcontroller - fast,plenty of memory, a tonne of versatile pins, and built-in USB MIDI made this an easy choice of controller to base STJØRN around
  • 1 × Neutrik NC3FD-LX Femal XLR + MFD mounting frame And this is for the microphone input
  • 1 × NME0505SC 5V-5V DC-DC Converter This will be used to provide an isolated +5V and GND for the audio circuit
  • 1 × Talldog Teensy 3.2 breakout A great breakout board for the Teensy that allows access to all of the 'underside' pins, plus some handy mounting points

View all 31 components

  • [Component Choices] All things i2c

    mark.braith06/29/2020 at 13:02 0 comments

    i2c - along with SPI - are two protocols that allow communication between controllers. I2c (inter-integrated-circuit; it’s pronounced I-squared-C I believe) is a simple to use protocol allowing two way communication between a master device and multiple minion devices. These devices can be any sort of circuits -  sensors, actuators, even other Arduino’s - and each can receive data from or send data to the master device. All this is achieved with just two wires; a data line and a clock line. 

    I won’t go in to much more detail here, but check out Sparkfun’s great guide to i2c for more info.

    As already mentioned in the project log on the displays chosen for this project, I had chosen to use Adafruit’s 14-segment alphanumeric backpacks which communicated with the micro-controller using i2c. As such I was already setting up an i2c bus and so it was easy to integrate some more devices in to STJORN.

    Proximity Sensor

    One of the main reasons I went for the Line 6 enclosure is that it had a built in expression pedal, meaning I didn’t have to drag along a separate unit when I wanted volume or Wah control. I had, perhaps naively, assumed this was controlled with a potentiometer of some sort, but on opening the Line 6 controller up I discovered it actually used an IR based proximity sensor. Initially I tried to work out if I could somehow rig the pedal up mechanically to a potentiometer but after realising that could end up quite complex, I started to look for a way of using a sensor instead. My first though - coming from an automotive engineering background - was possibly a Hall effect sensor with a magnet mounted to the proximity ‘arm’ on the back of the expression pedal. This would undoubtedly have worked, but my searching lead to a better solution - Adafruit make an IR based proximity sensor board which would essentially replicate what the pedal was already designed for. 
    This board incorporates the IR LED, the receiver, plus all the associated electronics to send the data from the receiver over i2c to the micro-controller. Along with the library that goes with it, this means that in the program it is simply a case of requesting the current proximity and you get a nice, unitless, value back to work with. Easy peasy.

    Rotary encoder

    This was a very last minute addition when, on removing the PCB standoffs from the Line 6 enclosure, I inadvertently made an ‘additional ‘ hole in the enclosure,... The hole was fortuitously located and so I decided to fill it with a rotary encoder. I had previously thought about having some sort of menu system and with the addition of the encoder this would be possible.
    The encoder I chose was the Sparkfun Qwiic Twist. This little board mounts an ‘endless’ rotary encoder which incorporates a push button (by pushing down on the encoder knob) and also an RGB LED so that, along with a clear knob, the encoder can also be used to display information in colour. 
    All of this connects over i2c and the associated library spits out how many ‘ticks’ the encoder has moved so that readings can be made easily, and allows very simple control over the RGB colour. 
    The ‘Qwiic’ part of the name of this board refers to a connector system Sparkfun use - it is a very small, push fit connector - you can just see on the right of the board above - that can be used to link multiple boards by carrying the data, clock, ground, and power between them. The board also incorporates normal solder points for these signals, but the connectors make it very easy to use, especially for prototyping.

    I2C Differential Breakout

    This, again, was a last minute addition and came about by accident whilst browsing through Sparkfun’s ‘Qwiic’ catalog after choosing the encoder board above. Having an RJ45 shaped hole in the STJORN enclosure I had nothing to fill with the sight of an RJ45 connector sparked my interest. On closer investigation this little board would open up some great expansion possibilities.
    Read more »

  • [Component Choices] Light-up Bits

    mark.braith06/29/2020 at 12:19 0 comments

    Adafruit’s ‘Neopixel’Along with plenty of footswitches to control a modelling rig, a good foot controller also needs some appropriate light-up bits to give the user feedback on what’s happening.

    For STJORN, feedback from the software is displayed in two ways - RGB LEDs and Alphanumeric displays.

    RGB LEDs

    The most basic way of signalling feedback is with a simple LED to show an on/off status. A more interesting form is using an RGB LED to not only be able to show status with on/off but also by colour, and this is the route I decided to take for STJORN.
    The simplest form of an RGB LED is the four lead variant - these have either a common anode or cathode, and then 3 of the opposite; one for each colour; effectively three LEDs in a single case. By activating each LED you can obtain a mix of red, green, and blue. Simple to achieve but has some downsides - this form is only capable of producing 7 colours (red, blue, green, cyan, yellow, magenta, and white) without having to resort to using variable resistors or PWM, and also requires three output pins on the micro-controller for each LED. 
    (Image from a good article on how RGB LEDs work, here)
    STJORN was to have 14 LEDs so using the four-lead type of LED would have required 42 pins...
    The answer is to use addressable RGB LEDs. These are essentially a four-lead RGB LED along with a WS2812 controller. A commonly used version of these is Adafruit’s ‘Neopixel’ range which comes in a variety of forms. The version I am using is a generic 5mm through hole version but does exactly the same.
    What the WS2812 does which makes this type of RGB LED so easy is two-fold:
    • The controller handles colour mixing and so hundreds of different colours are possible
    • Each individual LED is addressed and controlled by a single wire bus - this means hundreds of LEDs can be controller using a single pin on the micro controller!

    Although this form is slightly more expensive than a basic four-lead version, the advantages are huge when using more than a couple of LEDs and worth every penny!

    Alphanumeric Displays

    LEDs are great for showing a status of some particular feature, but for more detailed feedback an alphanumeric display of some form is usually required. There are many choices - LCD, OLED, multi-segement LED, LED matrix, etc - but what I settled on for STJORN was to use 14-segment LED alphanumeric screens. 
    The reason I chose this form is that although the text display may be rudimentary compared to LCD or OLED, this can actually be a bonus as the text is big and clear. The STJORN controller doesn’t really need to show a huge amount of text, but clarity is key and so this form won.
    In a similar way to RGB LEDs, the ‘simplest’ form of multi-segment display is where each segment is treated like an individual LED. Each LED is assigned it’s own pin on the micro-controller and by turning each segment on and off you get your letters and numbers. However, here we have an even bigger problem than the RGB LEDs - the STJORN display is to have 12 characters, each with 14 segments in, and so requiring a grand total of 168 pins on the micro controller! This can be made less using matrixing etc, but there is a much simpler way...
    As RGB LEDs are available with a controller, so are multi-segment displays. The ones I am using are Adafruit’s 14-segment backpacks - these are a small circuit board which attaches directly to the display ‘segments’ and allows the display to be controlled using the i2c protocol.
     Each display ‘block’ is two characters and each backpack controls two blocks, therefore STJORN required three backpacks. The i2c protocol is a two-wire system and like the RGB LEDs, each display is addressed so multiple displays can be used with the same i2c bus and only needs two pins total on the micro-controller! The other benefit is that using the Adafruit’s library for these displays they can be controlled as simply as telling each character to display an ASCII character rather than having to control each individual...
    Read more »

  • [Build Log] Chassis Finishing and Graphics

    mark.braith06/06/2020 at 11:49 0 comments

    Once the chassis modifications were complete, it was time to re-finish the chassis and apply some graphics to turn the old Line 6 controller in to Stjorn!

    The chassis itself had no rust or other superficial issues and so preparation for re-finishing was pretty straight forward. An overall light sand with some 180 grit to provide a key for the undercoat and then cleaning with some white spirit to get rid of any grease or grime it had accumulated and it was ready for painting.

    The paint I used was in rattle-can form and all sourced from Riolett Custom Aerosols in the UK ( The paints I used were:

    The '1K' refers to the hardness of the paint once dry - 1K and 2K are available but 2K is a bit overkill for this sort of project so I went with the 'standard' 1K.

    The primer went on beautifully, producing a very smooth coat. 

    (at first for some strange reason I wasn't going to paint the whole of the bottom..... I went back and resprayed that part though!)

    The first layer was allowed to dry fully for 24hours, lightly sanded with some 600grit sandpaper, and then a second coat applied. With the second coat dry and lightly sanded again it was time for the top coat.

    Again this went on very easily and once it was dry it actually didn't need a second coat at all as the coverage was very good.

    Looking good in it's Neve grey/blue it was time to think about graphics...

    I wanted the unit to have some good, high quality graphics on it and not just use some PVC tape and marker pen or some dodgy paper stickers - essentially I wanted it to look as much like a production device as possible.

    I fired up Affinity Designer and set to work trying to come up with a design. I'm not a graphic designer by any stretch but generally have a reasonably good idea for 'clean' design and - after taking cues from other controllers out there like the Line 6 Helix, Kemper, etc - think I have come up with graphics that are useful enough to show what everything does without cluttering the controller. 

    For each of the 8 main buttons, the text on each 'row' is applicable to the 3 modes - SONG, RIG, and LOOP & PAD - that are selected using the 3 buttons on the left. On the second row of text the text in bold - e.g. AM, R2, D2, etc - determines the patch that is selected in one of the RIG modes, and then the other text next to it is the FX selected in the other RIG mode. In another post I will go in to more details on the control scheme.

    I like the primary use of White for most of the labels with just a small amount of colour used for the SONG transport controls.

    As the text is mostly white with no background, I needed to find a way to replicate that in a medium I could apply myself to the unit. 

    The answer came from a company who mostly make waterslide decals for minature railway modellers - Precision Decals. They are able to print completely custom decals and, most importantly, have the ability to print in white; something that is not possible using a home inkjet printer and transfer paper.

    The graphics were prepared according to the instructions they provide and sent off. I included multiple repeats of each graphic so that when I inevitably screwed up placing one I had a few attempts!

    When the graphics came back they already looked superb on the paper and I couldn't wait to apply them to the unit.

    For those who haven't used waterslide transfers before they are applied by soaking the graphic in water for a minute or so and then sliding the decal from the backing paper in to position. Generally normal tap water can be used but I also purchased some Microscale Microset to help. This solution is applied to the surface the decal will be laid on and then also brushed over the decal once it is in position, and it helps to soften the decal to conform to any...

    Read more »

  • [Electronics] Mic Switcher

    mark.braith05/22/2020 at 06:37 1 comment

    The main 'scene' that I play in is at church where we will almost always use IEMs for monitoring. In order to be able to communicate with the band I need a talkback microphone - a mic that is routed to all the musicians IEMs but not Front of House so that I can talk to them without the congregation hearing. 

    We have been making great use over the last few years of a Radial Hotshot mic switcher - this allows a single microphone to be used for both vocals and talkback. 

    The output of the mic goes in to the hotshot which then has two outputs - one to the vocal channel of the mixing desk, the other to the talkback channel. When the button is not pressed the Hotshot routes the microphone to the vocal channel and when it is pressed it goes to the talkback channel. Simple and really useful.

    Part of creating the STJORN controller (and system around it) is to try and remove as many complications when actually playing as possible. One way is to cut down on the number of different footswitch devices at my feet - currently three; a controller for my guitar rig, one for tracks, and the hotshot.

    As such, the idea came to include a mic switcher within the STJORN footcontroller - that way I would have all three pedals in a single unit.

    It took a little bit of searching, but I eventually found a circuit diagram for a mic switcher that had some good comments that it worked well. That circuit is thusly:

    It's a pretty simple circuit. A DPDT switch is used for the switching and the circuit works by shorting out the two hot signals of the 'unused' mic channel. NOTE: The capacitors are NOT polarised as is shown - I can't find where I got the diagram from, but the comment was that when the creator made the diagram he couldn't get it to add non-polarised symbol. I've made this with non-polarised caps and it works!

    In the hotshot the switch is a mechanical footswitch and initially this is what I was going to use. But then the thought came that I could use a footswitch through the Teensy to control the mic switcher via a relay. This then opens up some interesting control possibilities such as using a double tap to latch the relay if I need to talk for extended periods, indicating the status of the switch using one of the NeoPixels, controlling the switch via MIDI, etc.

    A bit of reading up on the design of relay circuits and the following was designed:

    To start with, I wanted to ensure that the audio was kept as noise-free as possible. As such, the circuit design is fully isolated from the rest of the electronics within the STJORN controller. The first part of the isolation is that the signal from the Teensy to control the circuit goes through an opto-isolator. The second is that the +5Vext and GNDext which power the relay are from a 5V-5V DC-DC converter. This provides an isolated 5V and GND just for the relay circuit. Thirdly is, of course, the relay itself which separates the audio circuit from the others. This is most likely overkill but for the sake of a few extra components it was easy to design in and should help keep the signal nice and clean.

    The circuit itself is pretty simple:

    • The signal from the Teensy comes in to the 4N35 opto-isolator via a resistor - the resistor is required as the opto-isolator has an LED inside so, as always, a resistor is required to limit the current
      • Note: the schematic shows a 330R on the input to the 4N35, I actually used a 470R in the end; either is fine; just run the calcs using V=IR
    • An opto-isolator works by using the input signal to light an LED within the opto-isolator IC
      • On the 'other side' of the IC is a photo-transistor which reacts to the light from the LED.
      • When light is present, the photo-transistor base allows current to flow from the collector to the emitter and current flows around the circuit.
      • When the light turns off no current is allowed to flow and the circuit is turned off. 
      • As there is a literal air-gap between the LED and the photo-transistor, this component allows complete physical isolation...
    Read more »

  • [Build Log] Chassis Modifications

    mark.braith05/14/2020 at 12:08 0 comments

    First task for the STJORN build was to rip the guts out of the Line 6 FBV Shortboard chassis. I wouldn't be re-using any of the internal components so out they all came. In hindsight I probably could have made use of the footswitches but prefer the 'non-clicking' ones I will be using.

    (Internal view showing some initial sketch thoughts of where components might be placed)

    Step 2 was then to modify the chassis to accomodate the additional switches and sockets that I would be adding.

    From the base chassis, the modifications I needed to make were:

    • Drill holes for the three additional footswitches above the display
    • Drill holes for the additional LEDs (one above each footswitch)
    • Widen the current LED holes to accomodate 5mm through hole LEDs in sockets
    • Remove the PCB standoffs
    • Punch out the holes on the rear of the chassis for the XLR and USB Neutrik D size connectors
    • Drill a hole on the rear for the DC power connector

    Not a particularly large or arduous list but made even easier by two purchases I am very glad I made - a step drill bit and a Q-Max knockout punch.

    Even though I have made various FX pedals and other similar projects in the past I have never invested in a step drill and have just used successively large drill bits to drill footswitch holes etc. Step drills are just so much better! Within literal minutes of marking up and centre-punching I had drilled all of the new footswitch and LED holes (I did use a 3mm drill as a pilot first) and enlarged the existing LED holes.

    A quick once over with a hand-reamer and all the holes were good to go.

    Next up was drilling the holes on the rear for the various connectors. The main ones were four Neutrik D sized connectors for the mic-switcher XLR sockets, and the main USB socket. Neutrik D connectors require a 24mm diameter hole for the main chassis and then 2off 3mm holes for the mounting screws. Second best purchase so far made this very easy - the Q-max knock-out punch. 

    Using the Q-max is a piece of cake - you simply drill a 10mm hole and then push the threaded part of the punch through. You then attached the cutting half of the punch to the other end and just tighten it with an allen key. The punch easily munches through the chassis leaving a perfect 24mm hole.

    Four-off 24mm holes created in about 5 minutes - simple!

    The only annoyance of this whole procedure was when I removed the PCB standoffs. I had a thought that I could just wrench them off the inside of the chassis with brute-force and ignorance. Sadly the latter part of that phrase came in to play when I realised that doing so now left a hole in the top of the chassis...

    However, I turned an annoyance in to something useful and drilled out the small hole to accomodate another LED - I had actually removed one of the LEDs from teh design when I decided to add a rotary encoder in it's place and fortunately the accidental hole was right next to where the encoder would sit and provides a good location to have another LED. So disaster averted.

    I test fitted the rear chassis hardware and everything fits great so on to the next stage - painting!

    (The additional, accidental, hole can be seen to the right of the screen cutting in to the word 'volume')

    (The Neutrik D XLR connectors - and yes I realise I have one inverted....)

    (USB, power, and external expressions jacks - the expression jack hole was actually already there. The square hole previously had the Line 6 RJ45 connector to go to the amp it was controlling, this slot will now also have an RJ45 socket in it which is part of the Qwiic i2c differential breakout to act as an 'extension' socket)

  • [Component Choice] Chassis

    mark.braith05/14/2020 at 11:42 0 comments

    The choice of a chassis to which everything would be mounted was initially one of the most difficult choices, but looking back my choice of chassis seems incredibly obvious and I'm not sure why I didn't go down this route from the start!

    The chassis requirements were:

    • Large enough to hold at least 10 footswitches
    • Robust enough to withstand being stomped on 
    • Straight-forward to cut all holes etc in using hand tools/hand power tools at home

    Not a particularly complicated list, but finding a chassis which was large enough for at least that many footswitches without them being over-cramped was tricky.

    Drilling holes for footswitches and LEDs wasn't an issue, but the chassis was going to either large or non-round holes cut in it for access to the USB port, XLR sockets (a later addition), and screens. The large holes I would be able to do with either a hole-saw or knock-out punch but it was the non-round holes that was causing me issues.

    I resigned myself to having to seek some assistance from a local machine shop to cut the non-round holes when a thought occurred - why not just 're-cycle' an existing foot controller?

    An existing unit would:

    • Be already ergonomically designed - and large enough - for a large number of footswitches
    • Generally have pre-cut holes for USB connections and - more importantly - displays

    A short search lead me to what I have ended up with - a Line 6 FBV Shortboard MK1

    This ticked all the boxes and even had an expression pedal built in!

    I managed to find one on eBay for about the same price I was going to pay for a generic sheet metal chassis so snapped it up.

    The layout of the footswitches is perfect for what I have in mind for functions and - as a total co-incidence and not planned at all - the 14-segement displays I was planning on using fit perfectly within the display 'window' of the unit so this would not have to be altered at all!

    The rear of the unit is the perfect height to accommodate some Neutrik D sized connectors for XLR and USB, and already included a few socket holes I could use for other ports. 

    All in all, with a few relatively minor modifications I now have an excellent chassis for which to build STJORN upon.

  • [Component Choice] Teensy 3.2 Micro-controller

    mark.braith05/14/2020 at 11:27 0 comments

    This whole project started when, after hearing the name for a long time, actually realised what an Arduino micro-processor could actually do. A short investigation lead to the discovery that lots of people were creating MIDI controllers using these controllers and that is was a fairly straight-forward thing to do.

    The huge number of Arduino boards available was initially a little overwhelming, but on narrowing down what I actually wanted the STJORN controller to do a clear choice rose above the usual UNOs, Leonardos, etc.

    The choice was a PJRC Teensy 3.2.

    This tiny tiny board had everything I required for this project:

    • Tonnes of digital inputs for footswitches (34 inputs to be precise)
    • Plenty of analog inputs so I could use external expression pedals
    • Built in, ready-to-go, USB MIDI 
      • This was probably one of the main reasons for choosing the Teensy to be honest
    • Plenty of processing horsepower so that I didn't need to really worry about it
    • i2c and SPI 
    • Very small form factor
    • Cheap! (around £18 in the UK)

    One was purchased and within hours of really using an Arduino controller for the first time, I was already able to send and receive MIDI over USB!

    I now have two Teensy 3.2s - one is on a breadboard and is used for testing circuits and generally playing around, and the other is for the STJORN itself.

    For the board to be mounted in the STJORN, I have used a Tall Dog Teensy 3.2 Breakout to mount it. This not only provides easy access to all of the pins - some of which on the Teensy 3.2 board are located underneath with no direct access - but also some handy mounting holes to attach the board to the chassis. Here is the - actual one to be used in STJORN - Teensy 3.2 mounted to the breakout:

    This little workhorse is going to do perfectly for this project.

View all 7 project logs

Enjoy this project?



Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates