Synthedit help and tutorials

Stuck with a SynthEdit project?

Page 17 of 20

Adding a Low Frequency Oscillator in SynthEdit.

A LFO in a synthesizer design is a fairly essential option. We can create variations in timbre by modulating the VCFs cutoff frequency, or vibrato effects by modulating the VCOs frequency slightly.
There are two choices, we can either us the stock oscillator (after all an LFO is just an Oscillator running at a frequency below the audible range which they do quite nicely), or we can use a third party LFO module. I’ll cover both options Stock oscillator in this article, and the third party LFO in the next post.

Using the stock Oscillator as an LFO.

The basic structure is quite simple, it’s just the oscillator with a slider control connected to the pitch plug, a list entry selector to select the waveform, followed by a level adjuster module so we can control the LFO’s output level.
The main changes to make are;
1) Set the Frequency scale to 1V/kHz in the properties panel (this is to make working out the LFO frequency easier).
2) Set the slider connected to the pitch plug so it has a minimum value of 0.0005V (=0.5Hz), and a maximum of 0.005V (=5Hz)- we are using 1V/kHz so divide by 1000 to get the frequency in Hz.
3) The level control can stay at the default of 0V to 10V to give us a useful LFO output range.

A basic LFO

Reducing CPU load and adding sync.

So the LFO above is OK as a basic one, but there are two ways we can improve on it a bit.
1) One thing we may want it to do is synchronize with the keyboard, so pressing a key triggers the waveform at the 0 volts “starting point” every time, or it can be synced to another LFO, or a clock oscillator.
2) Efficiency: With the basic LFO it can still clone itself when you press more than one key on your keyboard – it’s a polyphonic oscillator after all. So this is un-necessary, we don’t need it to be polyphonic, and its wasteful of CPU resources (each note means a clone, which means more CPU time used).
How can these options be added to our basic LFO?
Quite simply:
The first thing we need to do is add another IO module into the container, connect the pitch plug of the Oscillator to one of the IO Plugs via a Voice Combiner module (Found in the “Special” folder) this module effectively forces the Oscillator to always be monophonic whatever the settings are in you synthesizer, and however many notes you play on the keyboard.
To add sync we take a connection from the Oscillators Sync plug, via a Switch (Many->1) to the IO Mod.
Adding a Fixed Values (Volts) with a 0 volts output allows us to have a Plug labelled “Sync Off”, along with a “Sync On” plug.
This means our List Entry module will have the options Sync On , and Sync Off available- otherwise you list will just contain “Spare Value” as every option! So now you can have the LFO as free running, or to be synchronised with a key-press, or another LFO.
The improved structure is shown below.

Reducing CPU load and adding sync.

Feedback loops in Synthedit.

I thought you couldn’t use feedback in SynthEdit?
In the true sense of feedback in an electronic circuit, no it’s not possible.
Tight feedback loops (as in timing) are NOT currently supported in SynthEdit.  Like VST, SynthEdit processes samples in ‘blocks’ of about 100 samples at a time, this processing method prevents having tight feedback loops.  The Feedback-Delayed modules allows feedback at the expense of a small one-block delay (usually about 2ms).

What is feedback?

In a physical electronic circuits feedback is where we take a portion of the output of an amplifier, filter or other circuit and “feed it back” to the input (hence the term feedback) in this case through the resistor RS.
Feedback can be either negative (180 degrees out of phase with the input), or positive feedback (in phase with the input). The type of feedback affects how it interacts with the input signal. An example of negative feedback in an OP amp circuit is shown below.

Hardware feedback loop with an op-amp.

To obtain positive feedback we would merely connect Rf to the + input of the amplifier rather than the – input. In the case of a filter, adding positive feedback to the circuit will boost frequencies at the cut-off frequency producing a resonant peak much used in synthesizers. If the filter is a delay line based “comb filter” then we can use either negative or positive feedback. Negative feedback will cause notches to appear in the frequency spectrum, and positive feedback will cause resonant peaks to appear. The resulting sound from negative and positive feedback will noticeably different.

Both signals in phase.

AC voltages in phase.

