Synthedit help and tutorials

Stuck with a SynthEdit project?

Can I use SynthEdit V 1.5?

As of 15th July 2024 yes you can now use V1.5 for serious projects. It’s now out of Beta testing and is in a stable form. Unfortunately for anyone using older versions of Windows such as 7 it will not run on these versions. On Windows 8 it may run, but with some issues..

Can I use the new modules from V1.5 in V1.4?
Well they will work, but…this is a big but you could encounter serious issues if you use them in a VST, as they are not optimised for V1.4.

What’s New in V1.5? (Stable, but new additions may be made in the future)

System Requirements/Specifications.

  • Requires Windows 10 to run reliably.
  • macOS plugins require macOS 10.9 (Mavericks) or better.

New Features. (Subject to change)

MIDI 2.0 and MIDI Polyphonic Expression (MPE) support.
MIDI output support in plugins (depends on DAW support)
Apple Silicon (ARM) support.
VST3 plugins are supported on mac (not all macOS DAWs support VST3).
SFZ (Sample Playback) now supported.
Windows in the editor are now ‘zoomable’ (<CTRL> mouse-wheel).
Searchable module browser.
New oversampling mode for control-signals (add * to pin name)
‘Export as JUCE’ supports additional plugin formats in some cases (AAX, CLAP, Standalone)
Faster loading of projects.
New XML-based project format (human readable)
‘Ignore Program Change’ feature returns.
VST3 bypass parameter support (add a Bool PatchMemory called “BYPASS”)

Known Issues.

MIDI out from VST3 plugins depends on DAW support. Some DAWs, like Cubase, do not support this.
Partially transparent images may render too dark on macOS.
Parameter limits (i.e. high-value and low-value) are not enforced in the SynthEdit editor but are enforced by the DAW in plugins. This behaviour is needed to support older projects.
It seems that some older graphics cards/PC’s even if they are running Windows 10 can cause SE 1.5 to crash on start up- there appears to be no solution apart from a new PC. It looks like its caused by old/buggy driver software which doesn’t support some of the graphics methods used in V1.5.

Universal VST 3 plug-ins.

A universal plugin is one that can run on either macOS or Windows. SynthEdit now produces universal VST3 plugins. This means you can offer the same download to macOS and Windows users. It will ‘just work’. SynthEdit universal VST3s support both Intel Mac computers and also ‘Apple Silicon’ (ARM) based ones such as the M1, M2, and later.
As a result of being universal, VST3 plugins now take a little more disk space and contain more files than with previous versions of SynthEdit.
Note: Universal VST3 plugins might fail to scan in some DAW’s. A workaround is to delete the ‘MacOS’ folder inside the VST3 plugin using some free software very kindly supplied by Davidson https://drive.google.com/file/d/1sozlsa0Xgzb4KPSn707g1nATNrZaW9Mz/view?usp=sharing. You do need to be careful using this software however. There is a read me with the software which you must read.

MIDI 2.0

SynthEdit 1.5 understands and works with MIDI 2.0.
This should work automatically in most cases. However, if you are using 3rd-party MIDI plugins you will need to use a MIDI Converter module to convert their incoming MIDI to version 1.0. You don’t need any converter on the output, SE will convert it back to MIDI 2.0 as needed. 

MPE support implementation for various DAW’s:

Bitwig:
Note expression works for VST3 plugins. I (Jeff) set up my controller as a “Seaboard RISE” and set the bend range to 48.

Cubase:
Add an Instrument Track containing your VST3 plugin.
In the Inspector change the track MIDI input from “All MIDI Inputs” to your MPE controller. e.g. “Seaboard block”
In the Inspector open the “Note Expression” section. tick “MIDI as Note Expression”
Select “Tuning”, in the box below and assign it to “Horizontal/X”
Select “Brightness”, and assign it to “Vertical/Y”
Assign “Poly Pressure” to “Pressure(P)”

Ableton Live:
Ableton Live (MacOS) supports MPE for Audio Unit plugins on macOS.
Ableton Live (Windows) does not currently support VST3 Note Expression, but you can get MPE to work by following the steps below:

Firstly you need an MPE Control module to allow you to force the plugin into MPE Mode.

