3 Operator PM Synth


This utilizes @stschoen’s uPop DX Phase Modulation Operator

Nothing fancy here. I get easily lost tweaking knobs. Happy with the bass end of it. Open to any tips for improvement. Fairly low CPU hit as I tried to keep things minimal for iOS.

3 Op PM Synth.audulus (203.2 KB)

Tutorial Request Megathread

A lot of the interesting effects from the DX involve modulating the levels of the various modulators. you might want to experiment with hooking an envelope to the modulator level control(s). The original DX operator has a 4 step envelope that controls the output of each operator


Can you explain a bit about your Variable Curve ADSR Envelope Generator? Was it designed for the uPop DX oscillators? Why is there only 3 rows instead of 4?

I have been trying to improve the tails on this patch. I found that if I had a different release time for an carrier it sounds like there is an after ring. It is almost like there should be two stages of release in an envelope ADSRr (ring). Sound tends to end but then ring a bit. Of course, if you mix two sounds and let the one go slightly longer this can be achieved.

It would be interesting to know about some advanced algorithms or tricks for getting the more unique sounds out of the uPops.


You can use any envelope generator with the uPop. The variable curve unit is much more flexible that the built in ADSR, but also uses quite a bit more CPU. I guess it depends on the envelope shapes you need. The VC-ADSR is closer to the original DX7 envelope.
For the built-in unit:
Level always starts and ends at zero
All segments are linear
A,D,R controls set the time for each phase, S sets the sustain level
Attack time is set with attack control(A), attack level always goes from 0 to the gate height
Decay time is set with the decay control(D), decays to the level set by the sustain control (S)
Release time is set by the release control R, release level is always 0

For the Variable Curve unit
Level always starts and ends at the level set by the level on the release segment. This can be non-zero
The curve of each segment can be adjusted from exponential to linear to logarithmic.
Each segment has both a level and time control. The sustain level is set by the second segment.
Initial attack is controlled by the first segment and goes from the release level to the attack level. Both of these levels are adjustable.
The second segment goes from the attack level to the sustain level.
The third segment goes from the sustain level to the release level.

It is possible to match the built-in unit by setting the curve controls to linear (50%), the release level (third segment) to 0 and the attack level (first segment) to 100%. In this case the the time on segment 1 becomes A, the time on segment 2 becomes D, the level on segment 2 becomes S and the time on segment 3 becomes R. By adjusting the levels or changing the curves it is possible to create envelopes that cannot be created with the built-in unit. The envelope generator used in the DX is similar to the variable unit, however it has 4 segments rather than 3, is linear only, and the time controls are constant rate rather than constant time. That means the actual time for each segment depends on the difference between the start and end as well as the rate control. levels. The DX7 also had variable keyboard tracking for the envelope. This is my original emulation of the DX7 operator as well as just the DX envelope, the envelope with tracking, and just the tracker:
DXop and DXvelope V1.2.audulus (209.2 KB)
I put together the uPop DX because this one is pretty CPU hungry and even on a fast Mac is tough to use with a polyphonic keyboard and multi-operator algorithms. The envelope and tracker are the biggest part of the load so I removed them for the uPop DX. For an explanation of the various controls, see the DX7 operator manual which you can find online in various places.


3 Op PM Synth Meaner.audulus (203.5 KB)

Some incremental improvement on the 3 Op PM synth patch. I ran the Modulation to Octave Attenuate-Offset over to the uPop DX Operators, sent the first output into its own level, and opened up the Mgl low pass filter a little which brought some rip into the bass notes.