Hordijk Triple LF-VCO



Here’s my take on Rob Hordijk’s Triple LF-VCO.

The first of the three VCOs is pretty much the same as oscillator A in the Rungler, and so I used @stschoen’s Audulus version of it as a starting point. Oscillator A has a range from around a minute (in this version) to 5 kHz, taking the 3rd oscillator of the EMS Synthi as a point of inspiration. Its special feature is it’s rounded triangle ‘parabol’ waveform (very close to a sine) and the fluctuation modulation that can be applied to it with LFO C as the modulation source. Fluctuation, a combination of frequency and amplitude modulation, makes for a gentler, more natural sounding vibrato than is possible with regular frequency modulation.

LFO C is closer to a more standard LFO with a range from around 60 seconds to 100 Hz. Oscillators A and C are both have bipolar audio outputs and this, in combination with the audio range of oscillator A make them useful in combination with the modulation inputs on many of Hordijk’s other modules, many of which can be used with bipolar signals well into the audio range.

In the version of the Triple LF-VCO demonstrated in the NOVARS tutorial above, as well as the Mallorca demo, LFO C has a selfmodulation feature in which the downward part of the triangle wave can be modulated with the pulse wave that runs parallel with it. This means that the upward slope maintains the set frequency while the downward slope can be slowed down allowing for the creation of an inverted sawtooth-like wave. The pulse width of the accompanying pulse wave is coupled to the upward slope of the triangle, and maintains its width, while the time between pulses (the downward slope) can be stretched to as much as half an hour!

Hordijk has apparently replaced this selfmodulation feature with a sample and hold circuit in his most recent version of the Triple LF-VCO. The S&H is triggered at both the upper and lower peaks of the triangle wave making it possible to create slopes that rise and fall at different rates, again with potentially large differences between them, as was possible with the selfmodulation version. In this case the modulation input for LFO C, i.e. the input for the S&H, is normalized to the output of LFO A, which can in turn be modulated by LFO C, allowing for complex cross-modulations.

LFO B differs in that it generates a unipolar signal, making it suitable for generating envelope-like modulations. Inspired by the LFO on the KORG MS-20 it has a range form around 10 seconds to 100 Hz, and its triangle wave can be skewed to gradually approach an inverted or regular sawtooth shape. As with LFO C the accompanying pulse wave follows the rising slope of the triangle wave, meaning that skewing the triangle also adjusts the width of the pulse wave. I used the skewed triangle LFO in the Audulus library as my starting point, but ended up having to rethink the equation for the triangle wave so that it syncs from the bottom point of the triangle rather than in the middle of the wave (as it does in the Audulus library/docs examples) – in this way both the transient of the inverted saw (when the triangle is skewed that way) and the pulse wave correspond to the beginning of a new sync cycle.

The syncing is an important aspect since LFO B can be synced via a switch with LFO C (which can in turn be synced externally). This makes it possible to easily generate irregular or shuffle-like rhythms. The switch can also be set to a hold position so that on each downward slope of LFO C the pitch of LFO B is frozen until the point at which LFO C changes to an upward slope, at which point LFO B continues from the point at which it left off, making it possible to create interesting step-like modulations. Hordijk provides at good demonstration at the close of the NOVARS video above. (The switch in my Audulus version doesn’t maintain its state when closing the patch, and so I’ve chose to have the free, ‘mode’ position at the top, followed by the sync and hold setttings in descending order.)

For schematics and further information see: thehordijkmodular.blogspot.com

RH-RM Triple LFO original version.audulus (97.6 KB)

RH-RM Triple LFO S&H Version.audulus (107.4 KB)


Super cool!

I also like your approach to making a skew function in the variable duty cycle ramp/tri/saw wave.

I am curious did you arrive at the feedback loop through experimentation or was it derived from the analog design?

I just kind of hacked mine together by visualizing slopes:

Also, I’m happy to see some Schmitt trigger modeling. It’s an oldie but a goodie.

Definitely looking forward to trying this out. :grin:


The feedback loop is from @biminiroad’s skew triangle LFO in the Audulus library (and I guess Hordijk has a version of it in his harmonic oscillator). I had to fiddle with it a bit though to get the syncing to correspond with the beginning low point of the triangle – couldn’t get it to work but then I remembered the fract function from your Know Your Nodes video on phase modulation and that did the trick.


The fract function is such a handy tool.


An interesting problem with LFO B is including the incoming sync impulse in the pulse wave output. In an effort to improve this I’ve replaced that Schmitt Trigger that I was using to generate the pulses off the (skewed) triangle wave, with an equation (linked to the skew knob) running off the phasor.

The incoming sync impulse is however still not included if it occurs while the pulse positive, i.e while the triangle wave is ascending: In that case a sync impulse extends the width of the pulse rather than generating a new one. I’m not sure how to solve this. It could be seen as a feature though, rather than a bug, as could the full exclusion of the sync impulse in my first Schmitt trigger version.

Here’s a demo with the LFO B pulses pinging the TwinPeak filter. It can be fun to switch through the sync and hold modes for further rhythmic variations.

RH-RM Triple LFO Ping Demo.audulus (347.6 KB)

RH-RM Triple LFO S&H Version 1.1.audulus (89.6 KB)