Stuck with a SynthEdit project?

Month: February 2024

Logic gates in Synthedit.

Monostable.

The correct electronics term for this module is a Monostable Multivibrator. The name derives from the fact that they have a default state of 0 volts output until they are triggered by an external pulse, they then flip to the on state (usually 5 volts) for a preset length of time, once this expires they then revert to their default of 0 volts output.
The monostable module operates on the same principle. It normally outputs a “False” or 0 logic state. Once the Monostable receives a pulse signal input the leading edge of the pulse triggers the monostable, the output of which then switches to the “True” or 1 logic condition.
The gate then holds the “True” condition for a period of time determined by the voltage present on the Pulse Length (ds)- (ds stands for DeciSeconds) plug. The Time to Voltage is 1 Volt = 10 seconds. See the demo screenshots below (the small voltages are because the demo setup has quite a high pulse rate)

Note: You’ll find that once the monostable has been triggered, it won’t respond to another trigger pulse until the preset time has elapsed. Trying to trigger it a second time will not extend the length of the output pulse, also no matter how long the input pulse this will not affect the length of the output pulse.

Monostable with a Pulse Length voltage of 0.0015 Volt
The effect of increasing the Pulse Length voltage to 0.0075 Volt

What use is a Monostable?

What use is a monostable? Well one possible use is the following:
Say we wanted to detect when our audio level passed 2 volts, and light an LED.
We can us a comparator to detect this, but say the audio only exceeds 2 V for a few milliseconds? That’s not enough time for the LED to respond, let alone for us to see it light up. This is where a Monostable is useful. By adding this to the output, and putting 5V on the Pulse length plug, we will detect the short lived peak, and the monostable will send a half second pulse to the LED- enough to see it flash and warn us the audio will be clipping

Comparator with variable pulse length output.

Delaying the Trigger pulse from a keyboard.

If you needed a delayed Keyboard Trigger pulse then this is one way to approach it. By not connecting the Gate pulse from MIDI-CV 2 to the ADSR 2 module then no matter how long you hold down a key only the attack/decay portions of the envelope will be active. The decay can be set to 0 V as it’s unimportant, as are the sustain and release portions.
Note: The overall Level plug is set to 10.2 volts, otherwise the structure isn’t reliable at triggering.
Input B of the comparator is set to 10 volts, so the comparator switches to + 10 volts output when Input A of the comparator reaches 10 volts, the monostable then generates a fixed length pulse from this providing us with a delayed Trigger pulse, the delay time being set by the Attack segment timing of the ADSR 2 module (the time it takes to reach 10 V). Because the Envelope isn’t held when the Attack reaches its maximum the resulting pulse is extremely short hence using the monostable on the output, which in this usage triggers another ADSR2 module.
Note: Always connect both Trigger and Gate plugs as shown.
Using this method we can create a delayed trigger as was used in the Moog modular synthesizers.
You don’t specifically need to use the Fixed Values modules (you can specify the values needed in the module properties), but it does make it easier to work out what you have done at a later date, and here it’s done for illustration purposes.

Delayed Envelope triggering

Logic gates in Synthedit.

What is a Logic Gate, and what does it do?

A logic gate is a device that is used as a building block for digital circuits. They perform basic logical functions that are a basic part of digital circuits. Most electronic devices we use have some form of logic gates in them.
For example, logic gates can be used in smartphones, tablets, control circuits, and obviously computers.
In a circuit, logic gates work based on a combination of digital signals coming from its inputs. Most logic gates have two inputs and one output, and their operation is based on Boolean algebra. At any given moment, any terminal is in one of the two binary conditions: true or false. False represents 0, and true represents 1.
Depending on the type of logic gate being used and the combination of inputs, the binary output will differ. A logic gate can be thought of like a light switch, where in one position the output is off (0), and in another, it is on (1).

Typical Logic gate chips

Logic Voltage Levels in Synthedit.

The logic gate emulations in SynthEdit are similar in operation to hardware logic chips with a few additions for reliability.
1) Input pins incorporate ‘hysteresis’ to give noise-immunity.
2) An input registers ‘ON’ when the voltage exceeds 3.33, but isn’t ‘OFF’ until the voltage drops below 1.66, this helps the device to handle imperfect input signals. i.e. small errors, fluctuations or noise in a input signal.
This means they generally can’t jump the ‘grey area’ and create a false “on” or “off” signal.

The "grey area" of logic voltages.

Important note regarding logic gates:
A logic gate cannot be used for audio purposes for example- to pass audio through an OR gate when one input is high. You will just get a very distorted audio signal from the output. Although they have dark blue Audio Voltage pins we are dealing with a simple on/off (True/False) signal.

Truth table for logic gates
One method of showing how the various gates operate is a “Truth Table”.

The way I have chosen to try and make things a little easier is to show the state of the inputs and outputs with LED indicators showing the logic states:
LED Lit = 1 (true)
LED Unlit = 0 (false)

AND Gate.

The And gate gives an output of 0 unless ALL inputs are 1, when it the outputs 1.

Both inputs 0 = Output 0
One input 1, one input 0
= Output 0
Both inputs 1 = Output 1

NAND Gate

A Nand Gate is the inverse of an And Gate

Both inputs 1 = Output 1
One Input 1, one Input 0
= Output 1
Both Inputs 1 = Output 0

Or Gate.

An Or Gate gives an output of 1 if either or both inputs are 1, and a 0 if either or both inputs are 0

Both Inputs 0 = Output 0
One Input 1, One Input 0
= Output 1
Both Inputs 1 = Output 1

Nor Gate.

A Nor Gate is the inverse of an Or Gate

