Niall's Pedal Board (now with support for MIDI Keyboards)

This is an idea I’ve had for a while now, but now that I’ve finally got a soundcard that can run at a decent latency in ASIO without randomly crashing (theat’s the last time I buy anything from M-Audio :?), I can finally start on it.

Basically, it’s going to be a simple VST host that’s designed to stream audio from it’s input, through a bunch of plugins, to it’s output, for playing guitars through. Where it’s different from other hosts, though is how you can control the plugins. Instead of allowing their parameters to be controlled from MIDI signals, and the terrible 7-bit resolution they use, I’m going to use a joystick interface. The good thing about joysticks is that they have 16-bit resolution on their axes, allowing for nice smooth expression pedals.

Joysticks are also cheap, so the next step is to get hold of a cheap (say, £5) analogue joystick, and hack it apart, connecting the circuitry up to a bunch of switches and the joystick axes to build a (physical) pedal board. I’ve done this before, to build myself an arcade style joystick, so I know it’s pretty simple to do:

To be honest, I’m not sure anyone else will be interested in this project, as you’ll have to do a bit of diy, but I’ve got a basic application working already (it just streams audio from the input to the output at the moment, but you can add plugin objects by right-clicking in the PluginOrganiser). Source code:

Can anyone tell me why I couldn’t upload the .exe to my website? It kept telling me it was a virus :?: :!:

  • Niall.

Pretty neat idea, but how does it incorporate JUCE? [edit: nm I just can’t read for shit…VST host. sorry]

I’m not sure if anyone’s really interested, but I’ve just got basic VST support working. You can now load plugins and play about with them. It still has problems with some plugin’s editors though (it would help if more plugins reported their size correctly :?), but for the most part it’s working surprisingly well :D.

Again, sorry they’re separate files, but I’m having strange problems with my webhost.

You should probably read the readme before you try using it, there’s a couple of odd little things you need to know first.

  • Niall.

Whew that’s a lot of code there, nice!! But dragging VST DLLs onto the main window doesn’t work for me…the mouse changes in anticipation of the drop but nothing happens. Tried several different VSTs: kjaerhus, magnuss jonson, etc.

yum. I can use some of this.

My brain is going to overload with all the goodies! Thanks Niall! :smiley:

Yeah, drag and drop isn’t supported (dunno why the mouse changes…). I forgot to mention that you right-click on the main part of the window to add plugins :oops:. I’ve set it up so that I can have my own format plugins as well as VST, so I can do something similar to Tracktion’s filters, although at the moment it’s just got a gain control.

  • Niall.

thanks for the source code, i think its going to save me some time writing my host stuff :stuck_out_tongue:

Hmm… I don’t seem to be getting e-mails when someone replies to me…

I’ve pretty much finished the code now :D, though it’s Windows only because of the joystick code. I’m just waiting until I’ve built the physical pedal board to go with it (so I can include a brief tutorial on how to do it) before I release it properly. Attaching a potentiometer to an expression pedal is a nightmare :? …

  • Niall.


are the now sources ready to download? same file?

BTW It would be great if you change


and add juce directory to the VC++ include directory

this will allow to move your project directory around and not be relative to juce…and it is more standard C++


Sorry, I haven’t uploaded them yet (waiting now till I can give the program a proper release :wink:). It’s not hugely different from the current version anyway - I’ve mainly just added the joystick support, and a fake menu bar, though I do make (fairly) extensive use of JUCE’s xml classes, to save/load plugin setups, which is kind of cool…

You’re probably right about the <juce.h> thing - I just copied Jules’ example for that…

  • Niall.

I’ve finally uploaded the new version of my wee vst host. I can’t remember exactly what’s different from the last version I posted, but it now uses xml to load/save plugin configuration, makes use of the PropertiesFile class, and has joystick support (for Windows, anyway).

I also solved my weird problems with having to upload the source code separately, so it’s all in one zip now:, or here for a picture :wink:.

  • Niall.


So can we assume that your next project is JUCEGUI Builder? :lol:

:lol: No, my next project’s finishing my Buffer Synth 2 plugin, which has been dragging on for almost a year now. I’ll try and start on my gui builder after that’s done…

  • Niall.

OK I will wait :roll:

A question: I need to do a piano keyboard using JUCE, do you think its better to use bitmaps or to draw it using JUCE commands. I need not only the keys and key press animation but also to paint different keys in different colors…I will be even happier if it is resizable


I think it’s probably better to do it using JUCE commands, especially if you’re wanting to paint the keys different colours. The way to do it is to draw the white keys first (as simple rectangles), then the black keys on top of them, and store the values for the width of the keys etc. as floats (this caught me out when I was creating a similar control for VSTGUI and storing the width as an integer :oops:).

  • Niall.

Thanks, I will try and do it when I will get to the GUI part of my project. I will keep the keyboard independent of the rest of the project so people will be able to reuse it


If anyone’s interested, I’ve just updated my Pedal Board to v1.20 - the most significant thing is that it can now write the output to a 16-bit .wav file :D.

  • Niall.

Finally got round to updating this to v1.22. New features include skinning support :smiley: (like I mentioned here), and the ability to map joystick events to MIDI messages, so you can (for instance) play synths with your joystick/pedalboard. Here’s some examples of the skinning capability:

I also made a real effort to document the code properly, so if you run Doxygen on the Doxyfile.conf file, you’ll get a ton of html explaining the various classes I wrote.

Oh, and I fixed the VerticalSlider so it works the right way around :).

  • Niall.

Well, I seem to go through phases with this project, where I spend a lot of time on it, then forget about it completely, etc. but this seems to be a busy phase… I’ve just updated it to v1.23 :).

New Features:
[list]Fixed a bug where opening a plugin’s gui/editor would reset it’s program to 0.
Fixed VerticalSlider to compile against JUCE v1.10.
Added an (audio) envelope detector at the inputs of plugins, as a mappings source (so you can create auto-wah-type effects).
Added the option to set the bpm the host reports to plugins which request it.

  • Niall.