From this we can see that if the two signals are both +/-5 V peak to peak they will add together 5V + 5V = 10V peak to peak.

The signals are 180 degrees out of phase.

AC voltages out of phase

Here you can see that the two signals if they are both +/- 5 V peak to peak will cancel out when added together (+5)+(-5)=0V.

In simple terms Positive feedback is IN phase and therefore adds to the signal level, whereas Negative feedback is 180 degrees OUT of phase and therefore subtracts from the signal level.

Why is there no true feedback in Synthedit?

This limitation is due to the way a VST Plug-in, and therefore SynthEdit, processes audio in blocks. A block is a group of samples representing a short piece of sound. Each block contains around 100 samples.
For example, in a typical VST synthesiser, the Oscillator produces a short piece of sound (100 samples long), then passes the block of samples to the filter, which then processes the block, before passing it on to the next module. This carries on through the chain of modules.
Feedback in “real” electronics is considered instantaneous (so fast it would make no difference to our audio) . In any block-based system such as SynthEdit, feedback must be delayed by at least 1 block of samples. Therefore you cannot create a feedback path without introducing a delay of at least 96 samples in length.  Because of this, true feedback is not possible, there is just too much of a delay at higher frequencies (2kHz and above), meaning there will be too much phase distortion introduced by the delay.

Filter feedback in Synthedit.
Normally (unless you’re a module designer) you won’t need to worry about feedback for filters, it’s all handled inside the module, but there are some times in Synthesizer circuitry when some feedback would be very useful.

How feedback works in Synthedit.

There are a set of modules specially created for enabling feedback loops. Say you wanted to have a circuit where you want to add feedback to a filter. You might try this:

However you’ll get the message saying feedback is not allowed, and the loop will be highlighted in red. You won’t break anything, but the sound engine will not start until the loop error is resolved.

Escaping from the loop.
However there’s a module we can use that does allow feedback of sorts. For our purposes here it’s the Feedback-Volts module (there’s a whole set of feedback modules in the “Special” folder one for each type of DSP data/signal that you might need).
If you connect up the structure shown below, introducing this special Feedback module means your loop will work without any errors. Just be aware of the limitations caused by the signal delay (about 2mS) at higher frequencies.

Correctly set up feedback loop.

With the layout above you will get a feedback type effect on your filter, but it won’t be quite the results you would get from an electronic feedback loop- because of the unavoidable delay you’ll get more of a flanger combined with LPF sound than a resonant filter.

So yes, you can use feedback, but if you’re expecting the same results as a hardware feedback loop you’ll be disappointed.

Types of SynthEdit feedback module available.
Basically all the data types:
BLOB,
Bool,
Double (Double precision Float),
Float, Int,
Int64 (64 bit Integer),
MIDI,
Text,
and Voltage.

Feedback for FM Synthesizers.

This means that if you wanted to set up an FM synthesizer in Synthedit and include feedback between VCO’s you can, but, there’s a caveat. (There’s always a catch somewhere!)
Our feedback delay means that the waveform that is being fed back to the oscillators PM input will not be phase matched to the oscillator as in a hardware circuit, so although it will work and provide quite acceptable FM feedback results the resulting sound can never match a hardware synthesizer such as a Yamaha DX7. The feedback will always sound “off” especially at higher pitches.

Feedback loop with filtering for an Echo plug-in.

This will work well, especially if you want to introduce filters or pitch shifting into the feedback loop. The delay will still be present, but have virtually no effect (if any at all) on the resulting audio output. The structure below would give us an Echo effect with variable HF damping in the feedback loop. Just remember to set the Feedback on the delay module to 0 to avoid any strange things happening!

All Pass filters in Synthedit.

I can hear those of you who have never heard of an All-Pass filter thinking “hang on a filter that passes everything? What possible use is that, how can this be a filter?
Well they are very useful items. They do indeed have an almost flat frequency response (see below), and technically they are a filter when connected up in the correct manner.

But if we put a 1kHz sine wave through the filter, and compare the output with the 1kHz tone direct from the oscillator something is happening to the signal passed through the filter:

Now we change the filters “pitch” control (below)