Both Inputs 0 = Output 1
One Input 1, One Input 0
= Output 0
Both Inputs 1 = Output 0

Logic Inverter (Not Gate)

A Not Gate gives an output of 1 if the input is 0, and an output of 0 if the input is 1.
It only has one input.

Input 1 = Output 0
Input 0 = Output 1

XOR Gate (Exclusive OR gate)

An XOR gate gives an output of 1 if either input is 1, if both inputs are 1 or 0 it outputs a 0.

Both inputs 1 = Output 0
One Input 0 = Output 1
Other input 1 = Output 0
Both Inputs 0 = Output 0

Some useful TD modules for use with Control Voltages.

Sometimes you need a special module to control Filters or Oscillators.

TD_EnvFollow_A
Envelope Follower Type A
This is a simple envelope follower based on “traditional” analogue effects pedal design. This module does not do any filtering, you will need to connect a filters cut off control to the output plug!
The input is internally rectified, so you also save a module in the process.
The attack and release time pins only update at SE’s internal block-rate.
Note: This is a typical type of envelope follower found in guitar pedals and some High-End compressors. The release time should always be much larger than the attack time, otherwise the envelope following isn’t very accurate. If the release time is too short the effect it is being used in will produce distorted audio due to the input waveform modulating the output (which is how the original effects pedal would normally behave).

Typical Envelope follower application:

TD_EnvFollow_B
Envelope Follower Type B
Notes:
A simplified envelope follower based on traditional analogue design techniques.
The input is internally rectified – so you also save a module in the process.
Attack and Release time pins only update at SE’s internal block-rate.
For the technically inclined:
This topology is unique because internally it releases before it attacks.
The actual release time is T-attack + T-release, but usually attack is much shorter than release so this isn’t very audible, it does however reduce intermodulation distortion more than the regular switched coefficient method.
The native SE envelope is a switched coefficient type, as is all other. This method does change the release trajectory somewhat. This does not use TPT/ZDF but the Step Invariant method instead to realize the topology.

TD_Quantizer
Mono voltage quantizer.
Notes: Suitable for control voltage or audio-rate signals. The module quantizes the input voltage according to step size, that is it constrains the input voltage change to pre-set steps of the value specified. Minimum step size is 0.0000001V. This module uses less CPU than the stock SynthEdit version.

TD_Quantizer_ST
Stereo voltage quantizer.
Notes: Suitable for control voltage or audio-rate signals. The module quantizes the input voltage according to step size, that is it constrains the input voltage change to pre-set steps of the value specified. Minimum step size is 0.0000001V. This module uses less CPU than the stock SynthEdit version.

Contour module

TD_Contour
Voltage contour modifier, select for a list of pre-set formulae.
Notes: The easiest way to see what the modes do, is to connect a sawtooth wave of +/- 5 volts to the input and then check it on a Scope. Predominantly made to alter the response of a VCA (use with Level Adjust), but can be used for other things too.
Modes:- Thru, Mirror, Clip0/10, Expo1, InvExpo1, Expo2, InvExpo2, Expo3, InvExp3, Square, InvSquare, Log1, InvLog1, Log2, InvLog2, Log3, InvLog3, Sqrt, InvSqrt, Pow.25, InvPow.25, Scrv, InvScrv, SqrScrv, SqrInScrv, Gate40, Gate34.

Curver module

TD Curver.
Control voltage curve modifier.
Input voltage: the range is within the 0 to10 Volt Range. This input is internally clipped to these levels..
Curve Amount: the range here is also 0 to 10 volts. 5 Volts = Unchanged input signal appears at the output.
Again the easiest way to see the effect is to experiment using a sawtooth input and a ‘scope on the output. Some of the results I have obtained are shown below

TD_PeakHold
Peak Hold Filter
Notes: This module is generally used as a Peak hold for GUIs, and is not recommended for audio use. (You need to use a DSP-GUI bridge or Patch Mem)

TD_PeakHold_ST
Stereo peak hold filter
Notes: Generally used as a Peak hold for GUIs, and is not recommended for audio use. (You need to use a DSP-GUI bridge or Patch Mem)

Some other Useful filters in the TD range of Modules.

Important Note: None of these filters are intended to have their frequency cutoff modulated by an envelope or another oscillator/LFO. Rapid frequency changes will introduce audio artefacts, clicks and popping noises. Some of these artefacts may be very loud.

Butterworth filters.

TD_Butterworth_HP
Type: Butterworth high pass filter.
Can be set from 2nd order filtering to 12th order filtering.
There is no internal clipping on the kHz input voltage, and the control voltage only has the 1V/kHz characteristic.

TD_Butterworth_LP
Type: Butterworth low pass filter.
Can be set from 2nd order filtering to 12th order filtering.
There is no internal clipping on the kHz input voltage, and the control voltage only has the 1V/kHz characteristic.

TD_P1Z1
Type: 1 Pole (6dB per octave), 1 Zero Filter.
A specific design of Butterworth filter.
Selectable filter modes: Low Pass, High Pass, Bandpass.

TD_P1Z1_ST
Type:
Stereo version of the 1 Pole (6dB per octave), 1 Zero Filter.
A specific design of Butterworth filter.
Selectable filter modes: Low Pass, High Pass, Bandpass.

State Variable Filters.

TD_SV2
Type: Linear State Variable Filter
Note:- The kHz 0-10 V, and Res -10 – +10V inputs are not internally clipped so external voltage limiting should be applied to prevent illegal values being used.
Filter Modes; Low pass 12dB per octave, High pass 12dB per octave, Bandpass 6dB per octave, Band reject 6dB per octave, Low pass 6dB per octave,
High pass 6 dB per octave, All pass 12dB per octave.

