A little over a year ago I set about recreating Rob Hordijk’s modular system in @Audulus. You can follow that journey in podcast form here: huffduffer.com/rudigermeyer/tags/modular-diary, or here: rudigermeyer.com/notes/2019-03-01-12-00-49
A background project that I’ve been busy with during the course of the last few months has been making recordings of the demo patches that I’d put together for my series of Audulus Hordijk Modules. After adding those to the respective posts on my site it occurred to me that it might be fun to record the texts and combine them with the examples, creating audio versions of the posts that could then be made available via a podcast feed.
As is often the case, it took a little longer than anticipated to get everything in place, but it’s finally done – hopefully useful as a little review of the project.
Here’s the link should you be interested in listening to them in a podcast player: https://huffduffer.com/rudigermeyer/tags/modular-diary/rss, or check it out on HuffDuffer where there are also links to open the feed directly in various podcast apps (should you be on a mobile device of some kind): https://huffduffer.com/rudigermeyer/tags/modular-diary.
It’s also possible to follow through all the entries on my site, which also includes the individual audio examples, starting here: https://rudigermeyer.com/notes/2018-03-24-17-12-30
Following on my post on bipolar VCAs: Since there are some similarities between what’s going on with bipolar amplitude modulation and through-zero frequency modulation I thought I’d take another look at these topics in a little more detail.
Learning Modular has a nice post on Understanding the Differences Between Exponential, Linear, and Through-Zero FM, and from there I revisited @RobertSyrett’s Know your Nodes video on Comparing different types of FM.
One aspect that through-zero FM and bipolar AM modulations have in common is that they don’t freeze (or shut-off) output when the modulation signal falls below zero. Both do this by inverting the waveform in question. In the case of TZFM it is not the amplitude that is inverted but the phase of the waveform: In the Learning Modular video Chris Meyer describes this inversion as the oscillator ‘running backwards’ while @RobertSyrett in his Audulus demonstration talks of a reversal of the direction in which the waveform is being read. This means that there can be sudden changes in the direction of the waveform (in addition to it being sped-up/slowed-down) but without the potential jumps at the point of inversion that can occur with bipolar AM.
With both types of modulation sidebands are generated and this results in a change in the harmonic content of the waveform. In my previous post I noted Chris Meyer’s demonstration of the way in which the fundamental of the carrier falls away as bipolar AM (ring) modulation is increased, but remains present with amplitude modulation. Similar processes are at play in FM (of all kinds) and I came across a series of old Sound on Sound articles, one of which includes an good explanation of how the Bessel function can be used to describe the amplitude of each pair of side bands, and how they relate to the strength of the other partials and affect the relative strength of the fundamental.
@RobertSyrett demonstrates in his video how with TZFM sweeping the frequency also changes the character of the Bessel function (i.e. the timbre of the sound), while with PM the character of the Bessel function is uniform across the frequency range since the phase is not calculated in relation to the hertz value of the modulator – i.e. the timbre/harmonic structure of the waveform stays the same across the frequency range.
Phase modulation differs from TZFM in that the modulating waveform also changes the starting point of the carrier waveform. With TZFM the carrier remains in phase with modulating signal (through a continuously morphing Bessel function).
(I’ve also posted this on the Audulus forum.)
Rob Hordijk includes bipolar VCAs1 as part of both the Mini Matrix Node Processors and the Dual Fader and has demonstrated, in his various tutorials on these modules, the ring modulation effects that this makes possible.
Via a recent Reaktorplayer tweet I came across a nice Learning Modular tutorial demonstrating the difference between amplitude and balanced (ring) modulation.
Towards the end of the tutorial there’s also a nice demonstration of the way in which the fundamental of the carrier falls away with ring modulation but remains present with amplitude modulation.
I’ve uploaded some simple demonstrations using my Audulus versions of both the Mini Matrix - Node Proc and the Dual Fader to the Audulus forum.
I thought I’d gotten through all the Hordijk Modules, but of course there’s always one more thing…
Hordijk’s Mini Matrix – Node Proc
Inspired (like much else with Hordijk) by the EMS Synthi/Putney he gives his own take on the use of a matrix within a modern context.
Hordijk’s innovation is to use the well established technique of using a stereo cable to provide an insert point, here applied to each node in the matrix. This means that instead of a simple on/off connection, a level control or other kind of (more complicated) effect/processing can be applied to each node. Hordijk includes two level knobs as well as some ‘node processors’ alongside the matrix ready to be patched in for this purpose, but external sources can but used just as well. Concerning the size of the matrix itself (and the balance between flexibility and usability) he finds that a 6 x 4 grid is well suited to a typical 12 module (4 panel) Hordijk system since connections can also be made directly without necessarily having to go through the matrix.
I’ve been experimenting with how to set up something similar in Audulus: Stereo cables, the key element, are possible in Audulus, but unfortunately only in a single direction, i.e. it isn’t possible to use a single cable for both a send and a return. This means that one has to resort to manually making both parts of the connection, which is not quite as elegant as a single stereo cable and can easily get visually messy and confusing, even though it does open up even more possibilities for routings. (One trick that I’ve found useful to check on which connections have been made, is to zoom out slightly so that one shifts out of connection mode on iOS.)
Following Hordijk’s example, I’ve included 4 bipolar VCAs (using @RobertSyrett’s Audio Attenuator) for the ‘node processing’ – bipolar for the ring modulation and echo-like effects that they make possible, as with the Dual Fader. In my version VCAs 1 & 2 have controls to adjust the amount of modulation applied via the modulation input1, and 3 & 4 have controls to adjust the offset, which also makes them useful for scaling unipolar modulation signals.
As Hordijk points out a matrix can be useful not only for mixing signals, but also distributing them (multiples2), as well as creating complex (multiple) feedback loops.
I’ve posted a simple demo on the Audulus forum, as well as a basic version without the node processors.
This follows the version demonstrated in the Mallorca video – in the later NOVARS tutorial it appears the it is the modulation signal that can be inverted with a straightforward (non-centred) level knob for the VCA. ↩
Through clever use of mono and stereo cables Hordijk’s matrix can be used to mix signals as well as create multiples. ↩
Here’s a take on Rob Hordijk’s 24dB Filter – the last in my series of Audulus versions of his modules.
As usual Hordijk gives his own take on the classic Moog 4-pole ladder filter, creating a multimode filter through the addition of high-pass and band-pass inputs all mixed to a single output (rather than a single input with multiple outputs). This arrangement makes it possible to use the filter as a kind of mixer and spectrally cross-fade between the (independent) input signals.
One can also connect the same signal to all of the inputs1 and use the input controls to shape the curve of the filter. Ideally if the low- and high-pass inputs are set to the same amount they should complement each other and the cutoff frequency (and feedback resonance) should have no effect on the sound.2 Unfortunately, despite some head-scratching and various attempts, I haven’t managed to get this aspect to work, and one can hear a peak when sweeping though the frequency range. The high-pass with the cutoff frequency all the way to the left does however match the low-pass with the cutoff frequency all the way to the right, and spectrally crossfading between two different signals works well. With the same signal applied to all inputs the cutoff frequency (and potentially resonance) is clearly apparent on the band-pass input which can be used as a kind of equalizer.
Hordijk provides a good explanation of the principles on which the ladder filter is based in his NOVARS tutorial, and with that clear starting point I took the opportunity to dive into the The Art of VA Filter Design by Vadim Zavalishin – the ‘Bible’ of digital filter design as @stscheon puts it – as well as @stscheon’s Introduction to Digital Filters. I found the Introduction useful as an accessible complement to Zavalishin’s in-depth explanations with some good examples of Zavalishin’s diagrams patched in Audulus.
On the basis of @stscheon’s explanations I replaced the LPFs in the 24dB ladder filter with LPFs based on the Audulus LowPass node – and they indeed turn out to be more efficient. Comparing the node-based 1-pole low-pass filter with the patched version from the Audulus Module Library shows that they are almost identical: the node version does however have a slightly stronger attenuation – c. 2–3dB above 10 kHz, or thereabouts. This difference meant that in the 24dB filter the high-pass with the cutoff all the way to the left was slightly brighter than the low-pass with the frequency all the way to the right, and I ended up reimplementing the patched 1-pole LPFs in order to achieve the same brightness. (See above.) 3
Zavalishin interestingly describes (in Chapter 4.4) some of the multimode functionality that Hordijk builds on, warning however that:
The multimode functionality of the ladder filter is a rather exotic feature. If you’re looking for the bread-and-butter bandpass, highpass, notch etc. filters, you should first take a look at the multimode 2-pole state-variable filter discussed later in the book.
Exotic or not, Hordijk’s inclusion of independent inputs that simultaneously combine to a single output provides some unique functionality with the ability to spectrally crossfade between them. Although there is a diagram available on The Hordijk Modular Blog I’ve nevertheless been unsure of the details on how to combine the various filter modes. I’m not sure if I’ve solved this in the best way – but, with the exception of the HP and LP inputs perfectly complementing each other, it seems to cover the functionality that Hordijk demonstrates in the NOVARS video. Regarding the LP/HP asymmetry, my guess is that the four 1-pole LPFs each need to be converted to a HPF to achieve a ‘true’ HP ladder filter as Zavalishin explains in chapter 4.5 of The Art of VA Filter Design. The problem though is then how to maintain the LP signal simultaneously – unless one has a parallel ladder of filters… (which would seem to defeat the point of the design)?
An additional feature of Hordijk’s module is the addition of some subtle tube-like distortion that can help boost the resonant feedback peaks. He favours an all-harmonic distortion rather than one that only boosts the odd harmonics – as is the case with soft clipping and some tube-distortion models, as well as the tanh saturation that Zavalishin suggests in his diagrams. Hordijk generates his distortion through a process of FM feedback and I experimented with achieving something similar building on the techniques that I’d tried out in the Audulus version of his VCA-Shaper and Harmonic Oscillator. In the end I settled on using the JFET VCA in the Audulus library for the subtle all-harmonic distortion4 that it can provide (the Audulus Tube VCA provides odd harmonic distortion).5
The JFET distortion does however introduce a strong fundamental when applied to the high-pass input even though it is effective in boosting the peaks. The introduction of lower frequencies when resonance is applied to the high-pass is however a general problem with the ladder filter design and I haven’t found a satisfactory countermeasure (such as introducing a HPF in the feedback loop, as Zavalishin suggests) given the multimode nature of the module. Nevertheless, despite the rough edges in my version, I find it an effective and fun way of blending and shifting between different signals or different spectral areas of the same signal.
I’ve uploaded the module and various demos to the Audulus forum.
Hordijk has the low-pass input normalized to the high- and band-pass inputs. In my Audulus version those connections have to be made manually. ↩
The description in the Audulus docs of the LowPass node having a 12dB rolloff per octave had me confused at first since it matches the 6dB rolloff of the patched 1-pole filter. The 12dB rolloff does however apply to the Filter node. ↩
I’ve stuck to the standard (clipping) distortion SVG icon, even though I realise that it’s a little misleading in this case. ↩
I’m keen to do a little more experimentation with different saturation possiblities that Zavalishin diagrams for the standard ladder filter, some of which @SansNom has already explored – see the thread on the old forum. ↩
Here’s my take on an Audulus version of 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 recreation of it as a starting point. Oscillator A, taking the 3rd oscillator of the EMS Synthi as a point of inspiration, has a range from around a minute extending all the way up to 5 kHz, well into the audio range. Its special feature is a rounded triangle ‘parabol’ waveform (very close to a sine) and the fluctuation modulation1 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, and since the amplitude varies, opens up for interesting modulations when combined with a waveshaper.
LFO C is closer to a more standard LFO with a range from around 60 seconds to 100 Hz. Both oscillators A and C have bipolar audio outputs and this, in combination with the wide range of oscillator A, makes them useful in combination with the modulation inputs on 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 both the NOVARS tutorial and 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 something approaching an inverted sawtooth 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 the pulses (the downward slope) can be stretched to as much as half an hour! 2
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 modulation generator on the KORG MS-20 it has a range from 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 of the possibilities in his Mallorca demo as well as at the close of the NOVARS tutorial video.3
I’ve uploaded both the S&H and selfmodulation versions to the Audulus forum.
For schematics and further information see: thehordijkmodular.blogspot.com
In the hardware version the LFO C pulse wave is normalized to the modulation input of LFO C – in my Audulus version this ‘internal’ connection needs to be re-connected manually if broken when connecting an external modulation source.) ↩
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 settings.) ↩
I’ve taken a few extra steps with my Audulus version of the Hordijk OSC SYNC. As much as I’d enjoyed the wide range that came with not having any tracking between the syncing and synced oscillators, I realized of course that as soon as sequencing is introduced, tracking becomes desirable/necessary. Along with a tracking switch allowing selection between full, 2/3, or 1/3 (around ‘c.v.’ = zero as a reference point), I also added an external input for the sample and hold. 1
Using external modulation with the S&H allows for some interesting effects. I’ve uploaded two demo patches to the Audulus forum: In the first the TwinPeak filter is pinged with low pulses creating a resonant percussive sounds. It’s fun to explore the different timbral results that can be obtained by simply changing the tracking setting. The second patch creates an arpeggiator like effect – with this one it can be fun to turn up the modulation dial and/or add some subsquare modulation.
It’s also possible to achieve some granular-like effects with external modulation on the S&H – as Rob Hordijk demonstrates in this video.
In the absence of normalized inputs in Audulus there’s also the output that needs to be connected to the S&H input when using the internal signal. ↩
I’ve put together a full version of the Hordijk Sync Oscillator. As usual Hordijk has taken things a step further and turned the irregular transients that were smoothed out with the masking technique, to good use. The transient heights are captured with a sample and hold circuit, and can then be fed back to either the synced oscillator (which generates the well known random S&H pitch effect) or the syncing oscillator (which will change the rate at which the pitches are generated). The combination of the recursive pitch and tempo modulations means that Krell or Rungler-like textures (venturing into noise territory) can easily be generated.
Rob Hordijk provides a nice explanation of how the (true) randomness is generated in his NOVARS tutorial on the oscillator.
An additional aspect is the inclusion of a subsquare divider which can be used to modulate the synced oscillator on every alternate sync cycle. This can be used for the creation of vowel like effects, as well as adding a little bottom end to the synced sounds.
The sample and hold signal can also be applied to the subsquare modulation, and the sync sawtooth, subsquare, and S&H signals also have their own outputs.
I’ve uploaded two demo patches to the Audulus forum.
I’ve put together a first tryout patch exploring Rob Hordijk’s sync oscillator, in particular the masking feature he describes in his NOVARS video tutorial on the module.
The first step in syncing the two oscillators was to invert the syncing sawtooth so that the synced waveform shares its transient with the sawtooth. If the two Audulus oscillator nodes are synced directly, the transient of the synced oscillator will appear in the middle of the syncing oscillator’s sawtooth. Since the synced oscillator is reset whenever the input crosses zero from below, the rising slope of the sawtooth resets the synced waveform when it (the sawtooth) reaches its zero midpoint. With the inverted sawtooth the slope crosses zero from above and doesn’t reset the oscillator until is crosses from below at the point of the transient.
I was particularly intrigued by the masking feature Hordijk describes in the video. In this case the inverted sawtooth is converted to a unipolar, positive only, waveform and used as an envelope applied to the synced oscillator. This means that the transient points of the synced waveform correspond to the zero point of the envelope and, importantly, are always the same size – effectively reducing that unwanted side-effect of the introduced transients.
Some more information on the masking technique can be found in one of Hordijk’s tutorials for the Nord Modular, as well as on his own site. As the Nord tutorial points out, the masking, while smoothing out the transients, also introduces a distortion of it’s own, and suggests crossfading between two versions of the synced waveform slightly out of phase with each other in order to minimize this side-effect.
In the case of this tryout I’ve kept things simple. I find the masking particularly effective in the case of the triangle wave – it’s interesting to compare it with a version in which the inverted envelope is replaced by setting the amplitude to full on the oscillator. With the sawtooth the mask side-effects are more noticeable, and since there are so many transients in the wave already I find it somewhat smoother to simply set a fixed amplitude for the synced sawtooth. Using a mask for the amplitude does however make for a smoother crossfade between the triangle and sawtooth waves and also allows for some interesting effects at low frequencies where the envelope is more apparent as an envelope.
I’ve uploaded the patch to the Audulus forum.