In Ableton Insert your VST3 plugin, then ensure that the VST plugins MPE Mode is set to “On”. Open Ableton’s settings and ensure that Ableton’s MIDI controllers MPE tick-box is Off.  Yes that’s correct select Off! (On is actually off! Very confusing but blame Ableton’s programmers)

You then need to set up 16 MIDI tracks in Ableton to route all the channels to the VST3 plugin (If you don’t do this Ableton will merge all channels into one).

This page explains how to set up several tracks to handle all the MIDI channels of MPE in Ableton.
https://support.roli.com/support/solutions/articles/36000019096-ableton-using-the-seaboard-rise-grand-with-ableton-live
Note that the automatic MPE support in Ableton 11 does not work with VST3 plugins yet.

Reaper:
With Reaper, MPE with Audio Unit plugins works provided the instrument has an ‘MPE Control’ module, and the user switches it to ‘MPE On’.
For VST3 plugins I (Jeff) needed to use the same export setting as for Ableton Live
(‘MPE Emu’, and enable MPE from the MPE Control module). But it worked right away on a single instrument track.

New program features.

Preset Modified:
A new option in SE 1.5 is the ‘Preset Modified’ indicator. You can use it to add an indicator to your preset menu to show that the user has modified an existing preset in some way.
Below we use the ‘Concat’ module to add an asterisk (*) to the preset name whenever the preset has been modified.
The asterisk is entered into the ‘List to Text’ module as the ‘item list’. i.e.: “,*” (a comma followed by an asterisk).

Cubase “Bypass” button:
To support the Cubase bypass button you will need to add a dedicated ‘Patch Parameter – Bool’ to your plugin. Rename it as “Bypass”.
Then you can hook that up however you prefer to implement the bypass. For example, you can connect it to a switch module that sends the input signal directly to the output whenever the bypass mode is enabled.

How to emulate “Ignore Program Change”
This feature enables the ‘Ignore Program Change’ feature to work in plugins. (previously it worked only in the Editor). Whereby when you change a preset, one or more controls will stay as they were, unchanged. This is useful for controls like ‘Master Volume’ or ‘Master Tuning’ which you might not want to change with each individual preset.

Saving projects in VST2 format:
SynthEdit 1.5 (and future later versions) does not directly support the saving of VST2 plugins (only VST3 is supported).
However, some projects can also be loaded in the older version (SynthEdit 1.4) and exported as VST2 plugins from there.
To save some hassle SE 1.5 export has a tick-box option ‘Create a VST2 using SE 1.4’. All this does is automatically launch SynthEdit Version 1.4 (if it’s installed) and export the same project from there.
Limitations:
The project file you are converting must be compatible with the SE 1.4 file format *.se1 not the newer *.synthedit file format
The project must rely only 64 bit modules that are SE 1.4 compatible
You must have the latest SE 1.4 installed (Build number 695 or later)

Multi-channel VST plugins:
SynthEdit plugins with more than 2 inputs or outputs can now load into Cubase as multichannel plugins (1 ‘bus’, many channels).
Alternatively, when exporting you can choose “Outputs as Stereo Pairs” which will create a plugin with multiple buses, each with two channels.
Note: If you change these options, Cubase may fail to recognize the change unless you delete Cubase’s existing plugin cache file (VST3plugins.xml) and rescan the plugin.
Some DAWs like Ableton Live might not recognize multichannel plugins (only ones with the “stereo pairs” option).

I see that V 1.5 can be downloaded, is it OK to use, or should I wait?
If you are only going to use it to see what’s new, and try out the new functions and modules yes it’s fine. From experience it may not run (or be glitchy and buggy) on older PCs.
It will only run on Windows 10 or 11.
Sorry Windows 7 and 8 users, but your options are:
1) Upgrade your PC
2) Stay with V1.4.
Just remember its still undergoing Beta testing and is subject to update and changes, some of the newer modules are still a work in progress so are not fully functional.
Use with care as updates may well “break” an existing design made with the current version number of V1.5
As always with Beta software bug reports are welcome (NOT HERE) but at the “GroupsIO” message board: groups.io/g/synthedit/messages using the hashtag #bugreport. It’s free to join up and you’ll find a lot of help and support on there.

Joystick control using DAM modules.

How to create a “roll your own” customizable Joystick control prefab.