You can see that the phase of one signal has changed with regard to the other, so although the frequency response is flat, the phase of the signal passed through the filter is changing with frequency. This is useful, it will create a well known musical effect for us, the phaser. A phaser is quite a simple effect to create.

Creating a phaser in Synthedit:

If we connect an All-Pass filter to a noise source, then mix the direct noise signal with the signal passed through the filter you can see there’s a pronounced dip in the signal level at roughly 1kHz. This is where the filter has shifted the phase by 180 degrees relative to the input, so when the signals are added in the Level Adj module we get a cancellation effect causing a “notch” at that frequency.

Adding a second filter in series

By adding the second filter we get a second notch, at roughly double the frequency, so we can change the sound once again just by adding a second filter coupled to the first.

The resonance control adds a degree of feedback into the filter module.

Two stage Phaser for SynthEdit.

The structure below gives us a Phaser module like you might find on a guitarist’s pedal board. Adding the TD LFO A allows us to automatically sweep the notch frequencies up and down at a rate set by the speed control, and a frequency range set by the sweep control.
The mix control on the X-Mix control allows us to go from the “dry” unfiltered signal through to the fully filtered “wet” signal. The LFO type on the TD LFO A is set to “triangle” which is the sweep waveform on most phasers, and the modify plug has a value of 0 Volts to give us the triangle shape. The speed slider can be set to a minimum of 0.01 volts, and a maximum of 5 volts giving a useful LFO range of 0.01Hz to 5Hz.
Note: Unlike SVF or Moog filters it’s a good move to have your resonance control connected to all the All Pass filters, this will give you the deepest notch(s). This won’t cause any nasty overloads or oscillations.
Note: The All Pass filter module has two frequency to control voltage settings:
1 V/Octave and 1 V/kHz. The latter 1 V/kHz is perfectly good for a phaser, and uses less CPU power.
Note: When you connect two All Pass filters in series, you won’t create a deeper “notch” effect, as the second filter adds it’s own phase shift onto the shift introduced by the first filter, hence you get a second notch at a different frequency, and by adding a third filter we get yet another new notch frequency.
Adding filters always adds new notch frequencies.

Getting a better “resonance” sound from a SynthEdit phaser.

However the resonance control as it stands, won’t sound quite right due to the way synthedit handles feedback, but we can remedy this by adding a peak filter like so with its control voltage to pitch response set to 1 V/kHz and a variable resonance control added instead of being connected to the second phaser stage. The resonance we get when the SV filter is set to single stage band pass will sound much better than we can ever get from the stock All Pass filters.

Synthedit Sub-Controls. Stepping through a list of options for Filters or Oscillators.

The idea behind this is that you can step through the options (for example) of an oscillator with just a single button rather than using a drop-down list box. Once the prefab control is put together it’s self configuring apart from the text label, and text colours. The list is taken from the module you connect up to.

How to step through a list with a single button in SynthEdit.

The list stepper's structure.

The idea here is that when we click on the button (Image2) module, it sends a “True” pulse to the ED Step Increment Int module, which connects to the PatchMemory List3 module. The PM List3 module reads the list of options from the DSP module (for example an Oscillator) it’s connected to and converts this to an Enumerated List For the List to Text and ED Step Increment Int module…(this makes life easier…less typing, and less opportunity for errors creeping in).
Each time the ED Step Increment Int module receives a True pulse on the Increment plug it advances one step at a time through the list of options by advancing the Integer count by one step. The DAM list size module is used to inform the ED Step Increment Int module how many steps there should be, but for some reason I found you need to subtract 1 from the list co get the correct size.
The two ED Text entry modules are used to display the selected value, and add a label to the control.
Note: The Wrap option on the ED Step Increment Int module module should be set to “True” by selecting this on the options panel, then we can cycle through the list forever…
Note: The RH-Int-Redir module is needed to connect up the ED Step Increment Int module and the List to Text module due to the Outputs being on the LHS of the ED Step Increment Int module…
The List to Text module sends the Text name of the option selected to the Text Entry4 module where the selected option is displayed in the text box.
If you want to cycle the other way, just send the Boolean pulse to the Decrement plug, it’s as easy as that.
Note: If you want to make the Text label into a “click to select” connect the Increment plug on the ED Step Increment Int module module to the Mouse Down plug on the Text Entry4 module, and then you can step through in the same way by clicking on the text box.

