Home | ER-101 | ER-102 | ER-301 | Wiki | Contact

Polyphonic Synthesizer | Custom Unit

Thanks for your efforts here! Looking forward to trying this out.

And seeing what your code looks like for this:

1 Like

Thanks Joe! That one was pretty simple actually, just add the scope control to the collapsed view in onLoadViews. Figured it would be a nice QOL improvement so you can have some cool looking scope action if you want it :wink:

1 Like

Here’s my latest track, featuring the polyphonic saw for chords:


That’s awesome! So cool to see it being used like this, how did you send the v/oct values into it? Teletype?

Yeah, teletype over i2c. :+1::+1:

1 Like

Ouch! Nice units! Sounds great through some bandpass and then verbs, spacey goodness.


So I’ve recently started playing around with a microphone to sample my voice and make loops and things. It struck me this morning that the single cycle player just takes any buffer, so why not just use a voice recording? It works great! Can make some cool sounds that way.

Then it struck me that, well, if I just added a one-shot player, a slice offset, and a level control per voice then this unit essentially turns into a six voice drum machine. Since this would be so easy, I think I may work on that next. Of course there’s already a polyphonic sampler unit floating around, but I think a six voice variant with built in filters could be an interesting new take.

Was wondering if anyone had any ideas in this area about cool ways to do this.


On second thought… maybe that’s going a bit overboard idk ha. Instead I’ve been working on adding a “Hard Sync” setting and multiple secondary oscillators that can be layered to create more interesting timbres.

Not sure where to call it finished though, I’m worried that if I add too many features it will get too complicated and difficult to use.



lol or maybe it’s better said: instead of doing N things poorly, just do one thing well; SimpleSynth should just be a synth :stuck_out_tongue:

did any one try this unit in stereo ?, it seems like it is built for mono.

@tomf Been playing with the single cycle version the last couple of days and really loving it. Just throwing this out there as an idea: when one goes to the “voice inputs” page, it would be super cool if each voice had it’s own scan option too. They would have the same relationship that the global V/oct and the individual voice’s V/oct have. Then it would be not only polyphonic but also multitimbral. :exploding_head:

1 Like

Yep right now it’s mono only. I could make it stereo but it’s a lower priority for me since I run everything in mono anyways. If a lot of people want that though I’d be happy to put it together. Would probably want to add some kind of oscillator panning / spread if that was the case.

100% makes sense to me. This plus a per-voice level and a one-shot mode makes this thing a polyphonic sample player. Definitely gonna add the scan per voice, but still on the fence about one-shot.

What do you think about the phase control? It seems a bit useless to me rn so I was thinking of moving it to a “per oscillator” page. In general I want to add more oscillators per voice so that the new “sync” and “hard sync” controls I’m adding will be more effective.

My idea atm is to add more oscillators depending on how many voices there are. So the one voice saw would have a total of, say, 4 oscillators, while the 3 voice would have 3 per voice and the 6 would have just 2. This way each unit would be more specialized and you can actually use the single voice units to create some wild bass / drone sounds.

1 Like

That’s very exciting!

Yeah, not sure either. I haven’t had a chance to play with the sample players in any great depth yet, but I feel like they already have a lot of this functionality. The only exception to that would be the round robin implementation, yours is very light weight compared to building it from scratch.

Again, not being nearly as deep into the FM world as some others here, so take my opinion with a grain of salt, but a global phase control probably make less sense than the pitch and scan ones. For example, I was using the global pitch to change the octaves of all voices. Whereas in FM applications, you usually want to adjust the phase per voice so the frequency ratio is dynamic to the pitch of the voice. But people love having options, ain’t that right @odevices? :rofl:

I’m totally into it. Ha!

1 Like

Can’t you just make two separate versions? :smile:

Ha of course, the code would be very similar. It would be nice to find some good way to share it between the two.

1 Like

Cool, would love to try it. This unit really is excellent. Thanks a lot for sharing it. :slight_smile:

1 Like

These units are created using the Middle Layer SDK which means they require only a tiny amount of CPU compared to their equivalent UI based patch.

Can someone explain why this is the case? I would have thought it would be the exact same CPU usage.

There’s a lot of reasons why actually :slight_smile: . For one we can make more direct connections between DSP primitives instead of having to go through the Unit abstraction layer.

Another is that certain signal path optimizations can be made when dealing with those primitives directly. As a basic example, the built-in AliasingSaw unit is comprised of (essentially) two DSP primitives: the saw oscillator itself and a VCA (Multiply) for level control. In the case of this polysynth I’ve excluded that extra VCA for all ~9-12 oscillators and instead mix them together using a multi-band mixer primitive.

Of course at the end of the frame we’re still running the same number of multiplications, but we’ve also eliminated a large number of function calls so the CPU has less work to do overall (fewer instructions, cache locality, etc.).


This is a great explanation. Thanks for taking the time to write it out!