Note: This relies heavily on third party modules:
Davidson’s DAM modules;
DAM V XYo Circle,
DAM Rectangle.
Elena’s ED GUI Modules;
ED GUI Fixed In,
ED GUI Fixed Float,
ED GUI Timer.

Once again I’m going to stress that you should never convert from a GUI signal to DSP, perform a math or timing function, then convert this back to a GUI signal. It’s very wasteful on CPU resources, and can cause many problems.

GUI Container for the Joystick.

The Joystick control iteslf uses the DAM V XYo Circle module. This resturns the position of the circle, which can be extensively customized. Here I have pre-set it with a red theme. In the interests of simplicity I’m just connecting the following plugs to the IO Module;
1) Animation Position- The output value of this plug is 0 till the circle receives a click (Mouse Down), it then changes to 10.
2) Position X- The X co-ordinate (horizontal) of the circle (Normalized value of 0-1)
3) Position Y- The Y co-ordinate (vertical) of the circle (Normalized value of 0-1)
4) Circle Size- The size in px of the circle.

The settings in the properties panel are shown below. Make sure the Jump Back Position List is set as “None”, the Mouse Response is set to “Click”, and The Gradient Lock check boxes are ticked. These are the colour settings I used, but as always that’s your personal choice.
Mouse response- This selects various modes, the main ones are;
None- Nothing happens when you click on the circle, and it’s locked in position.
Click- Click on the circle and the Animation Position changes to 10, the circle assumes its “Alt” colour scheme, and can be moved.
Step- Click on the circle and the Animation Position changes to 10, the circle assumes its “Alt” colour scheme and the circle can be moved. The Animation Position value and “Alt” colours are held until a second mouse click is received.

Settings for the DAMV XYo Circle and DAM Rectangle modules.

I have shown these settings as screenshots.

The control section.

The x and y output values are passed as usual to PatchMemory Float3 modules. These then send the Float values to the output IO module as GUI Float, DSP Float and Volts. The Volts as usual is converted by the stock Float to Volts module.
Returning the Joystick to the centre position.
This is done with a pair of Spring 3 modules to send a value of 0.5 to the Position X and Position Y plugs. The ED GUI Timer is used to send a short (10 mS) pulse to the Spring 3 modules when the Centre On/Off plug is set to true. (I found that the Joystick wasn’t reliably setting to the centre when switched on otherwise).
Setting the Joystick’s output ranges.
As usual the ranges of the output values can be specified via the Patch Memories. To make this easier I recommend changing the Patch Memory names in the Properties panel to something like x-axis range, and y-axis range.

X and Y Value (GUI) containers.

These are just standard Float to Text conversion, both connected to the Value output of the PatchMemories to show the actual value being output by the joystick, rather than the Animation Position.

The control panel view.

Resetting unlinked controls from a single button.

How is it possible to reset three controls from a single button? If we try to link the controls in any way to send a reset value to them from a single source, being Bi-Directional we have immediately linked the controls. There is also the issue that many modules using Animation Position will only allow you to connect one input per module, fortunately the PatchMemory Float3 does allow this, but you still can’t can’t connect all the Controls like this without linking them
The answer is to “chain” a number of Spring3 modules, one for each control to be reset.
Note: This does not work on the stock controls in the Controls folder, we can only do this by making our own custom knobs or sliders. This must be done (as always) with all GUI modules.

Tip: Give each of the PatchMemory Float3 modules a useful name in the properties, so if you want to adjust the range of the control you know which one you’re adjusting.
Note: Changing the range of a control does not affect the Animation Position range. This range is always 0 to 1.

Having the Mouse down output plug on the left side of the Spring3 modules allows for easy chaining of these modules.
Being an Animation Position value, the range for the value is 0 to 1. with 0.5 giving a centre position.

Each knob is contstructed as follows, yes, thats’s correct, at this stage there is no patch Memory. This is outside of the control’s container. Two PatchMemories for one control can quickly become a confusing mess.

The structure of the reset button

Improving the Patch Point modules.

The problem with Patch Points.

The existing Patch Point modules are fine, but a little basic. If you’re setting up a panel with a large number of patches you need to be very disciplined about labelling and arranging them. As I have found it’s too easy to get in a muddle. As you see below we can start with a nicely laid out pattern of patch points, switch to the panel view…and it’s chaos, and you have to select ech one, then switch to panel view and arrange everything. With some labelling the problem is solved, you can just arrange your panel view in one go.

