I was going to ask how to do octave folding in Rack, but it turns out that once again Nysthi alread does it with soutils

Leave it to @synthi to have made a module I imagined in my head, before I imagined it.

The “ASR 1 & 2” section at the bottom is a bit mysterious though.

Maybe we need to revive the Nysthi documentation project?


Does octave folding mean that if a note goes above or below a threshold it lowers or raises it an octave?

My understanding - and @synthi can correct me if I’m wrong - is it transposes a CV so it’s inside the range.

it does this:

var note = fmod(CV); // the note of the scale is the
                                  //  fractional part of the CV,
                                  // since it's 1V/Octave. The octave
                                  // # is the integral part of the CV
if (CV < lower_bound)
    outCV = lower_bound + note; // transpose to bottom octave of range
else if(CV > upper_bound)
     outCV = (upper_bound - 1) + note;  // transpose to top octave of range
     outCV = CV; // note is in range.
1 Like

Man…it took me a whole evening to try patch that up:

This will make things much easier. Thank you.

And thank you @synthi !!!

1 Like

Is this the same as what Orange Line Fence does or is that something different?


It is indeed. You can also do it with the modulo function on any of the Submarine math modules


Fence has different ways to express how it ‘fences’ and I’ve not bothered reading the manual so I don’t know if it will do octave folding the same way, or just clamp notes inside the range. I suppose I could do that but it kind of takes me out of my flow when I’m patching to look at manuals.

My impression of Fence is that it’s hard to control the range. But again that’s probably me not reading the manual.

EDIT: I read the manual and still don’t get it 100% Suffice it to say, the way Fence works isn’t intuitive for me. Nothing wrong with it, it just baffles me.

1 Like

It’s not that tough - the default mode transposes by octaves any incoming voltage outside a given one-octave range, so that the transposed value is inside the range. You can set this range to be something other than one octave, shift it up and down, and so forth.

There’s also a non-quantized mode that you can use for other kinds of voltage - how the transposition for this works I haven’t learned yet.

The advantage of using a modulo math function for this is that you can set the limited range to any size, and transpose values up and down by increments equal to the size of that range, which need not be 1 volt / 1 octave


I should really learn to ask this community before attempting something :smiley:. The answer is already there.

1 Like

The ASR section is a pair of shift registers!

1 Like

YES, I don’t like empty spaces… :smiley:

1 Like

undocumented feature:

if you don’t patch the second section
is one single Shift Register with 8 cells

example (filling a random value with same clock):

they go together, a lot



1 Like

Didn’t there was an ASR in there. Should really be a tag for shift register in the Library because ASRs are the best!

This is good to know. It’s looks like it could be more controllable than my usual method which is passing pitch CV to Normaliser to impose a min/max window that stretches the cv to fit a range prior to quantising.

The downside is trying to work out how these complex modules work. A lot of the time I ignore them in favour of lashing blocks of simple function modules together.

What Normaliser misses is something indicating the limits in terms of notes. I found a module that can interpret the min/max values as notes

My favourite thing with having CV to set the min and max is that they then can be modulated or sequenced giving more ‘life’.