Connecting up and using the prefab is easy, as you can see below, as I said the list is automatically generated when you connect the Switch to the Modules “List” plug.

Using the list stepper.

SynthEdit Sub-Controls. Switching between control panels.

Why have separate control panels?
Sometimes when we are designing a Synthesizer, we can end up with a very complex, if not outright cluttered and confusing control panel (we have all seen examples of those!). Wouldn’t it be great if we could have separate control panels for different functions, such as a sequencer panel, an effects panel, etc. Well the good news is that we can, and it’s not over complicated either!
Not only this anyone who uses your plug-in will thank you for it too.

How to have separate panels-the push button route.

With a few sub controls we can switch between control panels using a stepper controlled by a single button. Each switch is connected to a Bools to Int module via an QTN_Volt2GUIBool. This module converts as DSP voltage to a GUI Bool signal. When a button is pressed it sends a momentary “True” to the Bools to Int module, which the outputs an integer which corresponds to the plug receiving the pulse. Bool Val 1 outputs a 1, Bool Val 2 outputs a 2 and so on…
This is then converted back into individual latched (that is it’s held at “True” until a new integer value is received on the Value plug) Boolean outputs to the integer value received.

Switching between control panels

Note: When designing this sort of panel switching we need to be disciplined, and give plugs appropriate names wherever possible (annoyingly you can’t rename the plugs on some modules!) otherwise things can rapidly become extremely confusing, and difficult to de-bug.

When this is connected up as shown below, we can switch between the individual panels by clicking on the appropriate button.
Each individual control, or panel must be inside a container of it’s own for this to work properly.
Note: switching these panels on and off is only visible in the panel view when the audio engine is on, and not in not the structure view, where all the panel containers will be visible.

An example of using the prefab

Admin note: Updated 03/02/24 to reflect changes in the Elena Designs module pack (dsp-gui modules removed).

MIDI-CV2 and Polyphony Synthedit Modules.

MIDI-CV2 Module.

This module takes the MIDI input and converts it to control voltages for controlling and programming SynthEdit’s DSP (Audio/Voltage) modules.
It has Gate and Trigger outputs for triggering ADSR envelope generators, Pitch control for Oscillators and Filters, along with Velocity and Aftertouch for Filters and Amplifiers. Aftertouch is not supported by all MIDI Keyboards, so don’t be surprised if it doesn’t work in your MIDI setup: Check your handbook/Help files for your keyboard before doing too much bug checking!

Important notes about MIDI-CV2 module and its use.

Warning: Never place the MIDI-CV 2 module in its own container, this will lead to incorrect notes being played, as each new note is played the note pitches will jump progressively higher. It should always be in your main Synthesizer container.

Correct connection of the MIDI-CV2
Incorrect connection.
Incorrect connection.

Patch Mem and MIDI-CV2.
The MIDI-CV2 module is a type of Patch Memory module, do not try and use it connected directly to any Patch Memory modules. You will end up with a serious data conflict.

Example of incorrect use of MIDI-CV2.

This is likely to cause all sorts of headaches at a later stage. If you want to separate the Pitch CV and ADSR triggering you should use the MIDI to Gate2 module as shown further down the page…
Warning: in some cases using MIDI-CV2 in this way can cause SE to crash and close down immediately when the audio engine is started-you have been warned.

The correct method.
The ADSR2 should be triggered by a MIDI to Gate2 module to eliminate potentially odd feedback errors cropping up.

The MIDI-CV2 Module and it’s plugs.

MIDI-CV2 module connections

Plugs:
Left Hand Side:
-> MIDI In:- (MIDI) The MIDI input data which is converted to Voltages for SynthEdit to use.
-> Channel:- (List) Selects which MIDI channel the module will “listen” to. The options are All, or 1 to 16 exclusively. The default is “All” This can also be set in the Properties panel.

