FM patch units (DX7 inspired)

In my pursuit of gaining more knowledge and accurate technique in FM synthesis I was looking for precise recipes for FM patches and stumbled upon this YouTuber who makes custom DX7 patches and goes over all the settings from scratch. A great resource for my purposes so I jumped right in and started with this “Shimmer Pad”

This is my WIP custom unit and a polyphonic recording from the resulting sound (I’m routing the mix of three voices through an external low pass filter that is slowly being swept, but for the rest it’s just the sound of the pad.) It’s not a replica of the patch in the video by far, and I still need to fine-tune it and add some LFO action and so forth, but before I do that I wanted to ask some questions about custom units and FM synthesis on the ER-301.

DX7 Shimmer Pad.lua (35.7 KB) (better skip this version and go grab the performance improved one here: FM patch units (DX7 inspired))

My first confusion while building the custom unit from the first chain I made was concerning the global chains I used. Is it possible to use global chains in a custom unit, or something similar? In the original chain sketch I used four global chains for the two modulators and the two ADSR envelopes that are used in the different carriers. I couldn’t figure out how to use those in the custom units so I copy/pasted them on the spot, which leads to horrible duplications and a waste of resources, especially when putting this unit to use in a polyphonic patch (instead of four global chains, we get something like 22 duplicate chains in a three voice setup…!!). When recording the little demo above I was at 75% of CPU usage, so that’s pretty much the limit, and it’s just one voice (well, it’s poly of course but still). Any tips on getting CPU usage down (quite) a bit?

Another question is relating linear/exponential FM. I didn’t manage to keep the pitch stable when modulating the frequency so I used phase modulation instead. What are the main differences/advantages/disadvantages/possible limitations…?

I’m looking forward to finish this patch and try some others. I already learned a lot! Subtle modulations and slight detuning goes a long way in FM synthesis. I’m used to subtractive synthesis that doesn’t plunge into chaos so easily so I’m learning to moderate :slight_smile:


I haven’t had a chance to go through your patch yet (sounds great though!), but have you tried adding a control (i.e. local) for each global chain and putting the contents inside their sub-chains? This should help avoid duplication.

BTW, more routing flexibility is coming v0.4.x.


I’m confused about that local control tip… Frankly, I don’t have a clue. How does a local control have a sub-chain…? Isn’t that just a reference point for controlling values inside the patch? Anyway, if you or someone could elaborate that would be immensely appreciated.

Looking forward to 0.4 and the routing improvements though!!! Thanks for all the hard work :heart_eyes:

You can treat the subchain of a local control unit the same way as you would tread any other subchain, the output of that can then be assigned anywhere in your patch.

Critical ER-301 knowledge imho - makes life a lot easier in many ways - well worth spending the time getting to know this approach :slight_smile:

1 Like

^^^ THIS!

Well alright I’m convinced :grinning:

Neil, are you doing this exact thing in one of your videos? Still not entirely sure where to look :frowning:

A few thoughts for you. I think you may have joined after @anon83620728 and I did this, but have you looked at Evil Twin?

It has an FM/PM/AM synth built into one custom unit. I am not suggesting you just use that instead of exploring creating something from scratch as you’ll learn tons rolling your own (I did :slight_smile: ). But you might find some ER-301 specific ideas and hints in it - especially with the helpful diagram @anon83620728 put together.

FM and phase mod are very similar in the sounds they create. Phase mod is more pitch stable. The DX7 is actually a phase modulation synth, despite the fact that everyone calls it an FM synth, so if the DX7 is your inspiration, phase mod should get you closer. I imagine Yamaha chose phase mod over FM for its pitch stability.

One of the things I learned when we built Evil Twin is that this audio rate modulation can get pretty CPU intensive in a hurry. There does almost seem to be a multiplicative effect on CPU usage when you start adding more operators. One thing you could do is just keep it monophonic until you get it dialed in. Then sample it and create a new patch based on sample playback for poly.

There is also a a little FM unit in the test_lib that @odevices created if you look at the middle ware thread. Perhaps since it was built in the middle layer it might use a little less CPU than something built in the UI layer? Haven’t checked but it’s a thought.

Thanks Joe for chiming in. I have Evil twin on my unit and used it with great pleasure, but this is really an attempt to learn how it’s done and build specific patches as one custom unit, instead of building a synthesizer with lots of controls. I basically just want pitch and gate control on the upper layer and that’s it. Evil twin is quite amazing, but too overwhelming for me to figure out what’s going on in there. Maybe when I did a few exercises like this one I will come back to it and dig a little deeper in there.

1 Like

Step by step:

  1. Create custom unit
  2. Create local control on custom unit
  3. place whatever you want in sub-chain of local control of custom unit e.g. sin osc
  4. navigate into the custom unit and create another sin osc
  5. assign local control output to parameter input of second sin osc e.g. v/oct
  6. mess around with settings to suit your requirements


Understood. It might be so now but it started out as pretty much exactly what you’re doing. :slight_smile:

1 Like

It sounds really straightforward but I’m stuck at step 3. When I’m in the custom unit menu and want to add a control, then I need to choose between Linear, Decibel, Pitch, etc. And when I have done that, there is no way of going “into” that control to add whatever. So I seem to be looking in the wrong place, or we are talking about a different kind of control, or there is a hidden menu somewhere that will -again- redefine my relation with the ER-301😄. Whatever the case, please excuse my ignorance and enlighten me!

3.5 don’t forget to turn the gain of the sub chain up to 1.0. Caused me much head scratching for a while.

1 Like

You need to come out of the local control create/edit section back to the custom unit itself, then all should be clear!


Got it!!!

1 Like

@odevices just consider me your personal UI for dummies guinea pig. Thanks to these fine folks I just figured out what you were talking about at the beginning of this thread :grin:


Welcome to the rabbit hole. You just swallowed the red pill, my friend. :slight_smile:


Don’t you just love a happy ending :joy:

Your ER-301 skills just jumped to the next level - thee’s no doubt to me that you will soon see that all kinds of weird and wonderful patching possibilities have just opened up before you!

Don’t be afraid of creating feedback - but always use attenuation! The VCA units are your friends :wink:

So this is the custom unit with shared FM modulators and ADSR’s wrapped in unit controls. Now I understand why there are that many controls on the surface of Evil Twin also (they are actually not meant to be controlled at all from the surface level…?). Anyway, I tested the same 3 voice poly with this unit and went from 75% to 50%, which is a significant improvement!

I was adding LFO controls and so forth to the unit but it became too complex for my taste, and I was very quickly losing the gained performance improvements. So here it is, a very first and very simple ER-301 FM patch for your enjoyment. I will be posting more of these in this thread, as I go along. Thanks for the help guys!

DX7 Shimmer Pad.lua (25.5 KB)


I tried this on v0.3.25 but I get a sort of random high pitched chirping when i assign an external square wave to gate input and an external sequencer(clocked by same square wave) to control main v/oct, and then turn v/oct slider all the way down to get lower notes. Any idea what could be causing this ?

This happens on another synth custom unit also, but i don’t remember which one…

I haven’t tried this unit in a long time but your issue doesn’t sound familiar :thinking: I will try it out later and see if I can reproduce the behavior.

EDIT: I did a quick test and couldn’t get things work as they did before so let’s consider this unit as “no longer supported”, until further notice. I might get back to this when I feel like putting some time into it.