[sdiy] Formant filters, yay!

Olivier Gillet ol.gillet at gmail.com
Thu Mar 16 16:14:42 CET 2017

> Incidentally, whether you sync the windowed waveform or not is one of the differences between the several flavours of this type of thing. Some places say you should, other places seem not to bother.

Braids' "Z***" models are exactly that:

You can play with the phase at reset, but also change whether the
windowed waveform is scaled between -1 and 1 ; or between 0 and 1
(with the corresponding adjustment for DC offset) - this will simulate
whether the low frequencies of the window are eliminated or not.

With a bit of work you could continually transition between the
various filter responses. And with a bit of "waveform algebra", you
can also simulate a filtered square or pulse...

On the Cortex M3/M4 I use, it turns out to be more computationally
expensive than synthesizing a band-limited oscillator filtered by a
digital SVF - but it's still a fun technique. It doesn't produce
exactly the same waveforms, since the envelope of the impulse response
of a resonant filter is an exponential, not a linear function.

One more thing: you have to do a bit of work to prevent aliasing. When
the master oscillator resets (when its phase wraps around), the phase
of the slave oscillator must be reset to master_phase /
master_frequency * formant_frequency (not to 0). I have to update
Braids with that!

> Since then I've also done a much more specifically vocal version, again on dsPIC, using five sets of windowed sine waves to generate a full vowel spectrum. The nice thing is that you can add together five sine oscillators, then window the sum, and you get five tuneable formants and one basic pitch.
> It sounded vocal, ish, but I wasn't that impressed. It made a series of AEIOU-type sounds when you twiddled it, but seemed like a lot of work for that result. I've had pretty similar sounds out of a couple of resonant filters.

Individually control the shape / width of each formant's window; allow
overlap to simulate very resonant formants, and you reach the next
stage: FOF!

But I agree that nowadays, these techniques do not really make sense
since it's less computationally expensive to do things with a bunch of
IIR filters or a lattice filter. A couple of updates ago, Braids'
implementation of FOF got replaced by a band-limited pulse filtered by
3 parallel SVF and nobody seemed to notice :)

More information about the Synth-diy mailing list