Right Hand Side:
<- Trigger:- (Voltage) Outputs a short pulse of 10V for triggering the attack section of an ADSR module, or for synchronizing with a key press.
<- Gate:- (Voltage) Outputs a voltage (10V) for as long as a key is held down.
<- Pitch:- (Voltage) Converts the MIDI note value to a voltage suitable for controlling the pitch of Oscillators and Filters. Uses the standard synthesizer value of 1 Octave per Volt.
<- Velocity:- (Voltage) Outputs a voltage proportional to how “hard” the key is hit on the MIDI Keyboard on a scale of 0 to 10 Volts.
<- Aftertouch:- (Voltage) Outputs a voltage proportional to the Aftertouch on the key being held down (pressure applied to the key while being held down if your MIDI Keyboard supports this).

About MIDI Polyphony and Synthedit.

Controlling the MIDI Polyphony is no longer handled by the MIDI-CV module, but is controlled by the dedicated Polyphony Control module.
The Polyphony module Provides overall control of Polyphony in your synthesizer- how many voices (notes) the synth can play at once. The greater your polyphony, the more keys you can play at the same time, this is usually deliberately limited to control the amount of CPU your synth can use. 8 to 32 voices is a typical amount.
Note: This module must be in the same container as the Polyphonic modules that you are controlling.
Note: Never connect any Patch Memory modules to the Polyphony Control module, it is already a type of Patch Memory module.
Note: Due to the way the module works the glide setting cannot be retained in any patches saved for your Synthesizer.
Warning: Do not have effects modules in the same container as a Polyphony Control Module, this will cause excessive CPU consumption, clicking, glitching and may cause crashes. The correct structure is shown below, this method means that the effects (which should not be Polyphonic anyway) are kept separate from anything Polyphonic and will not be driven into excess CPU usage. If you have Reverb, Delay or Chorus in a Polyphonic container CPU use will go crazy.

Correct method for adding effects to a synthesizer
The Polyphony module's connections.

Plugs:
Note: all the Integer plugs have a counterpart Text plug which are all named Item List, these are to enable connecting the Integer plug to a List Entry Module.
<->Polyphony:- (Integer) – How many notes can sound at any one time.
Range = 1 to 128.
<->Polyphony Reserve:- (Integer) These are the extra voices that usually remain unused. The point of Reserve Voices is to reduce clicking during voice-stealing. In the event that all the regular voices are used up, these temporary extra voices (this is what Voice Stealing means) allow for new notes to play while SynthEdit quickly fades-out some voices for recycling instead of just abruptly ending the notes.
3 to 8 reserve voices are usually sufficient (depending on how many notes you might trigger at the same time).
<->Voice Stealing:- (Integer) Controls how voices are recycled. There are three options: Soft, Hard, or Overlap

1) Soft;- Voices are allocated in a ’round robin’ fashion (e.g. 1,2,3…). When you play the same key repeatedly, then the same voice is recycled (e.g. 1,1,1..). Soft-stolen envelopes do not hard-reset to zero but start from current level. This give a feel somewhat like a monophonic synth where repeated notes fade very smoothly into each other. Not suitable for sample-based instruments because it will cause clicks during note-on events.
2) Hard;- Voices are always allocated in a ’round robin’ fashion (e.g. 1,2,3…). When you play the same key repeatedly, the previous voice is faded out very quickly.
3) Overlap;- Voices are always allocated in a ’round robin’ fashion (e.g. 1,2,3…). However, when you play the same key repeatedly, the previous voice is faded out slowly. This allows repeated notes to build-up in intensity somewhat like a real piano for example. The disadvantage is that this mode uses more CPU than the others. Not realistic on monophonic instruments like bass, as it will tend to muddy the sound and will probably cause flanging effects on samples.