TD_SV2_ST
Type: Stereo Linear State Variable Filter
Note:- The kHz 0-10 V, and Res -10 – +10V inputs are not internally clipped so external voltage limiting should be applied to prevent illegal values being used.
Filter Modes; Low pass 12dB per octave, High pass 12dB per octave, Bandpass 6dB per octave, Band reject 6dB per octave, Low pass 6dB per octave,
High pass 6 dB per octave, All pass 12dB per octave.

State Variable Formant filters.

TD_SVX4
Four zero peak gain state variable bandpass filters internally connected in parallel.
Notes: Primarily designed as a building block for designers to create their own formant filters. Having a quad filter module uses less CPU than individual filters.
Note:- The kHz 0-10 V, and Res -10 – +10V inputs are not internally clipped so external voltage limiting should be applied to prevent illegal values being used.

TD_SVX4_ST
Stereo version. Four zero peak gain state variable bandpass filters internally connected in parallel.
Notes: Primarily designed as a building block for designers to create their own formant filters. Having a quad filter module uses less CPU than individual filters.
Note:- The kHz 0-10 V, and Res -10 – +10V inputs are not internally clipped so external voltage limiting should be applied to prevent illegal values being used.

Audio Crossover Filters.

TD_Xover12
Type: 12dB per octave crossover filter.
Notes: The crossover frequency is not internally limited, so the crossover kHz input voltage should be clipped in case illegal values might occur.
This is module is built out of a standard State Variable filter and is suitable for modulation if need be.

TD_Xover12_ST
Stereo 12dB per octave crossover filter.
Notes: The crossover frequency is not internally limited, so the crossover kHz input voltage should be clipped in case illegal values might occur.
This is module is built out of a standard State Variable filter and is suitable for modulation if need be.

Hilbert 90 degree filter network.

TD_Hilbert_A
Type: Hilbert Filter network, this network creates 90 degrees phase difference between the two outputs.
Notes: This uses an IIR 2 x 8 pole 90 degree phase-difference network. The outputs are approximately 90 degrees apart in phase, which is needed to build frequency shifters. The approximation in phase shift is not a problem for frequency shifting in general because if the input frequency shifts, so does it’s ability to cancel out with the original signal.

TD_Slew2
Control signal “slewer”.
The type of slew can be set to; Constant rate, Constant time.
Notes on Constant Time: It takes the same amount of time to go from 0-1 or 0-10. 1 volt = 1 second. The curve is exponential.
Volts slew time is limited to a maximum of 20 seconds and a minimum of 1 millisecond.
Notes on Constant Rate: It takes less time to go from 0-1 than 0-10, as it moves at the same speed between points. 1volt per 1second. The curve is linear.
Volts slew rate is limited to a maximum of 20,000 volt per second and a minimum of 0.1 volt per second.
Useful for introducing “glide/portamento” effects for control voltages, removing “stepper” effects, and smoothing out the output of sample/hold generators.

TD_PeakHold
Type: Peak Hold Filter
Notes: Generally used as a Peak hold for GUIs, and is not recommended for audio use. (You need to use a DSP-GUI bridge or Patch Mem)

TD_PeakHold
Type: Stereo Peak Hold Filter
Notes: Generally used as a Peak hold for GUIs, and is not recommended for audio use. (You need to use a DSP-GUI bridge or Patch Mem)

The TD range of Synthesizer filters.

These filters are all suitable for use as a Voltage Controlled Filter (VCF) in synthesizers, and as such can have their cutoff and resonance frequencies modulated rapidly.
Notes: It should be taken as read that all these filters have their control voltage internally limited to +10 Volts, and that they operate within the normalizer SynthEdit audio voltage range. Some may have the audio internally clipped so will distort at high input levels.

Ladder Filters.

TD_DiodeLP24_A
Type: 24dB per Octave frequency roll-off diode ladder lowpass filter type A
Notes: A simplified 4 pole diode-ladder lowpass filter with a single symmetrical non-linearity. Partial passband gain-loss compensation. Diode-ladder filters are unbuffered which leads to the cutoff frequency being a product of cutoff amount, input level and resonance.

TD_DiodeLP24_B
Type: 24dB per Octave frequency roll-off diode ladder Lowpass Filter Type B
Notes: A 4 pole diode-ladder lowpass filter, the first pole is an octave higher, with an additional unbuffered high pass filter in the feedback path that partially damps the resonance at low cut-off frequencies.
An extra buffered high pass filter is on the input too. So it is more like a 5 pole + 1 pole filter. The filter cutoff slope is not a constant vs frequency. There are asymmetrical non-linearities, and partial passband gain-loss compensation. Diode-ladder filters are unbuffered which lead to the cutoff frequency being a product of cutoff amount, input level and resonance. Because of the first pole being an octave higher, maximum cutoff is 9.5 Octaves (~9.95kHz) if the sample rate is equal or less than 48kHz, 10.5 octaves (~19.9kHz) otherwise.

TD_DiodeLP24_C (EMS VCS3 Emulation)
Type: 24dB per Octave frequency roll-off diode ladder Lowpass Filter Type C
Notes: A 4 pole diode-ladder lowpass filter inspired by the paper “Efficient polynomial implementation of the EMS VCS3 filter” by Stefano Zambon and Federico Fontana. However it uses ‘Mystan’s Pivot’ method to approximate the non-linearities instead, which in this case are asymmetrical. Full passband gain-loss compensation. Diode-ladder filters are unbuffered which lead to the cutoff frequency being a product of cutoff amount, input level and resonance.

