So, I made a pretty big step in the direction of realizing this whole thing yesterday. Specifically, I think I've finally found all of the individual plugins to replace the pedals I have on my pedalboard, and even added a couple.
The actual processing chain goes like this:
PodFarm Chrome Wah - A model of a Vox wah. The knob that controls this is set up so that it bypasses automatically with the "toe" all the way down. This thing also has an envelope follower modulating the "Pedal Position" parameter. Reaper's parameter modulation parameters are not themselves modulatable, which means that I can't use any button on the thing to directly turn the envelope follower on or off. I got around it here by running the envelope detector off of a sidechain channel and setting the threshold to a level that no passive guitar can actually reach, inserting a volume plugin in that sidechain path to boost the level up above the threshold, and then modulating the Bypass parameter on
that. I can use it as an touch wah/envelope filter or, a standard pedal wah, or both. I don't normally carry a wah pedal with me, so this is an upgrade from my meatspace board.
NSFW Boost - A new plugin I wrote (actually re-worked the Rat, see below)
LT Pedal Delay - Started with the Stillwell Tempo Delay, added compansion, LPF, and saturation to make it act like a pedal, limited the feedback parameter to 0db so I can get infinite repeat without escalation (compansion helps this some, too), added a Feedback Dump parameter which stops feeding the delay output back to its input so that I can stop those infinite repeats (it's a bit abrupt now, I might change it to Feedback Dim or some such), took out all the time sliders and replaced it with a toggle option - Quarter or Whole (actually Half or Double, but I run my DAW at double speed, might double that longer loop at some point), and I'm bypassing it by setting "mix in" (a multiplier for the dry input signal being sent to the delay line) to 0 so that repeats will continue based on feedback parameter, but no new signal will cause echos - "tails mode".
Feedback send - The pedals in the feedback loop run on audio channel 3, and a send on the track sends channel 3 over to another track (Post-FX, Pre-Fader), and that track sends it right back to channel 3 on this track. This plugin determines what signal gets routed to channel 3 going into these pedals. All the way to the left, it's only audio channel 1 (the main signal after the delay) and all the way to the right it is a 1:1 mix of channel 1 and channel 3 (the signal coming back from that extra track). I might end up trying to taper the response of this slider some. Anyway, this slider is linked to the slider in the Feedback return, and it works more or less like the physical feedback looper on my board, except that it continues to feed the feedback loop pedals even when the return is bypassed (see below). Everything listed between here and the Feedback return is "in the loop".
ReaVerbate - Simple, light, algorithmic reverb that gets the job done about as well as the Behringer verb I use IRL.
mdaRezFilter is the LFO filter that I've chosen to use here because it's light and does what I need and sounds pretty good. This has an envelope follower as well, but it's a little weird and I don't really need at this point in the chain. I have knobs for LFO rate, depth, and center frequency and somewhat like the wah pedal, it is bypassed by turning the frequency knob all the way to the right.
mVibrato is next. On the physical pedal board I actually only have one slot for modulation, and I swap between my Boss Autowah and my Behringer Vibrato. Here I can use both at the same time!
Infernal Diseased Dire Rat - Of course! It's kind of the engine that drives the whole feedback thing. I have only exposed the knobs that control Gain, Tone, and Level, with buttons for "Flip Bottom" and
Bypass. I almost never use the Special Abilities knob on the physical pedal, and I'm digging having it set to A on the plugin right now.
Feedback return - This is pretty much the opposite of the feedback send. It mixes channel 1 (which flows right through past all the plugins in the loop, basically the output from the delay) with channel 3 (the output of the Rat at this point) and dumping that to channel 1. All the way left is all channel 3, while all the way right is a 1:1 mix. Remember that this slider is linked to the send, and they work in the same direction. All the way left has no feedback and no "dry signal" mixed in, it's a straight "True Bypass Looper". All the way right is full feedback mixed with the "dry signal". This is how the meatspace feedback pedal works (actually better, since the pedals end up loading each other down and cause some attenuation at full feedback position). I may also try to taper this response some, and was thinking maybe I'd add something to take the dry signal out at full feedback which is something the passive physical version can't do. Channel 3 is split at this point, not blocked, so that it also continues on to the send which goes to the extra track and back around. Channel 1, though, is completely replaced with the output of this plugin. Bypassing this plugin allows Channel 1 to keep on through to the amp.
Then it's into my standard PodFarm AC30 Top Boost model which is always a set-and-forget thing.
And yes, I got all of this crap mapped to a NanoKontrol (currently un-hacked), but this also took some messing around and a bit of coding. The thing is this: Reaper is fully capable of taking control data and mapping it to any parameter (and actually any number of program actions). It really can be almost as simple as choosing the parameter you want to control, clicking Learn, and tweaking the knob...except that this uses Reaper's "Control Path", of which there is only one, and some of the CC numbers are already mapped to various Reaper functions, like mixer faders, transport controls, etc. It is not fun trying to turn down the distortion on Track 3 and have Track 6 pan over to the right, or go to bypass something and the transport rewinds. Not cool at all! To stop that happening, I could probably go through and remove all of the bindings, but I actually want to use my NanoKontrol 2 for that kind of thing, and that works great! Plus I'm eventually going to have yet a third of these things plugged in to control Luke's rig, and the idea of trying to keep all of these controllers unique is, well, a mess. Wouldn't it be great if I could actually just use CCs and route them around via the regular paths, and have each plugin respond to CCs only on one particular MIDI channel or specific MIDI input port? Yep. And you absolutely can go in and disable any individual Kontrol unit from sending to the Control Path and just route those CCs around like any other MIDI data...
...but you can't then directly bind those CCs to plugin parameters. At least not unless the plugin itself was specifically coded to do so. And guess what! Yep, none of the plugins listed above will do it. I think the full version of PodFarm will do it, but I use the "Elements" versions to get just the wah, and just the amp where I need them, believing that it saves me some CPU overhead. Wouldn't really do me much good anyway. There is a plugin that comes with Reaper which will convert regular CC messages to the Control Path (and another that does the opposite, I think), but that doesn't help either.
So I found this JS plugin in the Reaper Stash called "CCtoParam". Can't link to it from work here. It's a really simple little plugin. All it does is set a one of its sliders to the value of any incoming control message on a given CC number. So the knob on the Kontrol is set to some CC number, you set this program to respond to that CC, then (as long as your MIDI routing is correct), the slider on CCtoParam moves. That alone doesn't actually do anything other than look kinda neat, but if CCtoParam is on the same track as the plugin that you want to control, you can go into that plugin, open Parameter Modulation for whichever parameter, and then select "Link to" and pick the slider from CCtoParam, and then this parameter will follow that slider as the knob moves it around! It is kind of a kludge, I suppose, but it works extremely well.
Of course, out of the box, that little plugin only allows up to 5 parameters, and is otherwise kind of limited, but it gives me the code that I need. I could probably have put all of the controls for all of the plugins into one of these modified CCtoParam things, but I didn't want to have pages and pages of sliders, and I kind of wanted them to be modular, and... So I made one of these control plugins for each of the other plugins. Replaced the drop-downs which choose the CC for each slider with hard coded assignments for the particular knobs/sliders/buttons for each, and did a couple other things to add functionality. For example, I've got the buttons set up to send a CC value of 0 for Off and 127 for On, and they light up after sending an On. Now, the Bypass parameter on any given plugin is set up in Reaper to actually Bypass when it receives the high value - the effect itself turns Off when the controller sends an On, and the LED is lit when bypassed. That is not the way we expect our pedals to work. So in the control plugins that affect that Bypass parameter, I'm subtracting the value coming from the button from 127, effectively inverting their action. In the controller for the Wah pedal, I have one slider for Pedal Position and one for Bypass, but they both respond to the one knob. If that knob sends 127 (toe down), then the Bypass slider goes to 127. For any other value, Bypass is at 0. Uses a fairly simple IF:THEN:ELSE structure.
Now, some of the parameters on some of the plugins have ranges that are wider than I might like. mVibrato, for example, will go way to slow to be able to tell there's anything happening (it's a byproduct of the way this type of "phase rotation" vibe works, happens in analog versions also), and the center mdaRezFilter will go both too low and too high for guitar work. Luckily, Reaper's Parameter Modulation window has pretty comprehensive tools for scaling and shifting the movement of the linked parameters to keep them within a more useful range. I've got most of them dialed in pretty well at this point, though I'm sure I'll be tweaking for a while.
This, of course means that I have twice as many plugins in the chain, but these control things take up almost no headroom, and I've got unlimited slots, so... Eventually I will probably hack the code directly into the JS plugs so that they can follow CCs natively without all the parameter linking, but it still won't help the actual VSTs, and for right now it works brilliantly.
With all of the plugins unbypassed and running and the feedback loop going, the whole chain uses just over 15% of my studio machine's CPU and there is no noticeable latency at all. I don't have the stats for that machine right off hand, nor do I know for sure how it compares to the laptop that I use for live shows, but I'm encouraged at this point. With all of the parameters I really need laid out on the NanoKontrol (almost logically, except that the RezFilter was kind of shoehorned in after I saw that the others fit) I have two knobs and five buttons (not including the transport buttons, which are really just more CCs) left to work with. I think one of the knobs will act as a volume pedal at the very front of the chain. Might even have it roll off a bit of high end as though you were actually turning down the V pot on the guitar. The other knob might be used to fade one or more of the "generative" MIDI accompaniments which will be added in the near future. One of the buttons will definitely be used to turn On and Off the Ring Modulator which multiplies Luke by Me, and one will probably be set up to send a MIDI note to trigger a crash cymbal so I can tell the rest of the band when it's time to go to the next section of the song. I think I will end up figuring out how to pass only the transport controls through to the Control Path. That's not quite so critical, but I do generally record all of our performances, so it would be nice to be able to start and stop that without having to actually touch the computer itself. I'm sure I'll come up with uses for the rest. If nothing else, I'll probably just have them available for future assignment/expansion.
I guess I've got some stress testing left to do with this, and of course I have to make sure it actually works on my laptop, but initial tests are very promising. The next step, then, will be the actual physical hacking of the NanoKontrol into the the pedalboard form factor as described in the first post. When my father came home from his winter tour of the Southeast (sounds better than "snowbirding"
) he brought home a big Behringer mixer that he bought a decade ago because it was cheap and stopped using about 9 years ago for the same reason. So, I think I've got all the pots and jacks I could possibly need for this. Perhaps switches, also, but I'll have to look at what is actually in there. The actual bypass switches (and whatever I decide I want to be be able to switch by foot) will of course need actual stomp switches, but a lot of the parameters want more to be like toggles. All of these need to work as momentarily switches, I think, for the Kontrol to interpret them properly. SPST momentary stomp switches are easy and relatively cheap from Mouser. I'd kind of like to use toggles for the others, though, but I would like them to stay in place so that I don't actually have to route the LEDs for all these things. IDK for sure if there's such a thing as a momentary toggle that doesn't just spring back. I can see a way that I could fake it with a make-before-break DPDT toggle, but I'm open to suggestions there.
When I get home, maybe I'll post some screenshots or something, but for now you can listen to me playing with the feedback loop layered five times (the fifth is pitched way down in post production) as this week's SUaF release:
kontrol 12. (That's kind of an NSFW link, in that if you look closely enough at the image you can see jubblies)