Spline based wave folder


Wave Folder

I’ve been playing around with Softube’s virtual copy of the Buchla 259e Twisted Waveform Generator and I got curious about the wave folder. I found the following paper: http://www.dafx17.eca.ed.ac.uk/papers/DAFx17_paper_82.pdf
A diagram in the paper led me to building a wavefolder using a spline node. I didn’t attempt to reduce the inevitable aliasing, but I think it has a interesting character. In the original hardware, the folder is driven by a sine wave, but I thought this might be more flexible. I also added a cross-fade with the unfolded wave since at a fold level of 0 there is no output from the folder. It’s a bit of a kludge, but it sounds OK.
I’m hoping to eventually be able to recreate these drones using Audulus:
07/25 Version 2.0 removes the cross fade and adds multiple folders. An “order” control crossfade between 4 different folders with increasing folds.


Input Signal Range Notes
audio in -1 to 1 higher amplitudes cause more folding

Output Signal Range Notes
audio out -1 to 1


Control Function Notes
sym symmetry controls the symmetry of the output waveform - 50% is symmetrical
order wavefolder order controls the number of folds (V2.0 only)
fold folding amount controls both the folding amount and the crossfade

Version History

Revision File Date Notes
2.0 Wave Folder V2.0.audulus (34.8 KB) 07/25/2019 added order control and revised folder scaling
1.0 Wave Folder V1.0.audulus (8.7 KB) 07/24/2019 initial upload


Revision File Date Notes
2.0 Wave Folder demo V2.0.audulus (50.8 KB) 07/25/2019 added order control and revised folder scaling
1.0 Wave Folder demo V1.0.audulus (24.7 KB) 07/24/2019 initial upload

I chose to use a spline rather than expression nodes primarily to reduce CPU usage. Small changes in the position and number of the control points can have a fairly dramatic effect on the sound. I tried to mimic the diagram in the paper to approximate the Buchla sound, but other configurations also work well. I intend to use this as a building block for a complex oscillator in the Buchla style. @RobertSyrett has posted some excellent west-coast style synth modules and I hope to follow in his footsteps.
West Cat Oscillator
1-Toast (after the 0-Coast)


Looking forward to the STS-flavored complex oscillator that you’ll cook up eventually! Thanks for sharing!

1 Like

Cool! Btw, one of the wavefolders in Buchaudulus is a spline-folder that Robert Syrette whipped up in response to my posting that paper a while back!

1 Like

Isn’t it driven by the mix of those special waveforms 1-5 and a b c?

1 Like

In the case of the 259e the 1-5 and a-c waveforms are actually wavetables which are scanned using the sine wave generated by the primary oscillator. It isn’t clear whether the morph function drives a wave folder or indexes the wavetable. Either way, the end result is a folded wave. I suspect that it’s all wavetable based since that would be the simpler approach. With interpolation it would be difficult to tell the difference. Unlike its analog predecessor, the 259e is unmistakably digital and the original unit has quite noticeable aliasing artifacts. The wave folder I built is modeled on the one in the analog 259 unit which is basically similar but has a wave folder section rather than a selection of waveforms and the modulation oscillator can modulate pitch, amplitude and timbre.


Imitating the analog model’s sound, in my opinion, is the right move. A friend has owned both the digital and analog versions and though I think he only has the digital version now, prefers the analog model.

I would agree. The 259e has it’s charm and I’ve really enjoyed fooling around with Softube’s clone, but the analog original has the edge IMHO. Of course either way I’m sure that it will be difficult to reproduce the “Buchla” sound, so I’m intentionally not trying to clone the original. I want to make something in the same vein but I don’t expect that it will sound much like the original. The aliasing issue with the wave folder alone makes it almost impossible to duplicate the 259’s analog sound. If you read the paper, they use a rather sophisticated approach to ant-aliasing in their model and still have to use 8x oversampling to reduce the aliasing to acceptable levels. My hardware only goes to 192K and 8x of 44.1K would be 352.8 kHz. I don’t know what Softube Modular uses as it’s internal sample rate but it runs at 60 - 70% CPU in Ableton on my machine. They have faithfully reproduced the aliasing behavior of the 259e or at least that’s what they claim. Definitely fun to play with. I’d love to get a chance to play with a real Buchla 200 system but I don’t think it’s very likely.

1 Like

A little clarification from Softube site: “the sine wave generated by the Principal oscillator is simultaneously applied to two of the eight available waveshape tables”.

“A morph voltage pans between the two tables and a warp voltage varies the amplitude of the sinusoidal (driving) waveform”.


In the original 259 Complex Wave Generator the modulating oscillator can modulate amplitude, pitch and timbre. The 259e replaces the timbre/symmetry/order section of the 259 with the wavetable section and the modulating oscillator can crossfade between the two sets of tables(morph), and by varying the amplitude create more or fewer folds in the output (warp). The original 259 timbre circuitry is quite complex and I’ve had difficulty finding out much detail.

1 Like

I think there are schematics out there. Check out this blog, it’s full of interesting tidbits. Maybe the guy could answer your specific queries if you ask politely.


I would suggest scaling the input signal so that it resides within the central area of linearity. I’m not sure that’s more CPU efficient, but it’s what the 0-Coast does to keep it’s wave-folder from fully closing. The DPO and most other complex oscillators allow the wave folder to fully close so that it can be used as a special-sounding VCA. A wet/dry mix is also very nice with wave folders, as sometimes they can be very buzzy and a little goes a long way.

1 Like

I found some schematics but they’re a bit hard to decipher. In any case AFAIK Buchla’s approach involves folding triangle waves then smoothing the resulting waveforms. I decided to go a different route with my oscillator. I decided to scale the input to keep the folder from closing rather than use the crossfade. I also scaled the output and ran it into a tanh() limiter to round the peaks and reduce the aliasing somewhat. I built 4 different splines and used a 4 way crossfader to allow different “orders”. I’ll post it soon.

1 Like

What the heck?! I was just messing around with adding tanh(x) to the input myself. Tanh(x) must be in the air right now.

1 Like

I added it to the output. I scaled the output to slightly more than -1 to 1 then used the tanh() to clip the result.

1 Like

Posted the revised versions.


Very interesting indeed. I like the interpretation of what order is.


I’m not sure exactly what the order control does on the Buchla unit so I punted. I think it controls the number of folds.