TD_Ladder5out_HP
Type: Linear 4 pole High pass filter with five outputs
Note: This module is useful as the basis for pole-mixing filters.
Note: The filter does not self oscillate.
Traditionally, 4-pole pole-mixing filters only mix the 4 poles.
Two of the poles are inverting – either 1 and 3 or 2 and 4. Some short/set-high/bypass the first pole under some circumstances to get more variations.
With this version, instead of bypassing – all you have to do is move the mixing-coefficients up i.e. hp1 coefficient, hp2 coefficient, hp3 coefficient becomes in-hp4 coefficient, hp1 coefficient, hp2 coefficient.

TD_Ladder5out_LP
Type: Linear 4 pole Lowpass Filter with 5 outputs
Notes: This module is useful as the basis for pole-mixing filters.
Note: The filter does not self oscillate.
Traditionally, 4-pole pole-mixing filters only mix the 4 poles.
Two of the poles are inverting – either 1 and 3 or 2 and 4. Some short/set-high/bypass the first pole under some circumstances to get more variations.
With this version, instead of bypassing – all you have to do is move the mixing-coefficients up i.e. lp1 coefficient, lp2 coefficient, lp3 coefficient becomes in-lp4 coefficient, lp1 coefficient, lp2 coefficient.

TD_LadderHP24_A
Type: 24dB/Octave Transistor-Ladder High pass Filter
Asymmetrical non-linearities. Partial passband gain-loss compensation. Self oscillates.

TD_LadderLP18_A
Type: 18dB per Octave Transistor-Ladder Lowpass Filter
Simplified filter version with a single symmetrical non-linearity. No passband gain-loss compensation. Self oscillates.

TD_LadderLP24_A
Type: 24dB/Octave Transistor-Ladder Lowpass Filter Type A
Simplified version with a single asymmetrical non-linearity. No passband gain-loss compensation (classic behaviour). Self oscillates.

TD_LadderLP24_B
Type: 24dB per Octave Transistor-Ladder Lowpass Filter Type B
Multiple asymmetrical non-linearities. Partial passband gain-loss compensation. Note: The filter does not self-oscillate.

TD_LadderLP24_C
Type: 24dB/Octave Transistor-Ladder Lowpass Filter Type C
This filter has a buffered high pass filter in the feedback path. This prevents self oscillation at very low frequencies and also prevents bass loss at high resonance levels. Asymmetrical non-linearities.

Oberheim X-Pander type filter.

TD_Panda (Inspired by the Oberheim X-Pander filter)
Type: 4pole OTA Inspired Filter
Notes: The filter poles are mixed internally to create 25 different frequency responses. Produces predominantly 3rd harmonic distortion. Self oscillates.
List of Filter frequency responses; LP4, LP3, LP2, LP1, HP4, HP3, HP2, HP1, BP4, BP2, BPS, HP3LP1, HP2LP1, HP1LP3, HP1LP2, HP1BR2, BR2LP2, BR2LP1, BR4, BR2, BRBP2, LP1BR2HP1, LP1PK2, BR2PK2, HPX.

Sallen-Key filters.

TD_SK3P
Type: Buffered 12dB/Octave Lowpass Sallen-Key Filter
Frequency cutoff 12dB per octave slope. The extra pole is in the feedback path and limits resonance at higher frequencies and alters tracking a bit. Self-resonates up to about 3.7kHz. Symmetrical non-linearities.

TD_SK4P
Type: 12dB/Octave Lowpass Sallen-Key Filter
Experimental, has extra poles. Asymmetrical non-linearities.

TD_SK_A
Type:
Multi-Mode Sallen-Key Filter; Low Pass 12dB per Octave, High Pass 6dB per Octave, Band Pass 6dB per Oct.
Buffered. This saves some CPU cycles compared to the Steiner modules. Asymmetrical non-linearity.

Steiner-Parker filters.

TD_Steiner_A
Type: Buffered Steiner-Parker multi-mode filter Type A
A Steiner-Parker filter is simply a multi-input Sallen-Key filter.
Symmetrical non-linearities. Does not self-oscillate. Maximum input is +/- 10 volts. If the sample rate is less than, or equal to 48 kHz, then the maximum cutoff frequency is approximately 14 kHz otherwise it is approximately 19.9kHz.

TD_Steiner_B
Type:
Steiner-Parker Filter Type B
An unbuffered version of a Steiner-Parker filter (the feedback loop is still buffered), which simply is a multi-input Sallen-Key filter.
Asymmetrical non-linearities. Does not self-oscillate. Resonance decreases in higher octaves. Maximum input is +/- 10 volts.
If the the sample rate is less or equal to 48kHz, maximum cutoff frequency is approximately 17.3 kHz otherwise it is approximately 19.9 kHz.

TD_Steiner_C
Type:
Steiner-Parker Filter Type C
A buffered version of a Steiner-Parker filter, which simply is a multi-input Sallen-Key filter. Bright asymmetrical non-linearities. Self-oscillates.
If the sample rate is less or equal to 48kHz, the maximum cutoff frequency is approximately 17.3kHz otherwise it is approximately 19.9kHz.

State-Variable filters.

TD_SV24_A
Type:
Cascaded State Variable Filters Type A; 24dB per Octave Low pass, 24dB per Octave High pass, and 12dB per Octave Band pass.
Induced passband gain-loss to prevent too high levels with high resonance.
This is a non-linear filter but it is not able to self-oscillate.
This module uses less CPU than if two standard SE SV filters were cascaded.