Making life easier.

What would help is a text label and maybe some colour coding. We can do this fairly easily with a few sub controls. With a little planning we can produce a Patch Bay something like this… even having a few useful things like gain controls and inverters in the patch bay.
Note: I’m sorry but the colours are limited to the patch points, there’s no way round this until Jeff introduces (please, please do this Jeff) colour customizable patch leads for the Patch Points. Also the transparency can’t be altered either. Patch cables are only fully visible when you hover the mouse over the patch point.
Note: You can plug more than one cable into a Patch Point.
Note: To disconnect a cable, right click on the Patch Point itself.

How the patch points are customized.

Not much to say about this really, this is just to point you in the direction of your own style of Patch Points and patch bay.
Note: Do pay attention to the Z-order of the modules, otherwise you can end up with a hidden lable or Patch Point! From top layer down you want this order;
1) Patch Point
2) Text
3) The rectangle.

A Patch Point for connection to the Output of a module.

The plugs on the prefab are for controlling the appearance. (Apart from the input/output signals of course).
Text: The is the lable next to the patch point
Text ARGB: the ARGB colour settings for the label text
Back ARGB: The ARGB Colour settings for the background of the text. You’ll most likely want to leave this as 00000000 (Transparent background)
Control ARGB: The ARGB colour settings for the Rectangle used as the Patch Point background. Note: If you want rounded corners just go into the properties settings on the panel and adjust them.

Inside the Text container.
This is containerized just to make the structure on this article a little easier to read

A Patch point for connection to the input of a module.

An Inverter patch point, and a gain control patch point.
Just for ideas, really all sorts of patch points are possible from now on.

Switching control panels

Using a drop down list to select between different control panels.

Using some simple logic , and SynthEdit’s ability to make the control panel of a container visible or hidden, we can easily switch between a variety of different control panels. Using this you could swap between say;
1) a standard oscillator,
2) A Supersaw oscillator,
3) A Casio CZ style phase distortion oscillator,
4) A Sample Oscillator.

The Selector logic.

The Popup Menu module should have the following entered into it’s Item List box in the poperties panel 1,2,3,4 (No full stop or comma at the end of the list.) This value is selected from the popup menu, and sent via the PatchMemory Int module to the Int to Bools module. If 1 is selected the Int to Bools module then makes the output I have labelled as Panel 1 Visibility switch to “True”, and if 2 is selected the Int to Bools module then makes the output I have labelled as Panel 2 Visibility switch to “True” and so on.
The Bools To Int is used to display the option you have selected in the Popup List.
Note: You must have the First Bool Val connected and set to “False” with the ED Fixed_Bool module, otherwise the numbering will go out of sequence.
The Int To Text is there to convert the numeric value back to a text string.

Panel selector logic

Inside the numbered containers I just put the following to test & demonstrate the sub control

As you select a number in the popup list on the panel, the number displayed will change to reflect your choice.

How the selecter is wired up

The panel selecter in operation.

Popup Sub Menus.

Can I have a submenu system in my popup menus?

Yes you can, but only for for selecting options using the Many to 1 and 1 to Many flow switches.
This is a useful but very poorly documented feature in SynthEdit. It only works when using the stock Popup Menu module, unfortunately the List Entry 4 module does not support this feature.
Here is the popup menu we are all familiar with:

Basic pop up list

However with a little planning we can have a popup menu like this

Pop up sub-menu list

The menu syntax

Using this structure below we can have our popup menu, organized into submenus. In this example we would have an arrangement where we switch between the selected modules , which would be kept in the container. As you can see some of the plugs on the switches have these groups of >>>> and <<<< symbols preceeding the text on them. This is the key to our sub menu system;
>>>>Filters means “start a submenu called filters
<<<< Means “end the submenu.
You can add a submenu to a submenu like so;
>>>>Filters
>>>>Digital
Filter 1
Filter 2
Filter 3
<<<< takes you back to the level Filters, to go back to the top menu level, add a second <<<< after the first.
To add a spacer into the menu, just insert a —-.(four hyphens)

