Stuck with a SynthEdit project?

Month: May 2025

Illuminated button with text.

This is a Sub-Control that really is only achievable with third party modules.
Both the button , and the text label are clickable.
I felt for a control it was useful to have both GUI Float + Bool along with DSP Bool and Volts outputs, which is easily done with a little planning.
Note: Purely out of interest this button structure is a good demonstration of the two-way communication between GUI modules- without this the option to have the text as clickable, and changing colour would not be possible.

DAM V Rectangle.

The DAM V Rectangle is connected so as to send a Float value of 1 when the button is clicked, with the mouse response set to the Step option this switches from 0 to 1 on the first click, then from 1 to 0 on the second click and so on.
The colour options I felt relevant to this project are connected to an IO module so the user can readily change them.

Mouse Response = Step
Gradient Point B (Y) and Alt Gradient Point B (Y) should be set to 50.
The colour options are:
Top ARGB = Off Top ARGB (Top gradient ARGB colour when button in the OFF state)
Bottom ARGB = Off Bottom ARGB (Bottom gradient ARGB colour when button in the OFF state)
Alt Top ARGB = On Top ARGB (Top gradient ARGB colour when button in the ON state)
Alt Bottom ARGB= On Top ARGB (Bottom gradient ARGB colour when button in the ON state)
Outline ARGB = Off Outline ARGB (Button outline ARGB colour when the button is in the OFF state)
Alt Outline ARGB = On Outline ARGB
(Button outline ARGB colour when the button is in the OFF state)

DAM Text Enter.

The Text Enter module displays the Text on the button which is also clickable.
Again some of the options are taken to an IO Module so that the options can be set as required by the user.

Text = The text label that appears on the button.
Font Size = The size of the label on the button. Entered as a float value, but goes up in steps of 1 pixel in direct proportion to this value.
On Text ARGB = The ARGB value for the text colour when the button is in the ON state.
Background colours. These should be preset to an ARGB value of 00000000 (you can just set the first two digits as 00) to give a transparent background for the text.
Module Settings:
Writable:
Un check this box so that when the button is clicked the text box does not change to white, and the text cannot be changed.
Font Options: Apart from Font ARGB and Font Size, set these as required for the font type, alignment and styles.

Logic switching.

We need to use a bit of Logic for making the Text Label behave in the same way as the button. Nothing too complex though.
ED Toggle Switch. This is used to toggle the Text Label state between on and off rather than it’s default momentary state. It’s connected between the mouse down output on the Text Enter module and the output of the Float To Bool converter. The output of the Float To Bool converter is also connected to the Choice plug of ED Switch > String module. The Switch module selects the ED Fixed_String module with it’s value of FF555555 (a dark grey, or alternatively a value of your own choice) when the Button/Text are in the OFF state, and the option set by the user at the On Text ARGB plug when the Button/Text are in the ON state.

Important Setting.

When you have finished the structure, go to the Panel view, and align the text label over the button where you want it positioned, and make sure you right click the text label and select Arrange > Move To Front. The Z view positioning of the text must be in front of the button.

The button in it’s On and Off states.

Hiding and showing text.

This is a simple prefab that can be used to display some text when the Text On/Off voltage is greater than 5 V.
It works by switching the Transparent Text option on and off on the DAM Text Enter module.

Plugs.
Text Entry Plug: Used to specify the text to display.
The Font ARGB Plug: specify the colours for the option in ARGB format.
BG Top ARGB Plug: specify the colours for the option in ARGB format.
BG Bottom ARGB Plug: specify the colours for the option in ARGB format.
Text On/Off: When the input is greater than 0 volts the text is visible.
Font Size: Specifies the size of the text displayed in steps of 0.5 px. Note: don’t forget to set a font size!

Set the Writeable option of the DAM Text Enter module to “Off” to prevent users clicking on the display and changing it.

The prefab in operation.

Auto filters.

An auto filter is like a standard VCF, but instead of controlling it with an LFO or ADSR, the filter frequency is controlled by an envelope (or Peak) follower.

The Peak Follower:

The peak follower detects the peak signal level of the audio input. This can then be applied to the pitch input of the VCF module.
The output attempts to follow the envelope (level) of the input signal. 
The Attack and Decay control voltages can be converted from volts to milliseconds, this is calculated by multiplying by the voltage by 20.  i.e. 1V = 20ms.
Both the Attack and Decay rates do change with frequency.  The Peak Follower responds slower to Low frequencies, faster to high frequency signals.  The formula above is calculated for a 1000 Hz sine wave. This is more or less how an analogue peak follower would behave in the real world.
Note: Very short decay times will mean that the Peak Follower won’t be following the real peak voltage, as it will start to follow the low frequency components of the signal rather than the peak audio level.

Adjusting the filter sweep.

This is quite simple, all we need to do is add a Level Adj module to the Signal Out plug of the Peak follower, with a slider control connected to input 2. There is no reason to stick to the Moog Filter for the audio filter, any type will do (as long as it’s a type that allows modulation of the pitch plug).

The main auto filter structure

Set the controls…

Peak Attack/Decay sliders.
You’ll see that these controls don’t look exactly like the standard SE sliders would.
Yes, I have modified them. The Peak attack and decay sliders have the following structure:
The only points of note are;
1) Multiply module is used to convert from Volts to mS, just set the value on the Input 2 plug to 20.
2) Volts to Float 2, Response should be Volts DC (fast), update rate 10 Hz.
3) Float to Text, set decimal places to 0 (none), we really don’t need to be that accurate!
4) ED GUI String Append, the second input plug needs to have a space before the mS text to read neatly. With this module the first plug will be the main value, and each spare plug will be appended text.
5) The two “floating” modules PatchMemory Text Entry, and ED Text entry are used to display the title of the control slider.