TD_SV24_B
Type:
Cascaded State Variable Filters Type B; 24dB per Octave Low pass, 24dB per Octave High pass, 12dB per Octave Band pass.
Induced passband gain-loss to prevent signal levels becoming too high with high levels of filter resonance.
This is non-linear filter but it is not able to self-oscillate. The resonance level decreases as the filter cutoff frequency increases.
This module uses less CPU than if two standard SE SV filters were cascaded.

TD_SV_C
Type:
State Variable Filter Type C; 12dB per Octave Low pass, 6dB per Octave Band pass.
Experimental State Variable Filter that is modified by adding an extra feedback path around the structure, so it’s not really a true SV filter any more. Resonance decreases at higher frequencies. Asymmetrical non-linearities. Does not self oscillate.

TD_SVmo2
Type: Multiple Output State Variable Filter; 12dB/Octave Low pass, 6dB/Octave Band pass, 12dB/Octave High Pass
The filter outputs can be mixed, combined or otherwise processed to achieve other filter shapes. Non-linear filter.

TD_SVmo2_ST
Type:
Stereo Multiple Output State Variable Filter 12dB/Octave Low pass, 6dB/Octave Band pass, 12dB/Octave High Pass
The filter outputs can be mixed, combined or otherwise processed to achieve other filter shapes. Non-linear filter.

TD_SVxfade
Type: Cross-fading State Variable Filter. Three pre-programmed selectable crossfade sequences.
Select the filter type and cross-fade sequence from;
Low pass /Band Reject /High pass,
Low pass /Peak /High pass,
Low pass /All pass /High pass.
The cross-fade voltage range is from -5 Volts to +5 Volts.

Making a Center return slider in SynthEdit.

This is a handy little prefab, that’s easy to make. It’s useful if you have a slider with the range of -10 V to + 10 V, it can be fiddly finding the 0 V “null point” with the standard slider.

How the center return slider works.

The control works by having a button or other clickable item send a Mouse Down signal to a Spring module, which then sends a reset value of 0 volts to the Patch Memory, and the Image 2 slider control.

We need to make up the structure below inside a container.
When we change the Image2 filename to “vslider_med.png” this will automatically load the instructions for how the control should behave, so leave this property setting as “Auto”. Likewise with the Image2 that has “button.bmp” loaded.
By connecting the Mouse Down plug of Text Entry4 to the PatchMemory Float3 if we click on this text label it will also reset the control to 0 Volts.
You should untick the Text Entry4’s writeable property so that it can’t be edited from the panel (it keeps it’s mouse down control output though).
All we need to do is set the Reset Value for the Spring module to 0, the the prefab is completed ready to save and use
The maximum and Minimum slider values can be set as normal in the Prefab properties panel when in use in SynthEdit.
Note: Do not try and make the slider return to 0 V “on click” by connecting the Mouse Down plug for the slider control… it won’t work like that. As soon as you move the slider it will send a Mouse Down to the Spring, and as soon as you release the control it will snap back to 0 V.

About VST plugins and VST3.

What is a VST?

VST is an abbreviation of Virtual Studio Technology which is an audio plug-in software interface that plugs-in software synthesizers and effects units into digital audio workstations. VST and similar technologies use digital signal processing (DSP) to emulate a traditional hardware recording studio using computer software technology.
Thousands of plugins exist, both paid and free, and many audio applications support VST under license from it’s original creator, Steinberg.

Overview
VST plugins generally run within a digital audio workstation (DAW), to provide additional functionality and instruments, although there are few standalone plugin hosts exist that support VST plugins.
Most VST plugins are either instruments (VSTi) or effects (VSTfx), although other categories do exist: for example spectrum analyzers, and various meters.
VST plugins nearly always provide a custom graphical user interface (GUI) that displays controls similar to physical switches and knobs on audio hardware. Some (often older) plugins rely on the host application for their user interface.

VST Instruments.

VST instruments include software simulation emulations of well-known hardware synthesizers (Moog, ARP, Roland to name a few) and samplers. These often closely emulate the look of the original equipment as well as its sonic characteristics, and behaviour. This lets musicians and recording engineers use virtual versions of devices that otherwise might be almost unobtainable, very expensive and hugely expensive to keep in working condition.

A VST Instrument running in the Reason DAW.

A VST Instrument running in Reason DAW

VST plugins and MIDI
VST instruments receive notes as digital information via MIDI, generate, process and output the results as digital audio.

VST Effects plugins.

Effects plugins are able to receive digital audio and process it, passing it on to their outputs. Some of the effect plugins also accept a MIDI input – for example, MIDI sync to modulate the effect in sync with the tempo.
MIDI messages can control both instrument and effect plugin parameters. Most host applications can route the audio output from one VST to the audio input of another VST (chaining). For example, the output of a VST synthesizer can be sent through a VST reverb effect.

A VST plugin running in Reason DAW.

A VST Effect running in Reason DAW

History of VSTs.

Steinberg released the VST interface specification and Software Development Kit (SDK) in 1996. They released it at the same time as the Steinberg Cubase 3.02 DAW, which included their first VST plugins: Espacial (a reverb effect), Choirus (a chorus effect), a Stereo Echo, and an Auto-Panner.

VST 2.
Steinberg updated the VST interface specification to version 2.0 in 1999. One notable addition was the ability for plugins to receive MIDI data. This supported the introduction of VSTi plugins. VST Instruments could now act as standalone software synthesizers, samplers, or drum machines.
Neon was the first available VST Instrument (which was included with Cubase VST 3.7). It was a 16-voice, 2-oscillator virtual analog synthesizer (Pretty basic compared to some of the VSTi’s being created now).
VST 2.4.
In 2006, the VST interface was updated to version 2.4.
Changes included the ability to process audio with 64-bit precision. A free-software replacement was developed for Linux MultiMedia Studio (LMMS) that would be used later by other free-software projects.