To create the menu below, you would use the following;
Sine
>>>>Triangular
Saw
Ramp
Triangle
<<<<
Pulse
>>>>Random
White Noise
Pink Noise
<<<<
—-
New Menu

Sub menu with a divider line

Does the check mark for the selected item annoy or bother you? This can be removed by selecting a checkbox in the properties panel. If you check the “Momentary” option the check mark (tick) is no longer shown.

The structure inside the container is below, I have not shown too many modules, just enough to give you the idea.
Important note.
I have limited the modules shown below to keep things simple. When implementing this yourself please make sure there is a module that has no output such as a voltmeter connected to all the unused Inputs to avoid the “Hanging Modules” issue. Just put the module inside a container, and un-check the visible property so it remains hidden, it doesn’t have to be a Voltmeter, the volt meter module is special because it has no outputs and has a special flag set that tells SE’s “voice watcher” to ignore it. Other similiar modules should work too. .
This is important as “dangling wires” can mess with polyphony sometimes.

Sub Menus for Modules with pre-defined Option Lists.

We can also use this with an Oscillator or Filter module. Do not connect the Patch Memory List’s Item List plug to the Popup menu, if you do you won’t get your Submenu system, just the default list of options.
The menu system you want to use must be entered into the Popup Menu’s Item List in the properties panel.

Using the following item list will give you the menu shown underneath;
Sine=0,>>>>Triangular, Saw=1,Ramp=2,Triangle=3,<<<<, Pulse=4, —- , >>>>Random, White Noise=5, Pink Noise=6, <<<<,

Sub menu in action (1)
Sub menu in action (2)

Attack Decay Envelope Generator

This project is an Attack-Decay envelope generator, with no “hold”, as soon as the envelope reaches it’s peak, it immediately begins to decay.
There are three envelope curve options;
Linear, Logarithmic and Exponential.
The output level is controllable, inverted envelopes are specified by a negative gain voltage. All of the timings are in seconds per volt, there is no conversion needed between voltage and time.

This project relies on third party modules.
These modules are available from Elena Novaretti’s website
ED Glider 2,
ED Log (Audio),
ED Clip (Audio).

How the Timing section works.

A trigger pulse is received from the MIDI keyboard, or a suitable trigger source, this only needs to be a short pulse, no matter how long the trigger pulse is the envelope timing will not be affected. The attack control voltage is sent directly to the UP Time (sec) plug on the ED Glider 2 module, and to the Monostable Pulse Length via a Multiply module which has it’s Input 2 set to 10 (Attack V *10) as the timing voltage for the Monostable is in 1/10th Second per volt. This send a pulse with the same timing as the UP Time for the ED Glider 2 module (Without this the attack wouldn’t work for any timing except 0). The Decay control is sent directly to the Down Time (sec) plug.

Note: For the Envelope Generator to produce the correct results when used with a VCA module the VCA must have its response set to linear.

The Envelope Curve section.

Exponential:
This uses a Level Adj module with Input 1 and Input 2 both connected to the output of the Glider module. This means that the output will be Input 1 * Input 2 converting a linear voltage envelope into an exponential curve.
Linear:
Is taken directly from the output of the Glider 2 module through a Level Adj module with its Input 2 set at 10.
Logarithmic:
The Glider 2 output is fed through the ED Log (Audio) module. There is a range Clipper on the output to ensure that the voltage cannot pass outside the normal 10V range (I found that sometimes negative voltages were being produced at the start/end of the envelope), and the Level Adj module to increase the positive output voltage to the normal level.

CV and Timing Randomizer

Based on the Buchla Source of Uncertainty 266.

This module produces a random train of 100 mS long pulses, and a randomly varying control voltage, the minimum and maximum values of which van be varied.

The Random Pulse Generator.

The principle of this module is that it produces two unsynchronized pulse trains running at different speeds. Pulse train B continually (1 second intervals) has a random value added to the Interval B mS setting by a an ED Random Int generator when the Module is triggered by a the ED DSP timer.
Pulse train A and pulse train B are fed into an X-OR gate. This produces a pulse whenever A or B is high, but not when both are high. The result of this is a pseudo random chain of pulses sent to the ED Random Int generator which outputs a new integer between 100 and 1000 each time it receives a Trigger pulse. The random integer is then fed to the Final ED DSP timer which is set to produce 100mS pulses with an interval set by the Random Integer.
This is fed to the RND Pulse out and a Monostable with the pulse Length set to 1 dS, this is used to flash an LED each time a pulse is output.
The structure of the Random Pulse Generator is shown below.

