Ridiculously Complex Waveform Generator
This was inspired by Softube Modular’s virtual recreation of the Buchla 259e Twisted Waveform Generator. The original 259e hardware was a digital version of the all analog Buchla 259 Complex Waveform Generator and was wavetable based. Since Audulus doesn’t lend itself well to wavetable synthesis I decided to take a blended approach. This is not an attempt to clone either Buchla unit, but a complex oscillator in the same general style.
The unit consists of a modulating oscillator and a pair of primary oscillators. Each oscillator is basically of the same design. The oscillators feature a selectable waveform that crossfades between sine, triangle, saw and square waves. The saw and square wave also have a shape control which in the case of the saw introduces a second saw peak and in the case of the square wave varies the pulse width. Each oscillator has a frequency and fine tune control and the primary oscillators have an amplitude adjustment. There is also a linear FM input with a level control (ndx) and a sync input for each oscillator. There is a drift level and rate control which causes the oscillators to vary in frequency over time similar to an analog oscillator.
The output of the primary oscillators is fed into a pair of wave folders with fold, order and symmetry controls. The outputs of the folders are crossfaded using the morph control and sent to the main output.
The modulating oscillator has three frequency range settings. Low is from 0.05 Hz to 220 Hz. High is from 27 Hz to about 7k. The third range is identical to the high range but tracks the “o” input. In this case the frequency control becomes an offset. There are three modulation targets, pitch, fold and morph which can be selected in any combination. The modulation is bipolar and the pitch modulation is linear. The mod ndx knob controls the depth of modulation. The morph and fold controls are unipolar so the combination of the modulating signal and the knob is clamped between 0 and 1. There is a modulating oscillator output as well.
7/26 - version 2.0 - I added a fifth waveform to each oscillator. It is a 16 step random wavetable. There is a “?” input associated with each oscillator. A high pulse on this input will load a new random pattern into the table. The waveform is low-pass filtered to prevent excessive high frequency noise.
I also added a separate sync input and pre-folder output for each primary oscillator and misc. bug fixes.
7/27 - I decided that even though the trigger buttons worked well to select the range and modulation targets, the fact that they reset when the patch was reloaded made them a bit of a pain, particularly if you want to share a patch. I replaced them with knobs since they save their position. I also redid the sync circuitry on the oscillators to improve the sync behavior and fix a few bugs.
7/28 - I moved the individual outputs of the primary oscillators post folder and added a pre-folder square wave out mostly for sync use. I modified the low range filtering on the modulation oscillator to reduce clicking.
08/13 - V3.0 Rearranged the knob layout so that the knobs on the two primary oscillators are the same rather than mirrored. Improved tuning circuit with “tuned” indicators. Note that the tuning indicators are before the drift circuit so if you want exact pitch you need to set drift to zero. I fixed some bugs in oscillator sync circuit.
I/O
Input | Signal Range | Notes |
---|---|---|
o | 1 per octave |
primary 1 per octave frequency input. With the freq and fine controls at 50% 0 is 440 Hz. |
sync | 0-1 pulse |
hard sync input for each oscillator syncs on the leading edge. |
fm | -1 to 1 |
linear FM input for each oscillator |
? | 0-1 pulse |
reloads the random wavetable with a new set of random values |
Output | Signal Range | Notes |
---|---|---|
mo | -1 to 1 |
modulation oscillator output |
main | -1 to 1 |
main oscillator output |
![]() |
-1 to 1 |
primary oscillators square wave |
o1 | -1 to 1 |
primary oscillator 1 output post-folder |
o2 | -1 to 1 |
primary oscillator 2 output post-folder |
Controls
Control | Function | Notes |
---|---|---|
** | Oscillator Controls | ** |
shp | modifies the wave shape |
this only affects the saw and square waves |
wave | selects the wave type |
smoothly changes from sine to triangle to saw to square to random |
freq | frequency control |
range is 8 octaves - 50% (0.5) is tuned to a-440 |
fine | fine tuning |
+/- 1 semitone |
ndx | FM index |
adjusts the level of the signal input to the “fm” input |
drift | oscillator drift |
sets the depth of the random frequency drift of the oscillators |
rate | drift rate |
controls how fast the oscillators drift. |
** | Main Oscillators | ** |
sym | symmetry |
alters the symmetry of the folder - 50% is symmetric |
order | folder order |
controls the number of folds for a given fold setting. |
fold | folds the input waveform |
|
mrph | morph |
morphs (crossfades) between the upper and lower main oscillator |
** | Modulation Oscillator | ** |
range | frequency range |
low, high and high with tracking (trk) |
mod | modulation target |
selects any combination of pitch, fold and morph or none |
Displays
Meter | Displays | Notes |
---|---|---|
tuned LEDs | indicate when tune and fine knobs are at default |
|
waveform LEDs | shows the selected waveform |
|
range LEDs | shows the selected frequency range for the modulation oscillator |
Version History
Revision | File | Date | Notes |
---|---|---|---|
3.0 | Ridiculously Complex Waveform Generator V3.0.audulus (372.3 KB) | 08/13/2019 | new knob layout and improved tuning, bug fixes |
2.5 | superceded | 08/10/2019 | fixed reversed amp knobs |
2.3 | superceded | 07/28/2019 | fixed misconnected square wave out |
2.2 | superceded | 07/28/2019 | new version (see above) |
2.1 | superceded | 07/27/2019 | replaced triggers with knobs, bug fixes, improved sync(see above) |
2.0 | superceded | 07/26/2019 | new version (see above) |
1.0 | superceded | 07/26/2019 | initial upload |
Demos
Revision | File | Date | Notes |
---|---|---|---|
3.0 | Ridiculously Complex Waveform Generator demo V3.0.audulus (906.6 KB) | 08/13/2019 | new RCWG version |
2.5 | superceded | 08/10/2019 | new RCWG version |
2.4 | superceded | 08/09/2019 | replaced LPG with improved version |
2.3 | superceded | 07/28/2019 | fixed misconnected square wave output |
2.2 | superceded | 07/28/2019 | new version - modified demo |
2.1 | superceded | 07/27/2019 | new version (see above) |
2.0 | superceded | 07/26/2019 | new version - the demo is more interesting if you select some modulation targets |
1.1 | superceded | 07/26/2019 | added a Low Pass Gate model and upped the clock rate - the demo is more interesting if you select some modulation targets |
1.0 | superceded | 07/26/2019 | initial upload - the demo is more interesting if you select some modulation targets |