I’ve put together a new version of the Hordijk Dual Envelope with updated internals – this time with envelope A placed on the right. Since the ADBDR modulation inputs will probably mostly be run via the S&H, it seemed more practical to avoid having the internal patching cross over the knobs too much. I found myself sometimes inadvertently attaching the S&H output to the knobs themselves as I attempted to detach it from the modulation inputs with the previous UI.
Here’s envelope B from the Hordijk Dual Envelope generator, updated as with envelope A, as a little standalone module.
The repeat mode makes for some interesting rhythmic possibilities: On its own, without an incoming gate but with modulation on the attack or release, irregularly fluctuating rhythms can easily be set up. Alternatively, when used in conjunction with incoming gate pulses, slight anticipations or ‘off’ beats that don’t exactly fit the clock grid can be created.
I’ve uploaded a demo patch to the Audulus forum.
Toggle the master clock in the patch to get an idea of how it works.
It’s taken some time, but I’ve managed to get a little closer to the curves I was aiming for with my version of the Hordijk ADBDR envelope generator.
My approach has been to sample the value of the release or decay curve at the moment a new gate pulse arrives, and use that as the starting point for the next attack. (In trigger mode gate pulses arriving before the attack phase has completed are ignored.) In @stschoen’s original uLope modules this was efficiently achieved by using the addition node to add the attack to the release curve, with the disadvantage though of sudden jumps should a new attack arrive during one of the decay phases.
Sampling the value and crossfading between the first and last part of the envelope introduces some tricky timing issues (which I’ve solved by adding an extra timer for the sampled end/start values and introducing a very small delay before the attack phase timer kicks in). One the other hand, having a sampled start value for the attack not only makes it possible to have it pick up on the value of a potential preceding decay phase, but also scale the amount of time allocated to the attack according to the height available, i.e. the higher the attack point starts (depending on the level of the previous decay or release) the shorter the attack time. This also keeps attacks in quick succession that ‘build’ the overall volume from overshooting the top value of 1.
The result is an ADBDR envelope that can be re-triggered at any moment in gate mode, or any moment after the attack in trigger mode. In gate mode the release kicks in as the gate ends, while in trigger mode it’s independent.
Small glitches can still occur from time to time when pushing the envelopes to extremes and I’ve added a low pass filter in an attempt to smooth them out. Generally it seems to be usable though. The next step is to add build it into the Dual Envelope module.
I’ve packed the modified uLope sub-stages into a module that more closely resembles the ADBDR envelope in Hordijk’s Dual Envelope generator.
One of the innovations in his design lies in replacing the sustain section with second decay stage that can slowly taper off, thus allowing for more ‘natural’ sounding contours. With the decay knob turned all the way up, a conventional flat sustain can be achieved. The second decay is also preceded by a break setting that adjusts how far the first decay falls. The resulting shapes are perhaps most easily understood by taking a look at the diagrams in Hordijk’s schematic.
Each stage also has a modulation input that adds to the values set by the knobs. Since modulation is most effective when the pitch of the modulating waveform is lower than the one being modulated, a sample & hold has been included. Hordijk provides a nice explanation of this technique in one of his NOVARS tutorial videos.
I’ve made a further modification to Stephen Schoen’s uLope so that sustain modules can also be added to the envelope chain with the trigger mode activated.
Before I pack it into a module that more closely resembles Hordijk’s design, it’s fun to have all the controls available to experiment with. For example, by setting the first sustain module in the chain to a lower level than the one that follows, it’s possible to achieve a secondary attack-like phase with a resulting ‘reverse’ effect. It’s also interesting to play with the degree to which the curves are logarithmic or exponential, finding the sweet spots for what sounds ‘natural’ – at least in relation to what we know from acoustic instruments.
Hordijk mentions in one of his videos that designing an envelope generator is perhaps the most difficult of all the modules in that there are so many possibilities to consider, and that certainly rings true as I’ve begun to explore it.
In this first small patch I’ve adapted some of Stephen Schoen’s uLope modules to include a trigger mode – i.e. the attack time of the envelope is independent of the gate time. This means that a short trigger can result in a long attack swell, or a short attack can be triggered with a broad gate. It’s a simple feature that opens up a number of possibilities. With the attack time set to longer than the clock rate the envelope generator can suddenly starts to function as a kind of clock divider, as Hordijk points out in his NOVARS tutorial video. With in-between settings, e.g. with the gate setting in before the release stage has completed, interesting rhythmic effects can arise.
Further details on the frequency shifter all-pass filter network:
If one was only dealing with two (sine) frequencies it would be possible to use a single all-pass filter and adjust the cutoff point accordingly. However given that ring modulation typically produces multiple frequencies (especially when applied to a complex input signal) a network of filters is needed to cover the entire audible frequency range.
Via Don Tillman’s collection of Moog Patents I could download a PDF of the Bode Frequency Shifter that Moog produced in the early 70s. That helped fill in the final pieces of the puzzle, showing how the sine/cosine oscillator (which I’d already encountered in Hordijk’s Harmonic Oscillator) connects up with the Hilbert filter network (or ‘Dome Filter’ in Moog parlance) to enable the ring modulation and phase cancellations.
Here’s my first take at putting together a Frequency Shifter in Audulus. Once again, one of Rob Hordijk’s NOVARS tutorials has provided the inspiration and point of departure.
Hordijk describes the frequency shifter as kind of luxury ring modulator – with the added feature that it’s possible to split the upper and lower sidebands and achieve some special transformations through that. In essence it’s a ring modulator and an all-pass filter network, with the filters making it possible to remove one of the sidebands through phase cancellations.
The all-pass filter is something that Hordijk covers succinctly in his video on the Physics of Sound, and I’d already made one on the basis of his description while putting together an Audulus version of his Dual Phaser. While Hordijk provides a good explanation of the principles behind the frequency shifter and a thorough demonstration of his own module, I needed to do a little detective work before I could figure out what was going on with the filter network.
I’ve been fascinated by the Rob Hordijk’s description (in the Sines and Squares masterclass video) of how one might think about sound in three dimensions (rather than the two we are used to on our screens) and how sine and cosine waves can be used to describe the phase and amplitude of a resulting wave, defining its waveshape over time.
He describes it as a corkscrew waveform, also occurring in nature, with the phase describing its rotation, and the amplitude, distance. When viewed on an XY oscilloscope with a slow sine modulating the amplitude of the sine and cosine, it looks like a circle approaching from the distance and receding again. With very low frequencies one can view it as rotating points and get an even better idea of the ‘corkscrew’ effect.
This helps fill out some background on Hordijk’s thinking of sound in terms of depth – for example with his fluctuation waveform, in which amplitude and frequency modulation are combined to provide a special kind of vibrato. Based on a rounded triangle ‘parabol’ waveform, the larger the wave is, the lower the frequency – i.e the lower part of the frequency fluctuation corresponds to the higher part of the amplitude modulation. In his 2015 masterclass on Waveshaping & Fluctuation Hordijk describes this waveform (when modulated) as advancing and receding – giving a perspective effect.
I’ve uploaded a little demo patch (used to create the gif above) to the Audulus forum.
Robert Syrett briefly touched on the subject of Wavefolding in his recent Know your Nodes Audulus tutorial on Phase Modulation. He notes that even in the case of the carrier oscillator having a frequency (ratio) of zero, one can still obtain a result – the carrier can be used as a waveshaper.
As usual, Hordijk takes care to think things through and combine elements in a way that takes it all to the next level. He cleverly adds a crossfader to the waveshaper so that one can easily adjust between the original signal and the folded one – something that can be especially effective when subjected to voltage control. The one side of the crossfader can furthermore be set to point to either the original signal, no signal at all, or the output of the VCA.
The VCA is, as far as I can gather, a bipolar VCA along the lines of the one in his Dual Fader. With an inverted signal equally present alongside the original the two signals cancel each other out – until one introduces some modulation. With modulation at audio rates the resulting ring modulation provides a nice counterpart to the harmonic content generated by the wavefolding.
The waveshaper also works nicely alongside the Harmonic Oscillator since the oscillator lacks the verticals of conventional sawtooth or square waves that don’t lend themselves well to wavefolding.1 Conversely the shaper can add a little more definition to the more rounded shapes of the Harmonic Oscillator, at least in my Audulus version of it.