Note: This project relies heavily on Elena Novaretti’s module pack. The modules used in the project are;
ED Random Int,
ED DSP Timer,
ED Add Int,
ED Level Bar 2,
ED Random Volts,
ED Glider 2.

The Level Indicator.

This is just used as a visual indicator of the CV level being generated.

The Complete CV and Timing Randomizer.

The RND Pulse out is fed into the ED Random Volts module. Each time this is triggered a new voltage is randomly generated. The Minimum and Maximum range of the output voltage is set bu the Min and Max knobs. The output voltage is fed to the ED Glider module. This module allows the rise and fall times to be set. The Glider mode should be set to constant time.

Complex Oscillator 2

Alternative Complex oscillator design-overview.

This design has a multiple VCO arrangement, this allows for morphing between Sine, Ramp, Triangle and pulse, as well as phase modulation. There is wavefolding on the Sine and Triangle oscillator outputs. The fifth oscillator has no audio output and is used purely to phase modulate the first four oscillators.
The oscillator is fed to mutiple waveshapers which morphs bertween different waveshaping formulae. The waveshaping is based on the formula 5*sin(x/pi). The waveshaping is split into odd and even formulae with morphing between the two sections.

The prefab (SE V1.5 only) can be downloaded from here

Third party modules are required:
RH-Wshape2 Available from http://www.rhmodules.nl
ED Range Clipper https://www.elenadesign.eu/edm
ED Morph 1D
ED Text Entry

The Double Oscillator module.

Five standard stock oscillators are used to allow morphing between the waveforms. Foldback is only used on sine and triangle wave shapes as the ramp and pulse shapes tend not to be worth wavefolding.
The Sine 2 oscillator is used purely for Phase Modulation of the five audible oscillators.

The wavefolder.

This relies on the RH-Wshape module fo gradually fold the waveform back on iteslf when it reaches a certain level. The amount of wave folding is controlled by the VCA on the input stage.
Adjusting the CV range for better control.
The ED Range clipper is used in combination with the multipler module so that the useful range of the Fold control voltage falls within the usual 1 to 10 Volts, otherwise the control was shomehat “cramped” as the useful voltage range without this conversion fall between 7 and 10 Volts. Input 2 of the divider is set to 1.5. The Range clipper is set to a Minimum of 7 volts and a Maximum of 10 Volts and the Mode is set to clip.

The Odd and Even wave-shapers.

I’ll describe both of these together. They are both made up of six Waveshaper2B modules using the formula 5*sin(x/pi) as a starting point. The formula changes slightly for each sucessive waveshaper. The ED Morph1D module at the output allows for a smooth morph between each formula. Each formula affects the harmonic content of the output in a different manner. The formulae are listed in the table below.

Odd:
5*sin(x/π)
5*sin(x/π*3)
5*sin(x/π*5)
5*sin(x/π*7)
5*sin(x/π*9)
5*sin(x/π/11)

Even
5*sin(x/π)
5*sin(x/π*2)
5*sin(x/π*4)
5*sin(x/π*6)
5*sin(x/π*8)
5*sin(x/π*10)

The complete Complex VCO structure.

All the main control settings on the Complex VCO can be modulated usin a CV within the range 0 to 10 V. The Scope3 module is optional, I just include it so the effects of changing control settings can be seen.
There is a Sync connection so that the oscillators can be synchronized to a single source, this could be connected to the output of another oscillator, or to the keyboard trigger plug on MIDItoCV to ensure phasing between oscillators is always constant.

Complex Oscillator.

Complex Voltage Controlled Oscillator.

This is quite a complex project, so I will have uploaded a prefab to the files section of the groups.io website to study and experiment on. There are three Oscillators, all of which can morph between three wave-shapes; Sine, Triangle and Saw, the second Oscillator also has an audio output, but the third is purely for modulation of the other two oscillators.