VST 3.0 was introduced in 2008. Changes included:
Audio Inputs for VST Instruments
Multiple MIDI inputs/outputs
Optional Steinberg Kernel Interface (SKI) integration

VST 3.5 was introduced in February 2011.
Changes included:
Note expression, which provides extensive articulation information in individual note events in a polyphonic arrangement. According to Steinberg, this improves support for performance flexibility, and allows a more natural playing feel.
In October 2011, Celemony Software and PreSonus released Audio Random Access (ARA), which is an extension for audio plug-in interfaces, such as VST, allowing for greater integration between the audio plug-ins and DAW software.

VST2 Support officially discontinued.
In September, 2013, Steinberg discontinued maintenance of the VST 2 SDK. In December, Steinberg stopped distributing the V2 SDK. The higher versions of SDK have continued support.

VST 3.6.7 came out in March, 2017.
VST 3.6.7 includes a preview version of VST3 for the Linux software platform, and the VST3 part of the SDK was given a new dual license: “Proprietary Steinberg VST3” or the “Open-source GPLv3”.

Hosting VST’s

VST plugins can be hosted in incompatible environments by using using software a translation layer, or shim. For example, FL Studio only supports its own proprietary plugin architecture, but a native “wrapper” loads VST plugins, among others. FXpansion likewise has a VST to Real Time Audio Suite (RTAS) wrapper that lets VST plugins run in Pro Tools, and a VST-to-Audio Units (AU) wrapper lets VST plugins run in Logic Pro.

Hardware Hosting.
Hardware VST hosts can load specially created versions of VST plugins. These units are portable and usable without a computer, although some of them do require a computer for editing.
Other hardware options include PCI/PCIe cards designed specially for audio processing, which take over audio processing from the computer’s CPU and free up RAM and valuable processor power.
Some hardware hosts accept VSTs and VSTis, and either run Windows-compatible music applications such as Cubase, Live, Pro Tools, Logic etc., or are able to run their own DAW. Other hardware hosts are only VST Hosts, and thus will require a separate DAW to function.
Origin from Arturia is a hardware DSP system that houses several VST software synthesizers in one machine, such as the Jupiter 50/80 from Roland. Using the required software, audio data can also be sent over a network, so the main host runs on one computer, and the VST plugins can run on peripheral machines.

The VST Standard.

The VST plugin standard is the audio plugin standard created by Steinberg to allow any third-party developers to create VST plugins for use within VST host applications. VST requires separate installations for Windows, macOs, and Linux. The short history of software developments for Linux means few developers have as yet targeted the Linux platform.

Presets
VST plugins usually have many controls, and therefore need a method of managing presets (sets of control settings).
Steinberg Cubase VST introduced two file formats for storing presets: an FXP file stores a single preset, while an FXB file stores a whole bank of presets. These formats have since been adopted by many other VST hosts, although Cubase itself switched to a new system of preset management with Cubase 4.0.
Many VST plugins have their own proprietary methods of loading and saving presets, which do not necessarily use the Steinberg FXP/FXB formats.

Typical VSTi Preset menu.

A VSTi Preset menu

Synthedit Skins Part 1

What are “Skins”.

Synthedit Skins are a means of changing the appearance of your control panel view, and defining the behaviour of some of the controls.
From the default dark blue skin:-

The Default Blue Skin

To this one:-

Alternative skin


Skins are a collection of graphics files and text files. These folders and file are at the default path of C:\Users\Public\Documents\SynthEdit Projects once again do not edit or change this, except to add new folders which must always have a unique name. Shown below is the contents of the Default folder.

Important note: Do not change, edit or delete the default skin. Really don’t change it, not ever.

File manager view of the Default kin folder

Add a new folder to the skins directory, the folder name is your new skin’s name. Once again, this folder must have a unique name.

Copy and paste images.
Copy any of the skin bitmaps you want to change to your new directory. Each bitmap has a text file with the same name. It describes the skin. Once you have made your copy then feel free to edit it as you like using a bitmap (paint) editor.

Size matters:
Keep your new skin images the same size as the originals, this will allow you to change the skin without having to re-arrange the controls again. You will almost certainly need to restart SynthEdit to see the changes you have made.

Mask files:
The mask file is optional, it contains transparency information. A simpler way to use transparency is the keyword ‘transparent_pixel x,y’ in the text file. This tells synthedit which pixel contains the ‘transparent’ color.

Fonts:
Font face, size and color are controlled by the file global.txt.

Image options:
Type:-
Slider:- the image has two parts: a background image and a sliding part that moves along a straight path.
Knob/Animated:- An image containing a series of frames arranged in a vertical stack (aka ‘filmstrip’).
Button:- Similar to a knob, but only two frames; on and off.
Bargraph:- the image contains two stacks of ‘lights’ (all-off and all-on). The metadata describes how to animate the lights.

Knob/Animated
frame_size:- the size of each frame of a filmstrip image. in pixels. Applies to buttons, knobs and animated images. Example:- frame_size 32, 32

padding:- The number of extra blank pixels to insert around an image. Used to visually center a knob or button which is asymmetrical. Example; padding 13, 7, 13, 4

handle_rect:- The position of the handle in a slider image. The handle is the part that moves. Example;- handle_rect 4, 41, 28, 55

handle_range:- The range of motion of the handle in a slider image. The handle moves from the top to the bottom of the image. The range is specified in pixels. Example;- handle_range 1, 26

