Working on a ZOIA controller patch


For those of you who have a Ribbons and a ZOIA and are on this forum… (Venn diagram forming in my head, anyhow, moving on)… I’m beginning work on a ZOIA controller patch for Ribbons.

I’m still learning what Ribbons can and cannot do, but a few goals:

  1. Create a modulation matrix. This would allow modulation sources from within ZOIA – LFOs, sequencers, envelope followers, pitch detection maybe? (pitch detection is computationally expensive), maybe some weird modulators I cook up – to be routed to parameters within Ribbons. At least right now, in my mind I see this as a 4 (sources) by 7 (destinations) grid, with sources and destinations assignable from the front panel, and attenuversion of sources (e.g. an LFO could be sent positively to one parameter, while acting negatively upon another).
    Ideally, this would provide a (relatively) fast way to route modulation to various destinations.
    In theory, this aspect could be used with other MIDI-capable pedals, provided the appropriate CC destinations were programmed.

  2. Make the looper functions more accessible. This would probably be some combination of panel controls and stompswitches. There are a lot of possible combinations of those things, so it will take some time to feel out what I think works well. I do want to add some indicator for how much buffer has been used during recording (similar to what I’ve used in airport loops, if you’re familiar with that patch).
    I could also extend the modulation matrix to include looper parameters; there’s some fun to be had here. (This is also the point where I add: This may end up being more than one patch, e.g. a modulation patch, a looper focused patch, etc…)

  3. Add a keyboard for controlling the synthesizer. The ZOIA keyboard is monophonic, but there are ways to draw out paraphonic/pseudo-polyphonic capabilities.

  4. Preset management. I might do something weird and make this sequence-able, but I’m not committed to that yet.

Just thought I’d mention this in case anyone had suggestions, requests, etc… I’ve got a few other things going on, so I’m not sure when this will make it from “brainstorming” to “patch creation,” but all of the above is feasible; I have proof of concept for everything, although some questions about best practice for implementation and possibly with the mod matrix aspect some questions about CPU allocation (it involves a lot of switching).



This sounds awesome! I’ve been using my Zoia to control a few parameters (most notably, to add a sort of “harmonic tremolo” by wiggling the filter cutoffs around a bit) and have definitely considered using a zoia patch to set up additional presets. I’m curious where you get 4 sources and 7 destinations for the mod matrix? Another fun thing I’ve done with zoia controlling Ribbons is using the sequencer module to directly sequence the magnetic dance chord shape. it sounds really great cycling through a few chord shapes. Jaak did a fantastic job with the little slides between notes as the play heads’ speeds change when doing this. Looking forward to seeing what you come up with for this!


I’m thinking about UI. So, if I have a 5x8 matrix, like the ZOIA grid for a single page, the leftmost column goes to selecting sources, and the top-most row goes to selecting destinations, each leaves a 4x7 matrix for routing sources to destinations.

There will be more than four possible sources: you’ll be able to select from… not sure how many yet, but I’d think at least eight options for the sources. And there will be up to 16 destinations (all of the knob parameters basically), but only seven available at a given time. The limit there is because I will use UI buttons to select options, and the UI button only supports 15 colors (I’ll use no color as a 16th option). Like the size of the page itself, I see this is as a good limit, not a prohibitive one.

There’s also possibility of CPU limiting the size of the matrix, but I don’t think that will be the case, since there’s no audio processing (except analysis modules, like envelope following and maybe pitch detection). But I can’t be sure, it is still going to be a lot of modules and a lot of connections.

So, functionally, it will work like: press source button until it hits the color corresponding to the source you want (e.g. triangle LFO). Then hit destination button until it hits the color corresponding to the destination you want (e.g. high-pass filter). Then, at the grid point where they intersect will be a -1 to 1 value module for setting the depth, positively or negatively.

You’ll be able to send up to four sources to the same destination, and you can send any of those four sources to any of the seven destinations, with varying intensities.

Some progress on the mod matrix patch (which will be standalone, because…)

It goes right up to the CPU limit in my first pass at it. I think it’s likely I drop the number of outputs from 7 to 6, to give myself a bit more headroom.

Everything is working inside the patch. I haven’t hooked it up to the Ribbons yet, though, so there’s some chance things don’t work (this was a “couch patch,” because it’s a bunch of tedious and repetitive actions, so easier – or at least more comfortable – to do while watching TV). But MIDI CCs aren’t shrouded in mystery, so I don’t expect any issues there.

Right now, there are 12 modulators: square wave LFO, sine wave LFO, triangle wave LFO, ramp LFO, random value generator, latching stompswitch w/ slew, momentary stompswitch w/ slew, envelope follower, 8-step sequencer, envelope follower-triggered ADSR, expression pedal/CV in, and a “chaotic” modulator I concocted, based on a 5-step interpolated shift register. When you select a different modulation source, the UI button changes color and modulates in intensity with the selected source for some (meager but maybe useful) visual feedback.

Next comes testing (and probably dropping the number of outputs from 7 to 6, like I mentioned. Modulating 6 things at once sounds like plenty to me). I have a busy couple of days ahead, so I probably won’t get back to this until the weekend/beginning of the following week. (And since I am terrible at timelines, add a couple more days on top of that.)

I also realized this might be a useful/interesting patch for more than just Ribbons, so I’ll probably release a template for a few other popular brands (that use consistent CCs between products), like CBA, Meris, . Changing channels is a bit of a chore, though, because you have to go into every CC out module (right now there are 112 – 7 x 16 – of these) and change the MIDI channel at the module level. I don’t really have a way around that. But once it’s done (and saved), it’s done.

After this is done, I’ll look at making a patch for controlling the looper. But due to CPU constraints, the two won’t be combined.

1 Like