The idea was to emulate (but not closely copy) the type of oscillators found in Buchla and some other types of (Eurorack?) modular synthesizers. It can produce a wide variety of output wave-shapes by using morphing between waveshapes, and using a mixture of AM and PM cross modulation. The sounds produced can vary between subtle harmonic changes, FM type sounds and some harsher, grating, metallic (less musical?) sounds.

Third party Modules.

There are a few third party modules in here:
Elena Modules 1D Morph (No stock Equivalent)
TD Modules RingMod Diode (This could be replaced with the stock Ring Modulator), but the sound is slightly different).
The HD Oscillators are available from the community modules section on the SynthEdit website.

The morphing oscillators.

This is comprised of three HD Oscillators, all on the same pitch, which are left on pre-selected wave shapes; Sine, Triangle, and Sawtooth. The oscillator outputs are fed directly into an ED Morph 1D module which has the response setting Linear. This allows us to smoothly morph between the tree wave shapes. Leave the Oscillator reset mode on the DCO setting.

The 3 Way X-mod container.

This allows Oscillators 1, 2 and 3 to cross modulate their amplitudes by subtracting the output of oscillator 3 from the output of oscillator 2, then subtracting this signal from the output of Oscillator 1.
Cross modulating the amplitudes of Oscillators 1 and 2, also Oscillators 2 and 3 is performed using TD RingmodDiode modules.

The complete Complex Oscillator.

Oscillator 1 is phase modulated by Oscillator 2 and 3, the PM amount is variable.
Oscillator 1 is amplitude modulated by Oscillator 2, the AM amount is variable.
Oscillator 2 is amplitude modulated by Oscillator 3, the AM amount is variable.
Oscillators 2 and 3 can amplitude modulate Oscillator 1 together, the AM amount is variable.
The start phase for all three morph oscillators can be set individually.
All Oscillators can be Synchronized by a trigger pulse from the keyboard. This ensures that the output of the Complex Oscillator will be the same for each key-press on the keyboard. If you want variations is the sound for ech note played the Keyboard Sync can be turned off.
The Octaves Of Oscillators 2 and 3 can be set above or below the pitch of Oscillator 1.
Note about PM: Taking Phase Modulation to extreme levels and using wave-shapes with a sharp rise/fall time will cause a lot of high frequency harmonics, and quite possibly some aliasing by-products at the output.

Taking the Complex Oscillator further.

Of course being a VCO we will want to apply voltage control to some of these functions to allow further mangling of the wave-shapes, feel free to experiment, but I will be adding a new post on an updated Version 2 of this project in the near future.

My panel layout.

A few of the possible wave-shapes that can be obtained from the Complex Oscillator are shown below.

Low Pass Gate Emulation.

Post updated due to an error on my part when reading documents on the design of Buchla LPG module. 24/09/2025.

About Low Pass Gates (LPG).