orientation:– vertical or horizontal – the direction of motion of the handle in a slider image. Example;- orientation vertical

segment:- Used for Bargraph images. The vertical position of the first segment, followed which is by the height of each subsequent segment, specified in pixels. Example;- segment 1, 6

segment_count:- for bargraph images. The number of segments in the image in a Bargraph image.

tiled t/f:- indicates that an image should repeat like wallpaper to fill the available space.
Example;- tiled t

mouse_response:- how the image reacts to the mouse.

h – horizontal
v – vertical
c – click
r – rotary
s – stepped

line_end_length:- for panel group images.

transparent_pixel:- deprecated. For bmp images without a mask file, this is the color that is treated as transparent. The color is specified as a pixel position in the image.

mouse_response:
vertical
click
rotary
horizontal
stepped
reverse_vertical

More about skins…
Skins Part 2
Skins Part 3

Skins Part 2

The global.txt file

If you were a new user looking at the default skin for the first time, wondering how to make your own slick professional skin, the first thing you should look at is:
C:\Users\Public\Documents\SynthEdit Projects\skins\default\global.txt
This is where fonts, their sizes, colours, backgrounds, etc. are all defined.
Global.txt is the minimum requirement to have a new skin, here are the contents of the global.txt file as defined for the default skin.

Note: If you are familiar with CSS as used in web page design this will look familiar, it’s basically a cut down version of CSS.

Important Note: Never delete or modify the default skin or its global.txt file. Synthedit looks for these file when loading.
As with every other item in the default skin – that SynthEdit looks for when loading – if there is no definition in the global.txt file, it will refer back to the original default folder. That is why you don’t edit the default, among other reasons (you will get a strange display in structure view unless you really know what you’re doing).

Commenting:
A line prefixed by a semicolon is a comment, anything you put in a comment is not read by SE.
Commenting is useful as you may not remember why you changed a setting in a skin, and what the results of the change are. Comments are a designers best friend. Note: You can also use ‘//’ for commenting.

If you see the 3rd party skins made by experts, they only have a few items in them, you only need to include the objects you want to replace or change.
For example: you could, for example, make a skin called “Alternative Fonts1” and it would just contain global.txt – and your new global.txt need only contain a few references, not all, if you only wanted to change fonts for a few but not all text displays.

Fonts:
Beware of using unusual fonts. You’ll experience a bit of a disappointment seeing one of you projects on someone else’s computer with the wrong font, your fonts have to exist on the host system to display correctly, stick to the window (or MAC) system core fonts and you can’t go wrong.

Small Button and LED:– There is the difference between small button and switch or led. The small button is ‘click’ action -momentary- switch is ‘stepped’ -2step ‘latch’ , and the LED isn’t defined, and therefore is ‘passive’, a slave graphic.

Knob med.png and Knob small.png:- These are ‘type animated‘ with mouse response rotary.
In contrast to the fader used with the standard fader, which is a bitmap with a Mask, why the different method? I could replace the bitmap and mask with a PNG with transparency, as long as I observed positioning and size (making it much easier to make new faders)

Are you really supposed to start using the subcontrols knobs straight off? You don’t of course, you use the stock knob and fader when you’re knocking up an idea – so ideally, it would be nice to re-do those in your new skin, even if you were to use subcontrols.
In fact the quest would ideally be to produce a complete replacement generic skin where you can change the colours easily (for example).
That is quite a bit of work if you want to know what is going on with each different object type. The ‘workmanlike’ approach of just bashing out new graphics, rigorously adhering to default sizes, and maintaining consistency in style, may be the quickest and most effective way to achieve this, ultimately.

Note that there is a full set of parameters for each text category, but that it is not always used in full; so you could add extra parameters like background colour to them.

Colours: For some reason the method of specifying colours is non-standard. Instead of RR GG BB (the usual Red-Green-Blue format) in SynthEdit it’s reversed to BB GG RR!

Default skin global.txt (annotated)

;other skin settings
; EVERYTHING WITH SEMICOLONS IS IGNORED
; Fonts
; www.w3.org/TR/REC-CSS1#font-variant
; font-color – BBGGRR Blue-Green-Red mix, hexadecimal numbers
; background-color SAME (-1 = transparent)
; font-size – Height in pixels
; font-family – Searches available fonts, left to right. Specific font name, or generic…
; ‘serif’ (e.g. Times)
; ‘sans-serif’ (e.g. Helvetica)
; ‘cursive’ (e.g. Zapf-Chancery)
; ‘fantasy’ (e.g. Western)
; ‘monospace’ (e.g. Courier). Doesn’t seem to go smaller than 12 (Mind you too much smaller and it will be difficult to read, need to consider usability)
; Arial, Times New Roman, and Courier New are core fonts to Windows
;
; text-decoration underline (overline, line-through, blink not supported)
; font-style normal |italic (oblique not supported)

; font-weight : normal | bold | light | 100 | 200 | 300 | 400
; | 500 | 600 | 700 | 800 | 900
; following not supported at present: bolder | lighter
; text-align center | left | right
;UP TO THIS POINT, EVERYTHING IS INSTRUCTIONS FOR HOW TO DEFINE FONTS AND DISPLAY THEM
;
;TEXT DISPLAY CATEGORIES FOLLOW:
; >(text on modules title bar, structure view)
FONT_CATEGORY module_title
font-family Arial, “sans-Serif”
font-size 12
font-color #FFFFFF

FONT_CATEGORY panel_group (panel lines title font)
;font-family “System”, “sans-Serif” <THIS IS IGNORED but why 2 options below?
font-family “MS Sans Serif”, “sans-Serif”
font-size 14
font-weight bold
font-color #FFFFFF