-> Mono Mode:- (Boolean) When enabled (True) only one voice can be played, like a monophonic Synthesizer. Best for traditionally monophonic instruments like Bass. Not suitable for sample-based instruments because it will cause clicks during note-on events. Note however you can use polyphonic mode with Polyphony set to “1” to restrict a sampler to a single voice.
-> Mono Retrigger:- (Boolean)Affects how a mono instrument responds to legato (overlapping) playing when in Mono Mode. With Mono Retrigger enabled (True) you will hear envelopes retrigger for a distinct attack on all notes. Without retrigger, legato notes will glide smoothly into each other (soft-stealing).
-> Mono Note Priority:- (Integer) This has three options: Off, Low, Hi, Last In mono mode when two notes are Played, this controls controls which note played will sound.
-> Glide:- (Floating Point) The value of this control sets how fast note pitches glide in Mono mode. Also known as portamento. The range is from 0 to 10.
-> Glide Mode:- (Integer) Selects between two options; Legato, Always. In Mono Mode this controls what playing style causes notes to glide.
-> Bender Range:- (Integer) Controls the amount of pitch variation that is sent by the Pitch Bend wheel.
-> Voice Refresh:- (Integer) Has two modes; Enable, Disable.
Voice Refresh periodically ‘wakes‘ each voice. The purpose of this is reduce clicks which may occur under the following conditions: You change the setting of a filter (or other recursive module) while not playing a voice, then play the voice. The click can happen when the voice ‘wakes up‘ and suddenly updates the filter settings (which can cause a click). Under some conditions Voice Refresh can consume too much CPU, so this pin allows you to disable it

WARNING: For backward compatibility Polyphony control module will not work if your MIDI-CV is an older version and has pins like Mono-mode, Poly Mode, Retrigger, or Mono Note Priority pins connected.

Connecting the Polyphony Control in Synthedit.

How to connect the Polyphony Control module

Oversampling in SynthEdit

Oversampling Control Module:

This module provides control of the Oversampling rate for your Synthesizer or effects VST.
Note: This module only works when inside a container.
The oversampling rate is set by connecting a list entry control to the module.
This controls the sample rate at which the Container processes audio.
This figure is expressed as a factor relative to 44.1kHz (which is a typical sampling/processing rate). For example if you select 2x oversampling, the Container will process at a minimum of 88.2kHz.

The plugs on the oversampling module

Plugs.
<-> Oversampling: (Integer) Controls the sample rate at which the Container processes audio. This figure is expressed as a factor relative to 44.1 kHz (which is a typical standard rate). For example if you select 2x oversampling, the Container will process at (at least) 88.2  kHz.
The options are: x2, x4, x8, x16, and x32
Note: If your soundcard is already running at 88.2 kHz or higher, 2x oversampling won’t have any effect because SynthEdit takes this to mean that you are already processing at twice the ‘standard‘ rate. If the Soundcard is set to run at 88.2 kHz SynthEdit will only apply additional oversampling if you select 4x, 8x or a higher oversampling rate…
<-> List Items: (Text) Supplies the list of rates to choose from.
<-> Oversampling Filter: (Integer) Receives your choice of filtering.
<-> List Items 2: (Text) Supplies the list of filters to choose from: 3, 5, 7, 9, FIR Low, FIR Med, FIR High, FIR Ultra.

Oversampling Filter options:
3, 5, 7, 9, FIR Low, FIR Med, FIR High, FIR Ultra.

About the Oversampling Filter:- This option Controls the type of filter used to down-sample the audio as it exits the oversampling container.
A value of 5, 7 or 9 will select an IIR filter with the corresponding number of poles (more is better). These types of filters have low latency, and low CPU but introduce phase-shift into the signal.
A value of FIR-low, FIR-Medium, FIR-High, or FIR-Ultra will select a FIR filter. These filters are very clean and high-quality but do introduce some latency. FIR-Ultra is the best quality.
 Oversampling Filters: ( [3,5,7,9] Elliptic IIR Filter, [13-low, 14-med, 15-hi, 16-ultra] FIR Adaptive Quality, [20+] FIR actual taps)
Important Notes about Oversampling:
Note: Oversampling filter increases the CPU load by the same factor as the oversampling multiplier, this means x8 oversampling means the workload for the CPU is increased eightfold.
Note: Changing the oversampling rate causes a short interruption to audio processing while the oversampling filters are inserted into the signal flow.
Note: DO NOT connect a Patch Memory module to the Oversampling Module it will cause some very unpredictable and undesirable results..