What is a low pass gate, and how does it differ from a normal low pass filter, isn’t it the same item with a different name?
No It’s not. For a start the LPG doesn’t resonate in all modes. They were developed for the Buchla range of modular synthesizers, and have a more “acoustic” quality to them, think of the sound of a xylophone or bongos. Those instruments have a characteristic percussive and bright start to the sound, and the sound then quickly looses its brightness, and fades out slowly rather than dying away abruptly.
This was a result of using a rather unique method of applying voltage control to frequency and amplitude, this was done with a device known as a “Vactrol”, which was a combination of a light source (early devices used a filament lamp, later ones used LED’s) and a light sensitive resistor (LDR). Below are shown a VACTROL device, and (for those interested a VCA circuit using a VACTROL.

A VACTROL device
Using a VACTROL in a VCA

As the voltage supplied to the light source got brighter the resistance decreased thus changing the volume or cut-off frequency. Due to the nature of both these components, there was a varying lag between light brightness and the resistance of the LDR Both these devices are non-linear in their characteristics, which vary between devices. This means it’s not something you can emulate precisely
(it varied widely between modules-let alone synthesizers) , not that you need to as you’ll see later when we start putting our structure together.
Although there is non-linearity, and a lag between voltage variations and the effect on audio there is no inherent distortion in the LPG to take into account (unless it’s overdriven of course).

Note: This project uses Two of Elena Novaretti’s third party modules:
ED Exp, and ED Glider 2 (don’t use the Glider module, you can’t control the up/down times individually).

Generating the attack/decay envelope.

The Attack-Decal envelope for this project is different from the average ADSR envelope. We don’t need the Sustain and Decay portions of the envelope, just the attack and decay. You might think that having the the gate plug of the MIDI to CV2 module connected isn’t necessary, but I found that leaving the connection out caused some strange problems. For this reason I used a the Monostable to create a short pulse to trigger the ED Glider 2 module. One issue to take into account is that the ED Glider 2 module uses Volts per second for the Up and Down times, and the Monostable uses Volts per Deci-Second (10th’s of a second). For this reason I used a divider in the Rise time control line set to divide by 10 so that the Pulse out length from the monostable corresponds with the Up Time (Attack) of the Glide module. The pulse length needs to be the same as the Up Time for the Attack section of the envelope to work. The Down Time (Decay) portion of the envelope does not start until the input is at 0 volts. The Mode setting of the Glide 2 module should be left at the default Constant Time setting. The reset plug is not used.

LPF Curve and VCA Curve.

You might think initially that having the two different methods of generating the curve for the envelope is a bit superflous, but I did this to imitate the effect that different Vactrol characteristics would have on the filter and VCA operation, so the envelope for the VCA is a straightforward exponential conversion, but the envelope for the Filter is quicker to decay meaning that when in the LPG option is selected the filtered sound will change in timbre more quickly than theloudness changes to give a more “percussive” sound to the output, where you get an initial bright start to the sound which then becomes naturally softer in timbre with the sound “ringing” on more than a conventional VCF/VCA combination.

The screenshot below shows clearly how the CV curves for the LP Filter and the VCA differ in their curve, the LP Filter envelope decays quite quickly, whereas the VCA envelope has a far longer decay allowing the sound to “ring on” after the filter has reached it’s minum frequency (provided you leave the filter pitch at a point where the sound is still audible of course!)

Comparing the Filter and VCA envelopes

Note: If the CV for the filter exceeds 10 Volts, most filters will internally “clip” this voltage to prevent the filter module from misbehaving, however the VCA module will oveload with CV exceeding 10V and produce some very harsh sounding (and very loud) clipping.

The filters

As the original LPG (Buchla) design had no resonance in it’s LPG mode I have just used two 1 Pole LP modules in series. There is no reason not to use an SVF or similar filter with resonance, but the aim here was to try and imitate the original design concept. If required you could use more filters to get a sharper Low Pass cut-off.
Here comes the strange bit (well I think it is), when used just as an LPF the module did have resonance, so for this mode there is an additional SVF in two stage Low Pass mode, wired up as a seperate filter that only operates in this (LPF) mode.

The VCA

Although we are using an exponential CV envelope for the VCA, I found contrary to what I first expected the results sounded better if the Response Curve is left at the default exponential setting.

Voltage offsets.

The voltage offsets shown are to compensate for the effect of the exponential voltage conversion modules, to restore the correct 0 volts level for the “off” portion of the envelopes. Likewise we need the Level Adj modules to reduce the envelope voltages to their normal 10 V maximum.
I used a fixed volts module to show the offset, gain and divisor values, and here’s a list of those values…
List of offset voltage values;
VCA Volume = -1V, (VCA Volume plug)
Filter Pitch = -1V, (1 Pole LP Pitch plug)
Divide by 2 = 2.5V (VCA Curve divider Input 2 plug)
Up Time /10 = 10V (Divider for ED Glider module)
Pulse Length dS = 0.1 (Monostable pulse length) Note: This offset is needed, if the Monostable Pulse Length is set to 0 it will not output any pulse at all.
Gain *01 = 0.1V LPF (Curve Level Adj module Input 2)
Curve 15 = 15 V (Divide Input 2 for VCA Curve) This affects how the initial decay curve of the exponential module feeding the VCA to imitate the differences in VACTROL characteristics.
Note: Feel free to experiment with some of these values, but do be aware that we are dealing with exponentials and small changes can mean a large increse in output…make small changes incrementally. Be careful of your monitors/headphones and your hearing.
Note: Changes in divide or gain module voltages will affect what voltage values you need on the LP Filter and VCA offsets.

Note: I have added a separate Output plug in this modification for the Low Pass Filter section, as this would need to be passed through a separate VCA anyway.

« Older posts