OWL Pure Data Tutorial 4: FM Synthesis

Today Adam will talk you through building a simple FM synth in Pure Data that you can run on the OWL. Test and download the patch at https://hoxtonowl.com/patch-library/patch/SimpleFM/

FM (Frequency Modulation) Synthesis was developed by John Chowning at Stanford University, and it’s the technology found in synthesisers such as the infamous Yamaha DX 7, Ableton’s Operator or Native Instruments FM8. FM synthesis is perfect for digital synths as it relies on a stability that you don’t often get in analogue oscillators. It enabled the manufacture of affordable but versatile digital synths.

1. I’m using Steve Cooley’s Pure Data template which you can get from hoxtonowl.com.

Remember, to ‘modulate’ something basically means to change it. Frequency modulation uses one oscillator to change (modulate) the frequency of another. First we set up the carrier frequency. The carrier frequency is added to the modulator. As the modulator varies between positive and negative values, we get a signal that oscillates around (that is, on either side of) the carrier frequency.

We will use dial / CV A to set the carrier frequency. We take [r Channel-A], scale it for midi by multiplying it by 128 using [* 128], then we scale it to frequency values using the [mtof] object, which converts midi to frequency. We then convert it to audio rate using the [sig~] object.

3. The carrier frequency is added to the modulating frequency (which we’ve not set up yet) using a [+~] object. After that, it is connected to an oscillator – an [osc~] object – so that we can control the frequency of it.

4. Now we’ll create another oscillator to do the modulating. We need a second [osc~] object. The frequency input that this receives should be a multiple of the carrier frequency. To achieve this, we’ll multiply the output of the carrier – the [sig~] object – by something (we don’t know what yet) and then connect it to our modulating oscillator.

5. We also want to control the amount the modulating frequency, called the modulation index, so we will connect it to [*]. Finally, we add this back to the carrier.

6. Now, we’ll create an overall volume control with another [*~] controlled by dial / CV D and connect it to the [dac~], so we’re ready to input some numbers and make some noise!

7. We can create some number boxes and put some values into the synth to get some sounds out. Whole numbers in the ratio give harmonic sidebands, whereas non-integers give inharmonic sidebands. A greater modulation index (the amplitude) increases the volume of the sidebands and the brightness of the sounds. This amplitude can be far greater than 1, and changes the range around the carrier that we are modulating.

8. Pick some ranges that work well, and scale the inputs for channel B and C accordingly. We’ll use a range of 16 for the harmonicity ratio and 2000 for the modulation index.