One of the toughest challenges in using the Roger Linn Adrenalinn III pedal (henceforth referred to as the “A3”) is figuring out how to use it! The pedal is nearly perfect, and yet there are ways I want to use it that don’t fit how it was intended to be used.
For starters, the pedal is basically two machines in one: a full-blown digital guitar effect pedal, and a Drum Machine. You can connect the two, but I want to be able to use them completely separately, with two separate sets of controls. The pedal’s buttons can control certain things, but can only change presets up/down. You can use external MIDI commands to switch presets, but you can do either FX or drums, or both together, but you can’t use two different controllers to change presets separately.
My setup is a bit complicated, I’ll admit. I have a rack unit that I want in the MIDI chain, for clock-synced delays AND preset changes. But I want the presets to change with the A3’s FX presets, and NOT the drum patterns. I want the Molten Voltage Master Control (henceforth referred to as the “MC”) to provide clock and PC only for drums… and a second controller to provide PC and CC messages only for the rack unit and the A3’s FX side. I also want to leave the A3’s buttons alone to turn individual things on and off. So how do I make this all work??
I know the A3’s presets can be set to either effects or drums, but not both independently. Doing a little digging, I discovered that the A3’s MIDI preset change mode can be toggled by a CC message. If I send it a CC32 -> 0 message, then any PC changes will do effects only. If I send it a CC32 -> 2 message, then any PC changes will do drums only.
I think one solution is to make a MIDI filter that takes PC messages on two different channels, and inserts mode change CC’s as needed. If it gets PC on the channel for drums, it just passes it on to the A3. If it gets PC on the channel for effects, it switches the A3 to effect mode (with the correct CC), then sends the PC on the rack unit’s channel, which the A3 will get as well. Then it switches the A3 back to Drum preset mode.
For this to work, the A3 needs to be set to receive on all channels (Omni). We just have to have a filter in-between that adds the correct CC switches to change modes before and after, but only when it gets the message on a certain channel (whichever one the rack unit is set to). We don’t want to filter out any other messages, so they will get passed through untouched (for now).
I considered using my old standby for this, QMidiRoute. It will allow me to change any messages, but I can’t generate or script any. It won’t let me sequence switches before or after.
I could use PureData for this, which it most certainly is capable of, but programming with it takes a while. It’s an option, though, and when I have the script done, I can load it onto a Raspberry Pi or a BeagleBone Black, and run any other linux-based software I want.
I can also use Mididings, which is similar to PureData, but is designed specifically for MIDI use. The scripting is about the same to learn, and it will also run on a RasPi or BBB.
Practically, I can either make a stand-alone programmable MIDI filter box, I can build it into an existing controller (like my ART X-15), or I can make my own controller from scratch. All three are viable options, but for simplicity’s sake, I will probably opt for #1, and make a small, pedal-sized MIDI filter. That way I can use any secondary controller I want. I can also add an LCD screen to it to display text if I want.
The nice thing about programming a filter with software is that I can work on the code and run it on my laptop to test it before I make it into hardware. I have a small USB-to-MIDI adapter that I can use for the device, too. If I really wanted to, I could hard-code everything to an Arduino, which would be cheaper and would run on a pedalboard’s 9V supply. I may still go that route, but I have to get the theory down and working first.
I could also have two separate physical MIDI inputs and outputs, but if the rack unit is on a specific channel, we shouldn’t need it.
First, let’s see if we can successfully toggle the A3’s state from effects to drums and back with CC messages. If we can do that, then it will be a simple feat to add them before or after any PC changes on a certain channel that get passed on.
Feasibility Test 1:
Using QMidiRoute, I’ll force two buttons to send a CC32 message to toggle the A3’s mode. Then any PC messages should change either effects OR drums, depending on what mode it’s in.
Result: It works!
We have our proof of concept. Now, to figure out how to script it in Mididings. We want to capture any PC messages on channel 1 only; everything else gets passed. Anything captured is assumed to be a PC change on channel 1. So we add the CC toggle command, then pass on the PC message, then toggle the CC back:
from mididings import *
config(
backend=’alsa’,
client_name=’Midi_Merge’,
)
run(
ChannelFilter(1) >> ~ProgramFilter() % Fork([Ctrl(32, 0), Channel(1), Ctrl(32, 2)]) >> Print(),
)
And we’re done. Now, let’s try it out!
You can see Controller events go through unmodified, but Program Changes get a CC32:0 before, and CC32:2 afterwards. I plugged it up to the pedal and tried it out, just to make sure the timing wouldn’t be an issue.
Success! Now we can either take our Mididings script and load it on a RaspPi/BBB, or re-code it. Arduino would be cheaper, but would include building a case for it, making a hardware MIDI interface, and re-hashing the program. Cost comes out to about the same once you factor that in.
I could do an Arduino inside an old Boss pedal case or something, and also make the pedal switch the Linn preset banks from 0-99 to 100-199. Could also manipulate the PC messages so the rack unit matches the preset numbers, even though it only has 128 presets… but that’s a whole different project!
Anyway, we’ve gotten 90% of the way there. From this point, we’ll find or build a small 2 or 3 button MIDI pedal, route it through this filter, and everything will work!