FONT_CATEGORY control_label (never sure about this one.. ?default control text?)
;font-family System, “monoSpace”
;font-size 12
font-family “MS Sans Serif”, “sans-Serif”
font-size 14
font-weight bold
font-color #FFFFFF

FONT_CATEGORY control_edit (get confused by this one too..)
;font-family System, Arial, “sans-serif”
;font-size 12
font-family “MS Sans Serif”, “sans-Serif”
font-size 14
font-weight bold
;font-color #000000 – don’t apply to edit boxes

this one is obvious
; this category is for LED Stack item labels and rotary switch labels
FONT_CATEGORY switch_label
font-family Verdana, “monoSpace”
font-size 10
font-color #F5F5F5

FONT_CATEGORY selector_text >this too.
;font-family System, “monoSpace”
;font-size 10
font-family “MS Sans Serif”, “sans-Serif”
font-size 14
font-weight bold
font-color #ff0000

; the writing on container and VST plugin displays
FONT_CATEGORY tty
font-family terminal, monoSpace
font-size 10
font-color #00f000
background-color #000000

; plugs the pins in structure view?
FONT_CATEGORY plug
font-family Arial, “MS Sans Serif”, Verdana
font-size 10
font-color #000000

FONT_CATEGORY “Normal”
font-family “MS Sans Serif”
font-size 12
font-color #000000
background-color #ffffff
text-align center

FONT_CATEGORY “Heading 1”
font-family Arial, Verdana
font-size 28
font-color #fff7f7
text-align center
text-decoration underline
;font-style italic
font-weight 900

FONT_CATEGORY “Heading 2”
text-align center
font-family Arial
font-size 18

FONT_CATEGORY “Heading 3”
text-align center
font-family Arial
font-size 14

FONT_CATEGORY “User 1”
font-family Arial Unicode MS
font-size 14
font-color #464646
background-color #ffffff
text-align left

FONT_CATEGORY “User 2”
font-family Courier

FONT_CATEGORY “User 3”
font-family Fixedsys

More about Skins…
Skins Part 1
Skins Part 3

Skins Part 3

Text Files in the Default skin.

Each of these files relates to a graphic control element, and controls how it is displayed along with how it behaves.

arrow_left.txt and arrow right.txt
type animated
frame_size 22, 22
mouse_response click

Up down selector
Up/Down Selector (aka arrow left/arrow right)

bargraph1.txt
type bargraph
frame_size 28, 60
segment 1, 6
segment_count 9

Peak Meter
Bargraph (AKA Peak Meter).

bender.txt
type animated
frame_size 35, 76
padding 2, 3, 24, 2
mouse_response vertical

Pitch Bender
Pitch bender control (aka bender).

browse.txt
type animated
mouse_response click
frame_size 21,21

Browse for file
Browse for file icon

button.txt
type animated
frame_size 18, 30
mouse_response click

Button
Button

button_sm.txt
type animated
frame_size 20, 20
mouse_response click

Small Button
Small Button

buttonoff.txt
; medium button with light in the off condition
type animated
mouse_response click
frame_size 18,30

Button
Button

drop_down.txt
type animated
frame_size 22, 22
mouse_response click

Drop down symbol

file_button.txt
; ‘FILE’ button on VST controls panel
type animated
mouse_response click
frame_size 40,17

File button (seen on VST panel only)

hslider.txt
type slider
frame_size 51, 25
handle_rect 53, 1, 68, 25
handle_range 8, 33
orientation horizontal

Horizontal Slider
Horizontal Slider

joystick.txt
type animated
frame_size 25, 25
; extra space at: top, bottom, left, right
padding 7, 1, 7, 1

Joystick
Joystick Control

knob_med.txt
type animated
frame_size 32, 32
mouse_response rotary

Knob Medium
Knob

knob_sm.txt
type animated
frame_size 16, 16
mouse_response rotary

Knob small
Knob Small


led.txt
type animated
frame_size 18, 18

LED2
LED2 Indicator.

lines.txt
type lines
frame_size 27, 27 // Size of corners
; line_end_length 5 // length of line end-cap. Defaults to 5.

Panel Group (Lines)
Lines (aka Panel Group)

moog_knob.txt – this is the scale for the knob.
type animated
frame_size 48, 45
padding 13, 7, 13, 4
mouse_response rotary

moog_kob_sm.txt– is just a smaller version of the knob scale shown above.
type animated
frame_size 30, 29
padding 8, 4, 8, 3
mouse_response rotary

shiny_cap.txt – shiny_cap is the insert in the centre of the knob control.
type animated
frame_size 28, 28
padding 18, 19, 18, 19
mouse_response rotary

shiny_cap_sm.txt – shiny_cap_sm is the insert in the centre of the small knob
type animated
frame_size 18, 18
padding 11, 12, 11, 12
mouse_response rotary

switch.txt
; medium vertical slider
type animated
orientation vert
frame_size 25, 26
; padding adds extra space at: top, bottom, left, right
padding 5, 2, 5, 3
mouse_response stepped

Switch
Switch

switch_rotary.txt
type animated
frame_size 40, 40
mouse_response rotary

Rotary Switch
Rotary Switch

v_slider_med.txt
type slider
frame_size 28, 40
handle_rect 4, 41, 28, 55
handle_range 1, 26
orientation vertical

Slider control
Vertical Slider

vu_meter.txt
type animated
frame_size 67, 38

VU Meter
VU Meter


Synthedit Skins Part 1
Skins Part 2