About FIR Filters.

In signal processing, a finite impulse response (FIR) filter is a ‘filter whose impulse response (or response to any finite length input) is of finite duration, because it settles to zero in finite time’.
This is in contrast to infinite impulse response (IIR) filters, which may have internal feedback and may continue to respond indefinitely to an impulse (usually decaying).
The impulse response (that is, the output in response to a Kronecker delta input) of an Nth-order discrete-time FIR filter lasts exactly N + 1 samples (from first non-zero element through last non-zero element) before it then settles to zero. FIR filters can be discrete-time or continuous-time, and digital or analogue.

Example: 
A whole plugin is running at 44.100Hz, but you want to decrease aliasing created by distortion. So you containerize just the distortion module and add an Oversampling Control to that same container. Now, only the distortion part will be processed at double standard rate (88.200Hz, which will create less aliasing) and then filtered back to the original SR for further signal processing.
Note: There should be only one Oversampling Control per container, and it works “remotely” without any audio patch cables connected to it. It has two properties that you can access by selecting the Oversampling Control’s parent container and checking the Properties Panel

About Oversampling:

In signal processing, oversampling is the process of sampling a signal at a sampling frequency significantly higher than the Nyquist rate. In theory, a bandwidth-limited signal can be perfectly reconstructed if sampled at the Nyquist rate or above it.
The Nyquist rate is defined as ‘twice the bandwidth of the signal’.
Oversampling is capable of improving audio resolution and signal-to-noise ratios, and can assist in avoiding aliasing and phase distortion by reducing anti-aliasing filter performance requirements.
A signal is said to be oversampled by a factor of N if it is sampled at N times the Nyquist rate.
For example, we have a system with a Nyquist limit of 44kHz, but it’s actually sampled at 88kHz, then it would be oversampled by a factor of 2 so if the sample rate is taken up to 132kHz then we are oversampling by a factor of 3.

Why oversample?
There are four good reasons for performing oversampling:
1) To improve anti-aliasing performance (the higher the sample rate, the lower the level of the aliasing by products)
2) To increase audio resolution
3) To reduce background noise levels
4) It’s much easier to reduce aliasing distortion during sampling than after the sampling process (reducing aliasing after sampling is almost impossible to do without affecting sound quality adversely).
Oversampling and Anti Aliasing.
Oversampling makes it much easier to design and create analogue
anti-aliasing filters. Without oversampling, it is very difficult to create filters with a sharp enough cut-off necessary to maximize the available bandwidth without the audio exceeding the limitations of the Nyquist frequency limit.
By increasing the bandwidth of the sampling system, design considerations for anti-aliasing filters may be made simpler. Once the signal has been sampled, the signal can be digitally filtered and then down-sampled to the required sampling frequency.
In modern digital circuit or DSP technology, any filtering systems associated with the down-sampled audio are easier to put in place than an analogue filter system that would be required by a non-oversampled audio design.

SynthEdit Oversampling in action.
Its as simple as this, just connect these modules up like so inside the container, and welcome to the world of Oversampling. No further connections are needed.

Connecting up the oversamplin module

SynthEdit “Prefabs”

What is a prefab?

A Prefab is a SynthEdit file that can be inserted into a project like any other module. Prefabs are simply a container with other modules inside, already connected up to perform a specific function, they are ideal if you have a complex (or simple) structure you have created that you know you’ll re-use over, and over again… if you save it as a Prefab it’s there ready to use whenever you want it.
SynthEdit comes with some pre-built synthesiser and effect prefabs ready to use.

Hint: If you create a Prefab Sub-Folder in your SynthEdit Projects folder and store your Prefabs in there, separate Sub-Folders according on the function of the prefab, they will show up in your Modules panel. If you have control or waveform related Prefabs, and you use these names for the Folders, they will show up in those folders in the Modules Panel…choose your folder names wisely. Controls, Effects, Filters, Modifiers, Sub-Controls, and Waveform are all good choices… not only this, but if you create your own folder names for the Prefabs, then you’ll be saving them in your own categories (just be sure to choose a folder name not already used by synthedit if you want a unique category)

