Custom Unit Build: 4 Poly Round Robin Sample Player

This is a walk through of the build up of a custom unit. The CU is a four voice polyphonic sample player that uses round-robin style polyphony (similar to M.I. Rings in Red poly mode).

This discussion actually started over here, with an idea and initial build from @Bparticle, but I’m starting a new thread so that I can tag it properly.

As a special bonus, I spend some time discussing and customizing @odevices brilliant Count custom unit, which is a vital component that gets embedded inside this custom unit.

4 Poly.lua (107.6 KB)


Very cool!! Cheers @Joe :smiley:

Following on from the thread earlier today about Lua programming, this also seems like an ideal candidate for being scripted.

Absolutely brilliant. Since I’m still very much starting out with the er-301, this video is a game changer for me. Especially because it was a problem I have tried to solve myself. I would have never figured out that piece of maths you did on the gain parameter in the count unit though. Thanks @Joe!!

Now I’m wondering if there is some sort of formula that could be cooked up so you can actually select the amount of steps you want in the count unit, as a kind of cool utility patch :thinking: would be pretty powerful!

Glad it made sense, @Bparticle - I always worry about that when I make a video. :slight_smile: The gain on a linear VCA is not currently voltage controllable, and the custom unit controls’ value ranges are currently hard-coded (i.e. a linear control always has a range of -5 to +5). So I’m not sure there’s a way to make a “# of steps” parameter, at least as of v 0.3.16, or if you did it would be limited (1-5). Maybe the middleware would allow more flexibility here? We’ll see soon!

Yep, might be an interesting one to try, @anon83620728! You know, I really like the visual programming language. It feels more akin to patching a modular synth than it does programming. So I’m not sure where the middleware’s “sweet spot” will be for me.

Certainly for things that require connections that are impossible to make due to the UI patching constraints.

Probably for things where I’m currently using a lot of custom unit controls that I’d prefer to be hidden once finished.

Quite possibly in the scenario described above, e.g. if you can take more control over parameter ranges.

And certainly for something huge like Evil Twin where it’s just so many layers that navigating it becomes difficult.

It’ll be interesting to see what unfolds next!


That was something of a stretch to hold in my head first thing this morning Joe, even after coffee! It’s really given me a better understanding of bump scanner function. I’ll need to watch it a few more times to get the entirety. Many thanks for your efforts.

1 Like

You are welcome, @sixnon! I enjoy doing making these videos. Helps me solidify the concepts in my own mind.

And as always feel free to ask if anything is unclear. It’s funny, no matter how many “takes” I do of a video (this one was 3 tries including the first where I knocked my tripod over lol), when I review it, I still always find something where I feel it would have been much clearer if I said it another way.

Plus, we all love discussing the ER-301 around here anyway, and questions sometimes lead to new ideas and light bulb moments! :slight_smile:


The “few more times” need definitely an indication of my brain pathways, rather than your clarity of delivery :wink:, but I’ll be sure to ask if anything stumps me.

Thanks again, these kinds of resources invaluable for my ER-301, but overall modular learning experience.

1 Like

The part in this take that I felt could have been clearer after reviewing is why the uDelay units are needed. So let me proactively try to clear that up.

The same trigger signal (trg) is triggering both the sample player and advancing the count unit. There is probably some amount of latency (however small) induced by each unit that does any kind of signal processing (e.g. the bump scanner). And the count unit itself definitely takes a little time for the aliasing saw OSC to slope up to its next stop point.

So if both triggers hit at the exact same time, the one driving the sample player hits the VCA, and the VCA is still closed. Similarly, when the 2nd trigger hits (and we want the VCA to be closed) it is still open for a few milliseconds so it lets that signal through.

So by purposely adding a tiny bit of latency to the trigger driving the sample player, we can make sure the VCA has enough time to open and let the trigger through.

1 Like

I thought as I was listening that this was as a result of the previously discussed trigger/cv latency issue, but thanks for making that clearer.

Thanks for doing this video @Joe! :heart_eyes:

Your explanation of the Bump Scanners is especially clear and will help a lot of people I think.

Reminds me that I should add a proper counting unit (and its associated low-level counting object) so that we can stop abusing a saw oscillator for this purpose.

Also, makes me think that I have not really found the right name for the Bump Scanner unit yet. Seems out of place in this context…maybe Soft Select is better? I can tell most people are not really getting this unit and I suspect it is at least partially due to the name. It’s probably the most powerful signal routing utility unit in the ER-301 right now (well, after the humble VCA).


Yes, a counting unit with min, max, step size and direction :smile:


Agreed it’s super powerful, and naming this is a tough one!

Range Selector?

I’d welcome a count DSP unit. Though I’ll say I really enjoyed seeing how you tackled it using the saw osc. I would have never thought of that. Getting to an understanding of how/why that works is one of those things I feel somehow upgraded my skills and knowledge. :slight_smile:

I don’t really have a name suggestion. One of my co-workers told me I was no longer allowed to name anything anymore years ago. :yum: But here are a couple of thoughts.

The “window” concept is really important to the unit. Maybe work the word window into the name? Also the window is defined by the center, width, and fade. The height has nothing to do with the window definition, but sits in between the three parameters that do. And you would kind of assume height and width are controlling 2 dimensions of the same thing, but they aren’t really, I don’t think. Center, width, fade are input focused, and height is output focused. So maybe height needs another name and position change?


Me too!

Some other suggestions, I like the window aspect.

Range to Trigger

Window Trigger


I think all of the use cases we’ve witnessed so far have used a “hard” window of sorts - like a trigger/gate. E.g. sequential switch, this one. But the bump scanner actually seems to have deeper capability than that. With the fade, which (IIRC) scales the output level.

I have been trying to think of a use case for this, and I think I have one now. Sort of a morphing wave sequencer of sorts for maybe an animated pad. I will try to work up a demo and/or video to prove it out. But given that, a word like gate or trigger might be understating the capability a bit?

1 Like

Of course - you’re right!

That makes it even tougher to name… are there any precedents for this kind of functionality? What are they called?

This is really great. Thank you Joe!

1 Like

I may be way off the mark again here, but I just had a brainwave:

Sliding Windows


So far these names don’t imply the morph/cross-fade capabilities though? Perhaps the unit is too “multi-purpose” (like Maths can be)? Perhaps the soft select and hard select functions should be separated out into 2 different units … :thinking:

1 Like

For my 2 cents, and setting the naming aside for a sec, I don’t think it’s too multi-purpose or too complicated. It’s only 4 controls. I was actually going to suggest splitting the fade into a L/R or upper/lower or top/bottom (not sure on terminology there) to be able to create uneven trapezoids.

It’s a brilliant and extremely powerful unit, and if there’s an equivalent out there, I don’t know about it. By its nature, it is a little bit abstract - maybe kind of tough to visualize at first. Nothing the O|D customer base can’t get their heads around, though. You seem to attract people who aren’t afraid of some complexity. :slight_smile:

Back on naming. Scanner threw me a bit when you changed the name to that. Scanner to me hints at something active and perhaps linear. To me it seems like more of a passive mapping function.