Filter control (Pitch).
There’s a conversion module used here, so we can display the filter frequency in kHz. Just use the Unit Converter (Volts) module, with its mode set to Volts to kHz, and change the text on the ED GUI Fixed String to read kHz (don’t forget the space at the start of the text!).

Sweep and Resonance sliders.
These are the same as the Attack/Decay sliders with two changes;
1) Multiply, the Input 2 is set to 10, so that we change the readout from 0 to 10 to 0 to 100.
2) Change the text on the ED GUI Fixed String to %.

This is quite a versatile module, it can be used (as I have shown) as a VST filter sweep effect, or you could modify it to include in a Synthesizer.
You could also modify the filter to make it into an “Auto-Wah” effect for use with a guitar or other instrument.

Sleep mode.

What is Sleep Mode?
Signals generally come in two categories:
1) A constant voltage such as the output from a slider control, which doesn’t vary unless we move the slider control. When the slider is not moved the module goes to sleep, as soon as there is any slider movement, the slider module will “wake” and process/send the change in value, promptly going to sleep again as soon as the value stops changing.
2) A constantly varying voltage, such as the output from an oscillator.
Most modules will detect if an incoming voltage is constant or changing. If it’s constant, or the input drops to zero they shut down audio processing to save CPU. All the time the input is changing the module is processing the signal, if the signal stops changing or falls to zero the module will sleep to save CPU.

Modules which are in sleep mode will usually issue a status signal telling the subsequent module(s) in the processing chain that it’s they can also shut down. Soon all of the modules in the chain will enter sleep mode.
There is a catch however, this is is that the CPU load may briefly spike
when a static signal changes, which can possibly cause an audio click or crackle if the system happens to be running at peak CPU load.
If the signal doesn’t demand isn’t processing audio, always use GUI modules instead of DSP to prevent the possibility of these glitches. And if suitable GUI modules are available, you must always calculate control signals on the GUI processing side.

Sleep mode in action.

To see the sleep mode in action set up the following structure.
Once it’s set up right click on each module and from the “more” option select “Debug…” you’ll see these dark green windows pop up that show you the CPU activity level. The small green dot in the top left indicates that the module is “awake”, a dark red dot shows the module is in “sleep” mode, and the graph line shows CPU activity.
With the Level Adj slider set at 0 (hence a gain of 0 for the Level Adj) we can see that although the oscillator is active and using CPU, the Level Adj and the 1 Pole HP filter are in sleep mode.

Now raise the slider slightly…
You’ll see both modules “wake” almost immediately. As soon as the Level Adj wakes up it tells the following modules “hey there’s activity-get ready to do some work”. The dots turn green and the modules start using CPU.
Stock SynthEdit modules will all detect sleep mode, but some third-party modules may not (note: most programmers do include sleep mode) because this function is not compulsory for SE. If you suspect a module is consuming more than its fair share of CPU power because your plug in project is clicking, glitching or stuttering, then Debug will help you track down either the module in question, or a point where for some reason your “wiring” is preventing sleep mode from working.

Why is this important? Consider the following, where we have three SV filters and we switch between each one at the output. All the modules are awake as soon as the first one wakes.

Now lets see what happens if we put the switch before the filters… Here we have selected the middle filter, and you can see that the only “awake” chain is the one after the middle filter. Because the Top and Bottom filters have no audio signals being sent to them they are still “Sleeping”, thus we save on CPU by only having the audio processing chain we need to use “awake” and leaving the others to “sleep on”. Try this out, and see each chain go to sleep, and wake as you switch between filters. It’s easy to see that switching the signals between the input of each filter rather than switching the outputs could have a big influence on how much CPU your plug-in will use.

Effects need sleep too!

When putting in a bypass mode for an effect such as echo you should always consider sleep mode too. You can either just put a switch on the input, or both input and output, but not just on the output. The structure below is the best way to put in a bypass mode switch.
Note: Any form of delay module will not go into sleep mode immediately. Why? Because they can’t stop processing the audio till the last bit of echo or reverb audio has died down to a point where it is so low as to be unimportant, then the module will sleep. Otherwise the effect could cut off very abruptly if a module prior to the Delay went into sleep mode! We can’t wait for it to reach total silence. In theory it might never reach zero-or would take a very long time to do so at high feedback levels.

Using the ED Sine Shaper

Basic overview of the module.
This module is a fully modulatable (up to and including audible frequency modulation) mathematical waveshaper, using a natural Sine function.
Harmonically rich and interesting sounds can be obtained shaping a plain sine wave oscillator with this module.
The Sine accuracy can be selected with the hidden Accurate pin (exact Sine vs. cubic approximation, about half CPU load).
Note: The audible difference is often negligible though.

Plugs:
Input: The audio signal to be modulated.
Sine Frequency: The Sine Frequency plug specifies the sine frequency as the amount of complete cycles per 10 V of input signal. For those who are interested the formula is: V_Out = sin(V_In * Freq * 2PI / 10)
Output: The audio output resulting from the audio input being acted upon by the Sine frequency function. Note: this can reach +/- 10V peak to peak, so will need attenuating in most usage.

Demo structure.

The easiest way to demonstrate this module is with the setup below, where we can have an sine wave audio oscillator feeding the input, and another oscillator set up to run at lower frequencies. If we use a ramp waveform running at about 0.5 Hz we can clearly hear the effect as the effect of the Sine Modulation value fading away. It sounds a bit like a filter which is almost on the point of self oscillation being swept through its cutoff range, but without any filtering effect.
The best way to learn how it sounds is experiment.
The only point of note is the +5 V offset on Input 1 of the Level Adj module, this is to keep the modulation voltage positive at all times.
Note: The one oscillator waveform that doesn’t really work either as source or modulation is noise… this just results in slightly distorted noise!