Skip to main content

FM Synth


FM synthesiser including a reverb using nested allpass-filters written in the domain-specific DSP language Faust (functional audiostream). The reverb can be downloaded as a VST3 as well as a component plugin (MacOS only).

Try it out

You can try the synth for yourself by copying the code from the GitHub repo and pasting it into the Faust online IDE.


FM Synth

While it is mainly an FM synth, it does have a switch for both frequency and amplitude modulation. I used two different types of sine waves. Aliasing free sine waves and ones that weren’t free from aliasing. The non aliasing free sine waves are the ones that ended up being implemented into the LFO, as those tend to be more accurate in exchange for being prone to distortion, but since LFO’s obviously aren’t within the audible hearing range, non aliasing free sine waves tend to be a more accurate and therefore more popular choice for modulation.

Features:
  • Osc 1 (carrier): FM/AM switch, gain, Pi slide 
  • Osc 2 (modulator): Modulation index, Freq, gain
  • Osc 3: Sin/Tri/Sqr/Saw switch, Freq LFO switch, Freq LFO freq, Freq LFO depth, Pitch envelope (ADS), mute
  • Noise Osc: gain
  • Amp envelope: Basic ADSR, gain
  • Filter: LP Cutoff, Resonance Q, LFO Freq, LFO Depth
  • Saturation: Drive, gain compensate
  • Reverb: DryWet, delay time, damping, size, diffusion, feedback, Mod depth, Mod freq
  • Master fader

Demo

Here is a compilation of nice sounds I recorded with the synth. It is also capable of creating some less FM-like and more classic subtractive sounds using oscillator 3’s four different built in waveforms.

And a visual demonstration of it. Though I really recommend trying it out for yourself as shown at the top of the page.

Reverb Diagram

Cascading Allpasses

“[…]Schroeder and Logan introduced delay-based allpass filters, which are still popular due to their computational efficiency and versatile applicability in artificial reverberation […]”

Sebastian J. Schlecht

One really popular method for artificial reverberation is the use of delay-based allpass filters, which were invented by Manfred Schroeder and Ben Logan in the 1960s. If you arrange these allpass filters in series, it results in a summation of the phase delays. This is what is called the cascading allpass and is used both in diffusion and in phaser algorithms. In fact, by removing the limit that is typically set on delay time and size, the reverb will turn into a simple phaser algorithm. Equally it will turn into a simple mono delay, once you turn down the diffusion to zero. Viverb is using the so-called “nested allpass” first proposed by Bill Gardner – which simplifies the code somewhat by nesting a function within itself and utilising recursion (see top figure).

Manfred R. Schroeder called it “colourless artificial reverberation” (1961), because this type of reverb was free of the natural attenuation and colouring of the sound that a room in the real world would typically produce. Though interestingly ”[…]the feedback matrix of nested allpasses induce a much more complex decay pattern than the series allpass counterpart.” (Schlecht, 2020) Which is ironic, since the nested version ends up being less complex and generally easier to implement. The reason that the delay matrices, which are implemented into audio applications using readtables usually only contain prime numbers, is due to the phase relationship between delays. Using prime numbers reduces the risk of the delays overlapping and creating phase cancellation. Additionally “a fractional delay filter is required to obtain smooth delay variation.” (Pakarinen et al, 2011) (see top figure, bottom right). A fractional delay filter using finite impulse response (FIR) is a “device for bandlimited interpolation between samples” (Laakso, 1996). It estimates a delay for your samples without using buffer memory, which means that you can get a lot more precise and have more options in your delay timings, without having to rely on just using multiples of the sampling interval.


Bibliography
  • Laakso, T. I. Valimaki, V. Karjalainen, M. and Laine, U. K. (1996). Splitting the unit delay: tools for fractional delay filter design. IEEE Signal Processing Magazine, 13(1), 30–60.
  • Schlecht, S. J. (2021). Allpass Feedback Delay Networks. IEEE Transactions on Signal Processing, 69, 1028–1038.
  • Schroeder, M. R. (1961). ‘Colourless’ artificial reverberation. IRE Transactions on Audio, 9(6), 209-214.
Terminology
  • Allpass Filter: filter which does not attenuate the signal, but introduces frequency variant phase.
  • Buffer: Temporary memory storage, usually used when moving data from one place to another.
  • Cascaded Filters: filters arranged in series, creating phase delays.
  • Diffusion: initial build up of echo density.
  • Feedback Delay Network: recursive filters (either allpass, or comb), arranged either in series, or via matrices.
  • Matrices: in mathematics, a rectangular array or table of numbers.
  • Nested Function: in programming, a function which is defined in another. Sometimes by referring back to itself.
  • Phase cancellation: when there is a doubling of a waveform and one of those waveforms is out of phase (flipped 180 degrees) they cancel each other out, returning nothing.
  • Sampling interval: The measurement/ rate of data collection. The sampling interval holds an inverse relationship with the sampling rate. If SI goes up, SR goes down.