Starthief's custom units: Feedback Keeper, Complex Osc, Wavefolder etc

Thought I would start a topic to share the custom units I’ve built. None of them are extremely fancy or clever or groundbreaking, but I like them and find them pretty useful. :slight_smile:

These were all built on firmware 0.4.11.

Feedback Keeper: Put this inside a feedback loop along with a reverb or delay, to automatically maintain “safe” infinite sustain. There’s a fixed HPF in case anything within the loop adds a DC offset, an envelope follower inversely controlling a biased VCA, and a further limiter and manually/externally controlled VCA. Because every feedback loop is unique I can make no guarantees – sometimes you’ll need more limiters or attenuation in other places throughout the loop – but I’ve used the technique many times in hardware and successfully used this custom unit in a few patches.

FB Keeper.unit (7.1 KB)

Complex Osc: this is a simple ER-301 take on the style of complex oscillator I prefer to work with, with options for both linear and exponential FM, AM, automatic tracking between the two oscillators with the offset exposed at the top level, and a feedback control for other timbral variation. (I considered a sine-triangle crossfade, but in practice I work mostly with sines anyway and I wanted to keep this a simple “complex” oscillator :laughing: You can easily dig in and substitute the aliasing triangle or something else in place of a sine oscillator, of course.) Exponential FM does not generally combine well with linear or dynamically changing the depth, and you have to match depth and frequency if you want it to be harmonically nice – but it can give somewhat different results and I think is worth playing with.

Complex Osc.unit (21.2 KB)

LPG: it’s got some quirks, and is possibly not the most natural of gates :slight_smile: but I kind of like its characteristics. The envelope is a Skewed Sine that feeds back into its own level for an interesting shape, but honestly I assign an external envelope or a gated ADSR as often as not. The business end is just a simple low-Q ladder LPF and VCA in series.

LPG.unit (12.5 KB)

Crossfade: simply enough, a 2-Band unit (not a Custom Unit preset) with a mix control that opens one VCA while closing another. I used it in the Wavefolder unit.

xfade.unit (4.7 KB)

Wavefolder: based on a sample scanner with a single-cycle sine, plus the plumbing to control the folding mix level as well as intensity and “symmetry” (sample scanner width). It will expect the file \samples\Adventure Kid\AKWF_bw_perfectwaves\AKWF_sin.wav to be on the card, but you can redirect it to any single-cycle sine you happen to have, or replace the sample for different folding character. I like it as it is though, and it sounds pretty nice after the LPG with no need to modulate it (as non-traditional as that may be). But one could also dig into the modulation osc from the complex oscillator and assign that to fold amount – or to go much crazier, the “symmetry” control.

Wavefolder.unit (13.9 KB)

Wavefolder 2: this is an improved version. Instead of a sine, it uses a hand-drawn approximation of the transfer function of the middle stage of a Serge wavefolder. It’s probably a little bit disturbed by the crossfade setting I used, but that helps stop really harsh clipping (in a “real” circuit that function would not wrap around as it does here) There are two stages, because that sounded good to my ears, but you can copy and paste the Sample Scanner if you want to try more. I also merged the mix and fold controls into a single one for convenience so that no settings on it are silent.

Wavefolder2.unit (15.1 KB)

The required /ER-301/samples/serge_stage.wav


You have been busy :star_struck:


Guess it’s time to update the firmware… :smiley:

1 Like

Amazing units! Love the complex osc :metal:

1 Like

Thanks for posting, I’m particularly interested in your feedback unit, will have a go today👍

I might update the wavefolder later on. I tried A/B testing it with an Antimatter Audio Crossfold to decide whether I could let that one go, and my version doesn’t compare very favorably :thinking: Adding a second stage of the sample scanner in series helps a bit but I’m going to spend some time tweaking it further, I think. Even just choosing a different sample for the scanner could be the key :slight_smile:

1 Like

…updated with the new wavefolder, which was easier than I expected thanks to other peoples’ research. :grinning:


Thanks for the units and Serge wave folder journal. That was very informative. I have a few questions about your implementation.

I was taking a peek at your Serge transfer function waveform which looks solidly like the one referenced in the journal. However, do you get discontinuities at the end of the single cycle waveform as it snaps back to zero? From the journal, it looks like it continues linearly past 1.5v.

Could we get better results if we expand the sample to an arbitrarily larger range than a single cycle?

I see, in the sample scanners, there is a 0.25 fade, I’m assuming to round off the quick jump to zero?

Yeah, there’s a discontinuity. The sample scanner seems to wrap around as the gain exceeds its expected maximum. The fade value I added was sort of a fudge factor against that – it’s not ideal but it sounded good to me in terms of sound, and I found that more important than mathematical correctness :grin:

After I posted Wavefolder2, I experimented with using the sample scanner for tanh() and encountered the same problem. I found that a limiter in front of the sample scanner can prevent it. Again it’s probably going to mess with the curve a little bit, but the overall effect is what I wanted.

There might be a Wavefolder3 (or more) in the future if I keep messing with this…

1 Like

I have modified the complex oscillators unit to use phase modulation.

complex osc 004.unit (40.1 KB)


I originally was going to include PM as well as linear and expo FM – but I removed PM since it seemed identical to linear FM.

But now I find that (as I said over on Lines), if you used carefully tuned expo FM, adding linear FM is going to mess up that tuning – but PM does not. :+1:

I’ve been missing my “real” complex oscillators lately and trying out different setups in the ER-301 to see if I can recapture some of their feel. I tried running oscillators separately on channels 1 and 2, using the outputs instead of locals as modulation sources, to allow cross-modulation. That didn’t quite give me what I wanted, and I figure I’m probably going to trade a couple of my other modules for a DPO or Cs-L at some point (leaning toward DPO).

But this change adds more timbral possibilities, which I appreciate :slight_smile:

Another small change I like is shifting the f0 of the modulation oscillator just a little bit (I set it to 27.407Hz). That way there’s just a little bit of beating between the two by default, bringing it a bit more to life, without having to carefully adjust the mod frequency at the top level.


working with @adrianf on the addition of his complex osc with pm to the wiki list of presets
he came up with a newer version of it, which i’d like to share here in the thread so i can link to it
in the wiki later:

complex osc 010.unit (73.3 KB)


I’m currently going through Curtis Roads’ The Computer Music Tutorial for inspiration.

Here’s a very simple VOSIM oscillator. I implemented it as a unipolar sine oscillator which is AM’d by a synced inverted, cubed saw. The main “Tune” input controls the saw while “Formant” controls the sine frequency (the main source of timbral variation) and “Phase” offsets it from the sync – for tweaking if the sound is unpleasantly buzzy at important frequencies, or for phase modulation by a separate oscillator, which can give stronger “jaw harp” compound formant effects when slowly modulating the Formant parameter.

This unit requires the Aliasing Saw unit from Accents, and the sample /samples/functions/xcubed.wav

VOSIM.unit (13.5 KB)

(I should note it’s not really “proper” VOSIM, which should have some control over the spacing of the downward ramping pulses. But it does generate some variety of timbres.)


Also here’s my own 2nd version of my complex oscillator – I kept it as simple as the first and left the same structure but simply substituted PM for linear FM and gave the frequency a very slight offset. :slight_smile:

ComplexOsc2.unit (22.8 KB)


thank you ! gonna check this out when i have time !