Orac : module developers guide


Or another module. I powered it with polybeats and it created a really cool pattern morphing effect to the chord changes!


it’s weird. I downloaded again, deleted the old chorder from my USB and installed the new one but it isn’t waiting for the note input to advance. As soon as it loads up it just starts playing rather than waiting for me to start polybeats. other things like all the synths wait to get triggered by polybeats.

I’m trying: polybeats ----> chorder ----> polysynth

am I missing something?


gah! now I see that there is an option on the screen to allow it to accept the notes! thanks! it’s amazing now!


a question that i think is primarily aimed at developers…

(tldr, summary : this is probably going to happen in next few hours, so this is really just a ‘sanity’ check to see if ive missed something obvious)

so for Orac 1.1 Im considering two changes , one which requires a small update to modules, and wonder what your thoughts are?

the changes are related and are to do with , how audio is passed between modules , and where the gain control is applied.

what we currently have in a module looks something like this:


ok, so obviously a module need input (might be an fx) and output.
but you’ll notice how the module also passes thru the audio

I did this because many fx modules have a ‘mix’ value, so by definition they do pass thru the audio.
(albeit not like in the diagram)

however, now I think this is a mistake,

gain control / audio thru in modules

orac (in the routers) can only adjust gain of the module from its total output,
i.e. input pass thru + ‘synth’ output

but I think users would prefer the module gain to be the of actually module output , not the combined output

e.g. imaging, we have in a chain (which says is used for layering)
mono synth (m1) -> mono synth (m2) ->out

adjusting the gain on m2, is the sum of its input and mono synth, so you cannot really just the gain on the second mono synth

so the intention is…

to change it so modules look like this:

then the router module will allow:

  • pass thru gain
  • module gain.

(passthru gain, in theory this could just be on/off as you can control the gain on the proceeding module, however, it may be you want to run the output of that module ‘hotter’ into the next module, but only want a smaller amount of that to then be passed thru the audio chain)

technically what this means is…
audio pass thru (and panning/gain) comes under the control of router, rather then individual module. this I think is much more flexible.
(and if later i decide, not 1.1!, to add a special UI controls for the router modules, then this is pretty much essential… e.g. consider something like a ‘central mixer’)

changes required:

  • dont pass audio thru in the modules
    optional changes
  • you don’t really need any gain on input or output in the module itself , as you can do this in the router.

its the first which is kind of a breaking change, as the second just means you have something in the module you dont need.

the first means, if the module is not updated, you get duplicate audio thru (I will of course update all ‘factory modules’) - however, the user has a work around, they can set the passthru gain to 0 for that module, which they might also want to do where a module has a mix.

one possibility (likely) is for me to default passthru gain to 0, to help alleviate the issue.

this is ok, since for most ‘simple cases’ , audio pass thru is not needed ,
e.g. seq->synth->fx1->fx2
this probably is ok, since the synth does not need it, and fx1/2 probably have a ‘mix’ control anyway.
where its usually going to be needed is if you layering synths on a single chain, of your fx modules dont have mix.
doing this means , module writes still should change their modules for consistency but its going to be less problematic if they take a while.

note: setting audio passthru = 0 by default, is also probably consistent with the audio input to 0
(though amusingly, if passthru = 0, then I can actually change the audio in default to 1.0, as the passthru will stop the ‘bleed’ noise anyway!)

(note: Orac 1.1 will need users to ‘reinstall’ 3rd party modules… but they can use 1.0 modules without issues)


I think to avoid too much overhead , I think we should do this on a ‘per chain’ level… not individual modules
(thoughts? its not a big overhead, but nothing is for free in code :wink: )


sounds like a change for the best and not too troublesome while patchstorage is still yet to be flooded with modules


yeah no problem - makes a lot of sense (I’ve got some modules coming but have become distracted by another project - will be returning to orac sooner or later however! :slight_smile: )


Was just away to ask this. :+1:


This seems like a good idea.

Please smooth the mixer so there is less zippering.

[$1 20{


That make sense, adjusting module gain could be a bit tricky when it affected everything everything earlier in the chain. I’ve been adding a ‘volume’ parameters to my synth modules so you didn’t need to go to the router to change the volume independently. I’ll probably keep the volume control on synths and mix controls on FX as I think its useful to be able to adjust those as you tweak other stuff without needing to navigate to the mixer.

I actually do stack/layer synths (or other audio stuff) in a single chain quite a bit so I’d need to get used to adjusting the passthru gain after instantiating those. In my ideal use case you could have an optional attribute in the json that specifies the default pass-through behaviour for the module (probably just on or off, could default to leave the old value if unspecified). Maybe the router wouldn’t be obliged to obey it but you’ll get the desired behavior when a module loads without needing to go to the router.

Anyways overall this change sound good to me!


already done, I use the same approach as the main volume, so now uses a sqr scale (finer control) and put it thru a sig~ and lop~ , so now no issues.
(this is done for all gains in/out and thru)

I’ll be doing the same for pan

I cant do that currently… as the modules knows nothing of the router… and the router knows nothing of the module!

I think really the core issue, is making the router UI a bit more friendly/accessible…
Im not going to mess with a dedicated UI for this release.

but I can say that the new structure is much more logical, as you get a patch for each module, and a page for each chain in/out… so it makes more sense.

Ive done for the R-1x10 router, and updated the subpatches it uses, and the router patch is now much more easier to understand too… so thats cool, will make it easier to add new routing topologies too.
I just need to do the other routers, and check they are ok, but pretty sure they will be fine.

note thru is also getting a bit of a tweak too, so its in line with audio
looks like passthru will default to 100%, and notethru to true.

most of these defaults will be fine, and the user will just now tweak the gain levels of the modules.
(tweaking passthru really only comes into play when you need to mess with the input gain for an fx if it doesnt have it itself)

current idea with panning…

there will be a panning on both the input and output.

( what i want to do is take a stereo input, and re-pan it to a new stereo output … not quite sure on the control of that but I’ll work it out :wink: )

output is obviously so different chains can be spread out over a stereo field.

input im thinking is more like a ‘filter’ , so you can send the left input down one (or more) chain, and the right down another i.e. use the stereo input as 2 mono channels… thats my thinking currently at least.
but being a pan, you can also send partial mixes downs different chains!

again the trick is, whilst i want the input mixed, I think I then would prefer it spread across the stereo field on the input chain… not sure if i can do this with one control though!? (as theres quite a few different use-cases)

panning UPDATE:
ok, i think to keep things simple, and flexible, what im going to do is:

output : split stereo panning
this allows the user to move the stereo field fully

input: individual l/r gain , followed by split stereo pan
so you can filter out either side ( by a variable amount and/or boost ), and then reposition it for the subsequent processing.
(this allow the common use-case of taking one channel, then shifting it to the centre, much like how you would do on mono channels on mixer)

… takes 4 controls, which plus midi , means 2 pages for chain in… but, i cant really think of a better way at the moment, which uses less controls, and similar flexibility.