Quantize to Scale (with probability)

I set out to make video about a lot of the cool stuff we were discussing in the fold unit thread today. I really did. I still plan to do that. :slight_smile:

But alas, the ER-301 pulled me in a different direction. I think some may find this useful, and I wanted to document it for myself as well.

This video shows how to set the ER-301 to use a sample player as a lookup table, and use that to quantize to a user defined scale for an oscillator’s pitch. I also add some note probability to it, change the root key, and add some octave offsets.


Brilliant! Was thinking on a solution to scale quantization over my vacation but hadn’t fully worked it out yet. Happy to see this! And you’re absolutely correct that many miles can be found in your approach. :seedling:

1 Like

Thanks. I think the ER-301 is reaching that point where if you want to do something with it and don’t think you can… have you really thought hard enough about it? :smirk_cat:

Something I thought about after making the video. No reason you couldn’t just record yourself a chromatic scale, and use it over and over - just put in slices at the notes you want to include. Pretty flexible that way - you could change which values are included on the fly without making a new lookup table recording.


Agreed on all above counts, and combined with your probability solution, there really is a lot of control to be had.

1 Like

really great video! i use my mungo w0 oscillator like that, it loads arbitrary waveforms so you could load such a scale, put frequency to 0 and input your pitch cv into the phase modulation and this gives you a quantized pitch cv out. i assume we will see a proper wavetable oscillator and maybe with phase control this approach can work a little easier than your slicing. still, brilliant idea and video @Joe!


Thanks! So, I think in the part where I’m fiddling with the gain of the chain affecting the slice parameter of the sample player, maybe I just needed a final slice at the very end of the buffer, and then I could have set the gain to 1.0 with 0.0 bias. I tried that and it seems to work as expected…

Yeah, I think the ER-301 will continue to get better and better and easier to use. For now, in a way, I’m kind of enjoying what limits it does have. It’s helping me build my modular chops to have to think of ways to do things with what’s there, if that makes sense.

In a way, the probability thing might be the more interesting part of the experiment. It just occurred to me when I was in there slicing. That definitely merits some further exploration!


Great video, Joe! :heart_eyes_cat:

Just a hint on the random note selection: the White Noise unit outputs in the range of -1 to 1, so half of your random values are below zero. All those negative values will choose slice 0 making it occur more often than not. The solution is either to rectify or push the bias up to 0.5, with gain of 0.5, so that your WN+SH subchain is outputting values in the range of 0 to 1.


Thanks for the tip, @odevices! It seemed like maybe it was hitting the first value more than it should but I couldn’t tell for sure.

Awesome video @Joe! Thanks for sharing

1 Like

Watched this last night but promptly fell asleep hehe - not a reflection on your video but just how tired I was :smiley:

This is amazing, great work!!

Awesome to see someone finally got round to trying this, I admit I totally forgot but we did discuss it earlier this year, as you say there’s loads of things could be done with this, here’s the thread, maybe it will trigger a few more ideas:

1 Like

I’m not in front of my modular at the moment, Joe, but I believe that if you hold shift down when you slice, you get the inverse of what ever your “slice at zero crossing” setting is set to in the config menu!

1 Like

Fascinating concept. What action is it that defines which sample plays from the lookup table? The CV value of noise at the S&H unit is used to play whichever sample as the nearest discrete value? A discrete value is a voltage value? Geez I think I’m gonna have to read theory and lots of it, but, what a great demo and incentive to learn.

Yes, the slice parameter is determining which slice of the sample will be played upon receiving the next gate. When the (now called) Variable Speed Player has it’s address mode set to index, it will evenly divide the slice slider across the number of slices. So say your sample has 4 slices, these values would select the corresponding slices.

0 - 0.25 slice 1
0.25 - 0.5 slice 2
0.5 - 0.75 slice 3
0.75 - 1.0 slice 4

1 Like

Right, ok!

1.0 as a concept, is not 1. 1.0 is actually a big field, especially when tied to 0. This is probably the most profound math concept I need to fully understand inside the realms of the 301. I saw you do something the other day with 1.0 which first prompted me to question the importance of a number (1.0) unlike (1)

If only there was a useful on line translator into which I could ask what I couldn’t express and you could reply with understanding!

Either way, kind of you to share your ideas and help. I very much appreciate your patience, thankyou

Is this right?

A conventional quantizer will structure the signal applied to its input. The quantizer you built triggers a sample which is an audio slice. The slice is the recorder note from a particular voice. Could I feed a different voice signal through this quantizer and have it structured in the conventional way, I don’t think so. If I wanted to apply that scale to a different voice then I would have to record that particular voice, those particular notes. Is that right?

This is where you went slightly wrong. The only thing making sound in Joe’s video is a Sine Oscillator. The sample player does not generate sound here. The sample player is only providing the pitch CV. He recorded the pitch CV (not the tone) into a sample buffer, sliced it, and then used the slicing mechanism to discretize (i.e. quantize) a continuous pitch CV input signal.

If you look in the comments under the YouTube video, you can also read Joe’s reply to another person who had the same misunderstanding 9 months ago.

Keep in mind that the ER-301 is not able to output the quantized signal to the rest of your modular because its outputs can only generate audio signals.



I would also add that this video was from back on (I think) v 0.2.x firmware. I think this technique is still valid for creating some kind of probabilistic CV source out of a set of discrete values. But in 0.4.04, Scala file support was added to the Scale Quantizer unit. So if your goal is to “quantize to any scale”, that’s the simplest, most straightforward way to do it now. :wink:

1 Like

That’s really clever.

Another video Joe made, building a sequential switch. He mentioned a unit that can take a frequency and convert it to a voltage.

Just when I thought I was getting somewhere…landed on a snake.

Thanks, something to chew on this weekend

Right, understood. This 301 has a 0.4 revision. Think though I’m gonna step back from this one, let the seed germinate, and in the meantime build a harmonic oscillator Joe and look at custom units in the admin room

1 Like