Simple Phase Modulation Oscillator


PMOsc is a simple lightweight phase-modulated oscillator. The carrier and modulators are all sine waveforms. The oscillator has six modulators at fixed ratios of 0.5, 1, 2, 3, 4, and 5 times the carrier. Each modulator below the first has a level control and a toggle switch. When the switch is on, the modulator is modulates the one above it and when off it modulates the carrier directly. The 0.5 modulator always modulates the carrier. The oscillator has a 1 per octave input, sync input, external phase modulation input and a main carrier audio output as well as outputs from each modulator.

Version History

Revision File Date Notes
1.1 PM Oscillator V1.1.audulus (35.4 KB) 11/11/2018 replaced clamped knobs (for Windows users) added sync and external phase modulation input
1.0 PM Oscillator V1.0.audulus (34.2 KB) 11/10/2018 initial upload to Forum


Revision File Date Notes
1.1 PMOsc.demo V1.1.audulus (510.2 KB) 11/11/2018 updated PMOsc and spline AR versions
1.0 PMOsc.demo V1.0 audulus.audulus (508.9 KB) 11/10/2018 initial upload to Forum

Might you upload a version with old-school knobs? I’m on windows ATM

no problem

1 Like

Excellent! This is pretty awesome when you just want straight ratios. The button routing is a great way to make branch and stack algorithms.

I think it would be pretty easy to set the ratio per each “operator” and chain them, now that there is a phase modulation input you can easily make basic DX-FM patches.

I found myself using integral ratios more often than not, and by using fixed ratios I was able to keep the expressions simple and reduce the CPU load. The toggles were also a simple way to introduce some different algorithms. Not really a replacement for a full blown PM operator, but a nice way to create some harmonic variation by varying the modulator levels. I was able to get a pretty wide range of timbres out of the module


And of course phase locking is a breeze with this method.


I took the individual outs on the vco and sent them though a hardware mixer, then took that source and drove the FM input on my vcf. It made the bassline just that much meaner.


You can get some really nice tones if you send each output to a mixer, so that you can adjust the level of significance that each oscillator plays in the chorus. I ran it out of the ES-8 and split the signal 3x3 (2 x 3>1 mixers to separate VCAs to stereo VCF) to get a stereo grouping that would be noticeably differentiated. Some reverb at the end to let it breathe, obviously.

PM Oscillator to ES-8.audulus (63.7 KB)

Any ideas on how the external phase modulation and sync inputs are best used? I am foggy on this.


The frequency of the primary oscillator is determined by the o input. Each of the six modulators is a multiple of the primary frequency. Depending on the toggle, each modulator phase modulates either the primary or the modulator above it at the level set by the knob. The outputs are all at full level. In your example a pure sine at 5x the base frequency is output on 5. Because the switch is on, this is also used to phase modulate the sine at 4x. The modulated signal is output on 4. This signal also phase modulates the sine at 3x, etc. Because the switch at 1 is off, the signal at 1 is used to modulate the primary oscillator instead of the 0.5 oscillator. So the primary oscillator is being modulated by both the 0.5 oscillator and the modulated signal at 1. This is the primary output of the oscillator which in your case is unconnected.
Like many oscillators, the sync can be used to phase-align the oscillator with another external oscillator or used for hard sync modulation. A high on the s input will reset the phase on the primary oscillator to 0. The external phase modulation input is added to the modulation signal applied to the primary oscillator so that it can also be modulated by an external oscillator.


So this is like the application of reseting an LFO. I feed it a gate. While for phase alignment, I feed it the steady output of another oscillator?

Since the oscillators in Audulus are digital they don’t ordinarily drift. If two oscillators are set to the same frequency you can send a sync pulse to both to phase align them. Sending the output from one to the sync input of the other will also phase align them. The sync input is simply a way to reset the phase of the oscillator to zero. By sending a sync at a different frequency you get a “hard” sync modulation

1 Like

Thanks for all of the info, I have reread this thread about 15 times. Unfortunately the state of the patch I uploaded could have been better, but that has little to do with the design. This is where it would be nice to get into snapshots or presets, so that more possibilities can be shared without 10 iterations of the same file. The design is really nice because of how it fits so well with the ES-8 receiving all the outputs, then also fun to split into stereo as I mentioned.

Perhaps one day you will grace us with a ‘complex’ phase modulation oscillator. Really cool to be in on the difference between FM and PM, but also how yourself and @robertsyrett have juggled various module configurations with respect to CPU strain and usability.

I will probably continue to reread this.

Have a look at this: uPop DX Phase Modulation Operator. This is a single PM operator based on the Yamaha DX 7 operator. It is intended to be combined in various algorithms in the same way you can select various algorithms on a DX 7. It’s modular, so you can use as many operators as you like (CPU permitting) in parallel, serial or combination configurations. I built a variety of other PM based modules with built in envelopes, key tracking etc. which were posted on the old forum.
There’s a good PM tutorial available at It uses a free DX-7 emulator called Dexed which would be good to install (PC or Mac) before starting the tutorial. I believe there are also free DX-7 apps for the iPad, although I haven’t played with any. Yamaha introduced the first PM synth and the DX-7 was probably their most successful model. They continue to use PM synthesis in the current Montage line.

FWIW, there is a quite accurate DX7 emulator for iOS called KQ Dixie. It can even load DX7 library sysex dumps . There is a pretty huge number of sys ex libraries out there.


I like KQ Dixie too, I just wish it were easier to save your new patches and share them with friends. Although it is cool to check out Brian Eno’s old patches and muck about.

Yah. Dixie’s bank-saving is a nightmare. But, I like it anyway :slight_smile:

Have you tried the build of Akemie’s Castle? It has that FM/PM feel where you loose yourself for hours trying to get the oscillators just that bit sweeter. Probably my favourite Audulus module. I like the immediacy of wave selection, multiplication, and algorithm surfing.

I just understood now that the uppermost output is not a sum other outputs below it. I think that the position of the uppermost output and the fact that it has no label mislead me. You might want to consider bringing the knobs and outputs more in line?

Yeah You’re probably right. I should have labeled ithe primary output more clearly. Originally I only had the single output and I added the others as an afterthought. What label would you use?

What about 0, since the other numbers are multiples of the input frequency, whereas the uppermost input is not? But also the knob alignment threw me off. I wonder if it should have a tune knob for the uppermost output.

I am looking forward to the day when toggle values are retained with saving, as knob settings currently are.

I don’t like giving advice on the UI in this case. However, I think maybe a routing map right on the face would be useful.

It’s nice when there is a layer of symbology between the user and the documentation, so that once you have read the docs, the symbols remind the user of what goes where. Of course, the idea of refacing altogether gets into the possibility of having even less need to go to the docs. There is complex modulation routing going on here though.

*Edit. I guess toggles save, but selector buttons do not…? :roll_eyes: Thinking of @RudigerMeyer’s modules.