How to find your Pre-Fab  folder

Prefabs are a great time saver when building complex Synthesizers, or you have a complex structure you are going to use frequently. Or even a complex “module” that you had a hard time getting to work as you wanted (Don’t forget to include a read me file with it, you’ll thank yourself later!)
An example of a Prefab and internal structure is shown below. This is a relatively simple example, but one I use frequently. To open a container just double click anywhere on the container module.

All Prefabs will have at least two IO Modules, one for Input and one for Output. If you want to add more inputs and/or out outputs, just create a connection from the desired plug to the “Spare” in on the relevant IO Module.

Saving your prefab.

To save the Container/Structure as a prefab just right click, go to More… in the menu and select “Selection to Prefab”, then a “Save As” dialogue box will open allowing you to choose a folder (or create a new folder), and save the prefab with your own unique name (do not use a name already in use by an existing module).

Loading a prefab.

If it’s a prefab that you have created, then it can be loaded directly from the modules panel on the left hand side. If it’s a new one you have downloaded, then there are two methods you can use:
1) Drag the prefab to the appropriate folder, and re-scan the modules, this will add the prefab into your modules list.
2) Go to the “Files” menu, click on “Import Prefab” locate your downloaded file and select it. Click on OK and it will be imported into SE, then you can right click and navigate to “Selection to Prefab, then you can save it into the folder of your choice.

V1.4 Prefab and V1.5 prefab compatibility.

Important: V1.4 prefabs are saved with an .SE1 file extension, and are not compatible with the V1.5 .seprefab file extension. You will need V1.4 installed so it can be converted.
You need to open the file as if it were a normal SE project file in V1.5. It will then tell you that it was created in an older version of SE, and ask you if you want to convert the file using SE1.4. Once the file has been converted and then opened in V1.5 you can save it as a V1.5 .seprefab file and use it as a normal prefab.

Notes about Prefabs.

Note: You can have as many IO modules in a prefab as you like.
Note: To create a prefab you must containerize all the modules in the prefab before creating the prefab.
Important Note: You prefab does not contain any modules, it’s merely instructions for SE telling it how to connect the modules inside a container, and any parameters etc. that you specify. This means that if you are creating prefabs for other designers, or collaborating with another designer you must tell them if you have used any third party modules, as these will not be included in the prefab.
Missing modules = non-functional prefabs!

Concentric controls in Synthedit.

This is a method of creating a combined control for a coarse and fine voltage setting. It’s quite simple and uses the newer Vector controls. This is the finished control (Sorry that flashy looking knob in the centre is V1.5 only but the principle will work with the plain Vector Knob B in V1.4)

V 1.5 Vector Knob

How it looks using Vector Knob B in V1.4

V 1.4 control Knob

This is the structure below (Inside a container). We are just taking the Animation position of each vector control through a PatchMemory Float 3 to convert it to a DSP float value, this will later be converted to Voltage for DSP modules.
The PatchMem connected to the vector ring has its maximum value set to 1 so that we get a range of 0 to 1 for this control, and 0 to 10 for the Knob C. The two values are added together using an ED Add (Float) module, and converted to Volts for controlling DSP modules. This means we get a total range of 0 to 11 for the control (shades of Spinal Tap), so by setting the Knob C’s PatchMem to a maximum of 9, we go back to our usual default of 0 to 10 volts. All you need to do once its working is to create a panel view, size and line up the two controls then lock the container view and save as a prefab control.
This enables us to use the main inner knob as a coarse 0 to 10 control, and the outer ring as a fine 0 to 1 control (or any range you wish).

Changing the control ranges:

Changing the ranges for the inner and outer controls is as easy as setting the Max and Min values in the properties panel. This is set up for 0-to-1 for the outer ring, and 0-to-9 for the knob, giving an overall range of 0-to10 Volts out.

Two similar concentric knobs (V1.5 only)

The principle is similar, however I have added a text readout for the output value, and a text label for the control. Colours of the knobs and the text are editable too.

So this sort of control is possible.

And this is how it looks in panel view.

« Older posts Newer posts »