Synthedit help and tutorials

Stuck with a SynthEdit project?

Page 5 of 20

Adding extras to echo.

Adding damping to the echo.

The first addition to echo which goes a long way to creating a more natural sounding effect is damping. What exactly is damping?
When we hear echoes in a large room, hall or any large space, especially if there is an audience or any form of furnishing, is that the higher frequency sounds tend to get absorbed, and reduced in level. We can emulate this easily with a 1 pole LPF, the frequency of this can be varied creating a variable amount of damping. We just need to set up a feedback loop with a Feedback – Volts module, our 1 pole LPF, and a Level Adjust module.

Adding a low pass filter to introduce damping to the feedback

It’s not “All about the Bass”.

Sometimes (well quite often) we don’t want too much bass entering an echo as it can make the sound “muddy” and even overpower the higher frequencies. Adding a simple 1 pole HPF on the input of the Delay 2 module can help greatly with this by cutting out those troublesome lower frequencies

Adding high pass filtering to the delay

Getting a “Tape Echo” sound.

What is Tape Saturation?
It’s a subtle effect that occurs as the magnetic particles in a recording tape (remember reel to reel recorders?) are asked to record too higher signal level it introduces a slight harmonic distortion, and a soft clipping effect. What some would refer to as a “warm analogue sound”. Used sparingly it can add to an effect such as echo to reproduce some of the old tape delay effects units.
Examples of these were Roland Space Echo, Korg Stage Echo, and the famous Watkins WEM “Copycat”.
The distortion in these machines was a result of several factors:
The design of the amplifiers
The amount of tape “bias”
The type of recording and playback heads
The type of tape
The amount of feedback used.

Getting the “saturated tape” effect.
This can be done by adding a subtle distortion using the TanH formula. I have used a Waveshaper 2, for a tape effect it only needs to be a subtle amount, and nothing too harsh, so TanH is the ideal formula for imitating a soft tape saturation effect. An example of a TanH curve is shown below (full formula 5*tanh(x) along with the effect on a sine wave (yellow is direct from the oscillator).

5*tanh(x)
5*tanh(x)

We can soften the effect more by a simple modification of the formula to 5*tanh(x/2)

5*tanh(x/2) shaping
5*tanh(x/2)

Or the distortion can be increased by changing to 5*tanh(x*2)

5*tanh(x*2) shaping
5*tanh(x*2)

The depth and harshness of distortion is directly related to the multiplier or divisor vale for x. The greater the divisor the softer the effect, the greater the multiplier the harsher the effect. My suggestion would be to use a formula along the lines of 5*tanh(x/3), or for an even more subtle effect 5*(tanh/4)

5*tanh(x/3) shaping
5*tanh(x/3)

The Finished “Tape Echo”

Here is the final version. I tested a few modules for the saturation effect, and found the best sounding one seemed to be the stock waveshaper 2 using the formula tanh*(x/4).
The X Mix module on the waveshaper output is to give control over how much of the distorted and undistorted sound is used in the feedback loop.
Note: Don’t forget to set the feedback level on the Delay 2 module to 0, as we are using an external feedback loop.
Creating a stereo Echo is as simple as duplicating the effect and using the same controls for both channels. I containerized the Waveshaper 2,and left it as a non-visible module so that it’s not shown on the panel layout, and therefore not available to the used to change the saturation formula in the waveshaper.

ED Shape Envelope in action.

Here is a simple Synthesizer using the ED Shape Envelope 5, and The Shape Envelope Editor for controlling the VCF and VCA modulation. I have deliberately left out any “bells and whistles”, as this is really all about how to put together a useable Envelope generator, and include it within a Synthesizer. Below is the complete layout. Just a single VCO, VCF and VCA- all standard modules. The “special” section is the envelope generator.

Next comes a closer look at just the Envelope generator structure. One point of note is that we only use the Gate and Pitch output from the MIDI to CV 2 module.
The ED Shape Envelope 5 module does not need a trigger pulse as the standard ADSR does.

The Shape Envelope generator.

This relies on three dedicated modules:
ED Shape Editor 6
ED Node Selector
ED Shape Envelope 5.
We have already looked at the Shape Editor and Shape Envelope, but not the Node Selector…

Node Selector module

The module automates selection of a required shape node using a List Entry 4. The selected node index will be output to the Node Index integer pin, which is connected to a Patch Memory Int for connection to the Shape Envelope 6 which accepts a node index.
The module internally reads the number of nodes in the Shape BLOB, and creates the correct enumerated list to be output to the List Entry module.
A valid shape must be provided to the Shape In BLOB plug for the module to work.
The First Node and Last Node “plugs” are found in the properties panel, and control whether the first and the last node will be listed or not in the drop down list having the first and last nodes hidden will prevent the user setting these nodes to non-zero values which will cause clicks.
A List Entry or comparable module needs to be connected to the right hand Choice and Item List plugs. The List value chosen will then be directly sent to the Node Index pin.
A value received on the Node Index pin will be translated to a corresponding choice number for the Choice plug, if feasible, or otherwise.
Note: Every time a new Shape is received or an unexposed bool option is changed, all outputs are automatically updated.
The Item is always available and corresponds to no node selection (-1)

In this structure we are using the Active Node to set the Sustain point in the Envelope. The Sustain node works much like sustain in a conventional ADSR module.

Interpolation Note: The Interpolation method is selected using the Patch Memory List module, which reads the options available in the Shape Envelope module, and makes them available to the Shape Editor. The Patch Memory method should be used in all structures with these modules as it prevents the attempted selection of modes that are not relevant, or unavailable.
In this application we have Linear, Curve 1 and Curve 2 modes.
Envelope duration and Sustain: This controls the length of the Envelope in mS. This duration is always added to the sustain portion of the envelope. If the option <No Node> is selected the Sustain mode is inactive and the envelope duration is always equal to the length selected by the duration slider regardless of how long the key(s) are held down.
Flip X: This flips the shape on it’s X (vertical) axis.
Reset: Resets the envelope to whatever is set on the Reset Value plug.
Note: You could include a Flip Y button, there’s nothing to stop you, but bear in mind that any non zero start and end node values will result in loud clicks.

The Env Duration slider.
You won’t find this as a standard SE slider control. This one outputs a Float value instead of Volts.
This is a simple little Prefab (courtesy of Elena) as shown below, it can be found in her Convenient Prefabs folder along with with the Modules folder

Adding Velocity control to The Attack and Decay times.

Adding this means that the harder the keys are depressed on the Keyboard, the shorter the Attack and Release times will be. This is quite simple and needs the following controls.
There are a few important points to take note of however:
Note 1: When no Sustain node is specified, the whole envelope is considered an Attack stage and the Release Vel Scal value is ignored. This is especially useful with some sounds like violins, to easily control the attack and release time with your keyboard’s note-on and note-off velocity, for realistic performance.
Note 2: to properly scale the Release stage, your MIDI controller must transmit a valid Note-Off Velocity value (cheap controllers usually set Note-Off Velocity to zero or to a bogus value; therefore, it is always better to leave this as an option).

ED Shape Envelope 5

Note: This is a complex subject, so please, please read carefully. You will be rewarded with a very versatile Envelope generator module. It’s essential with this module and it’s other associated modules to understand the operation before attempting to use it. This will save a lot of frustration and hassle!
This post will just cover the use of the Shape Editor, and modules used with it:
1) Shape Envelope 5 module.
2) Shape Editor 6 module.

Shape Envelope 5 Help file (edited)

Overview.
1) This is a Multi-purpose Shape-based envelope generator with an optional sustain point setting for versatility.
2) Optional Attack / Release time scaling and Amplitude scaling by keyboard Velocity are also supported.
3) The module can work as both an envelope generator, or alternatively a generic signed pulse generator.
4) A valid Shape must be supplied to the Shape input pin using the appropriate modules.

Operation of the module.
Every time the Gate is turned on, an envelope of the specified shape, interpolation mode and duration in milliseconds (minimum time allowed = 1 mS) is generated and reproduced until a node specified with the Sustain Node parameter is reached, if any Sustain Node is set (Attack/Decay stage); then the Sustain Node level is held at the output (Sustain stage) until the Gate pin turns off, then reproduction of the shape is resumed from the remaining part of the envelope shape until its natural end (Release stage).
When no sustain node is specified, the envelope generator works in “one-shot” mode.

Shape Envelope Module

Signed and Unsigned modes.

The default mode (Unsigned) for the envelope generator produces an unsigned signal ranging from 0 to +10 Volts, suitable for use with a VCA as an amplitude envelope.
However, for usage as pitch envelope, filter envelope, pulse generator (or any other purposes you can think of), the Signed option can be enabled in the modules properties, so that a signed envelope (ranging from -10 to +10 Volts) is produced.
Note: For visual consistency, it is advisable to set the Baseline to -5 in the Shape Editor when working in unsigned mode, or 0 Signed mode.

Start and End levels.

You are free to specify a non-zero level for both the first and the last shape nodes, despite the fact that this will naturally lead to discontinuities in operation, or audible clicks, depending on the application.
Keep in mind that the level of the last node will be held at the output as a static voltage when the envelope is over, for logical consistency (i.e. the output will not be forced to return to zero !)
Whenever the first and the last node is required to remain fixed at zero or to another level, you should fix their position with “Lock First/Last nodes” option in the Shape Editor, to prevent editing.

Sustain Node.

If the specified Sustain Node index is negative or larger than the number of current shape nodes minus one (the last node is not allowed because it would be pointless), there will be NO Sustain stage and a “one-shot” envelope will be produced.

Re-Triggering

Re-triggering refers to triggering the envelope generator before it has come to the natural end of the envelope.
When this module is used in a polyphonic circuit, the envelope can either be fully retriggered (position reset to zero) or resumed from the first point whose level is the same as the current level reached, in order to prevent clicks, depending on voice stealing and other polyphonic settings: this choice is automatic.
If a Sustain node is specified, the search for a matching level will not go past this Sustain node, and if no suitable level is found, the envelope level will be stuck to the Sustain node level (after a quick cross-fade), otherwise the Sustain stage could be skipped.
You can set the Retrig Always Resets to always force a position reset on re-trigger in the modules properties panel.
Important note: Please do not set this option when the module works in polyphony, otherwise clicks will occur!

The Gate Off logic.

No Sustain point set:
If no Sustain point is specified, Gate Off events are ignored and the envelope operates in the “one-shot” mode.
Sustain point set:
If a Sustain point is specified and the envelope generation has reached it already, a Gate Off event will resume envelope generation from the Sustain point all the way to the Release stage.
If a Sustain point is specified and a Gate Off event is received before reaching the Sustain point, the envelope behavior may vary depending on the following factors:
1) If the absolute value of the current level is higher than the absolute value of the Sustain level, envelope generation will proceed from the Sustain node after a very quick ramp to the Sustain level, to avoid clicks.
2) If the absolute value of the current level is lower than the absolute value of the sustain level, the envelope will proceed from the Sustain point scaling and shifting the Release stage, so that the Sustain level matches the current level, while the end release remains unchanged
Please note:
Please understand that the gate-off behaviour in Signed mode may not always be optimal, but however, unfortunately a universally good solution probably does not exist.

Clipping of curves.

Important Note: Curve interpolation modes can at times produce values beyond the Overall Level set. Such out of range values can be clipped by the module to prevent problems with other modules by enabling Clip Shape in the modules properties panel.

Attack and Release velocity scaling

The durations of the Attack and Release stages can be scaled independently by using keyboard Velocity. A Velocity value from 0 to 10 V will cause a gradual shortening of the duration specified up to a maximum scaling factor specified with the Attack Vel Scal and Release Vel Scal plugs, respectively (the allowed range is 1x to 10x). This means that the harder the keys a depressed the shorter the times become.
Note: When no Sustain node is specified, the whole envelope is considered an Attack stage and the Release Vel Scal value is ignored. This is especially useful with some sounds like violins, to easily control the attack and release time with your keyboard’s note-on and note-off velocity, for realistic performance.
Note: to properly scale the Release stage, your MIDI controller must transmit a valid Note-Off Velocity value.
Important: Cheap keyboard controllers usually set Note-Off Velocity to zero or to a bogus value; therefore, it is always better to leave this as an option for the user.
Note: Please remember that velocity value is sampled only at the instant the Gate turns On or Off.

Level Velocity scaling.

The overall envelope level can be scaled by keyboard Velocity by a variable amount, which can be specified with the Level Vel Scal plug.
Note: The velocity value for this purpose is sampled only the very instant that the Gate turns On or a note switch on a same voice occurs. Any further changes or modulations will be ignored. LFO (tremolo) or Aftertouch level modulations, if required, must be performed after this module.

Position Output.

The Norm Pos output plug constantly outputs the current envelope position as a normalized float value i.e. between 0 and 1. This plug together with a Patch Memory Float Out can be used for visual feedback, i.e. to drive a vertical moving line overlaid on the Shape Editor.
This is also suitable for polyphonic usage (the position for the newest voice playing will be plotted)

Hint: You can use the Shape Node Selector module to greatly simplify the selection of the Sustain node.

Shape Editor 6 Help File. (Edited)

This is a fully configurable graphical editor for standard ED Shapes using the new efficient binary BLOB transmission format.
Note:
The “Legacy” Shape format (string-based, and using Volts values) is still supported to allow for entering Shapes as strings by hand or through the appropriate conversion modules provided for compatibility.
However: The legacy mode usage for shape transmission should now be avoided.

Keeping it simple.
There are also compact, and ultra-compact versions of the module included, which occupy less space in the structure view, by having fewer plugs exposed (most times you may not need to have all the plugs visible for connection anyway).
Stacking shape editors:
More shape editors can be stacked making the background transparent.
In this case, to still allow editing of the background editor (click-thru), the bool option for LockAddRemNodes must be enabled or Editing must be disabled totally for the foremost editor, otherwise any mouse click in empty areas will be intercepted.

Features and usage:

Shapes: Shapes support from two to 100 nodes. A shape can never have less than two nodes. No such thing exists as an “empty” shape: a “void” or default shape is a shape with just the first and the last node set to zero.
Nodes: What are these node things? They are points that you specify to define the shape, set within an X-Y axis. The values define the positions of the points defining the curves.
Node values: Node values are internally represented in normalized float units: Vertically from 0 to, and including 1.
Horizontally, from -1 to, and including 1.
Compatibility: However, for compatibility reasons, node positions are still displayed, and accepted in Volts by all the ED Shape modules:
Horizontally from -5 to +5 Volts.
Vertically from -5 to +5 Volts.
First and last nodes: The first and the last node are fixed at the positions -5 and +5 and cannot be moved horizontally. This is intentional and not a bug.

“Legacy” string format:

The legacy format consists of a series of nodes defined between parentheses in Volt units, e.g. (-5,0)(1,-1)(5,1).
Legacy First and Last nodes: The first and the last node must always be present, and have the positions -5 and 5 respectively, and they must all be sequential. Vertical positions: The vertical node positions must be in the -5 to 5 range.
No other characters or spaces are permitted. Invalid strings will be rejected.
(This format was inherited from the stock SynthEdit WaveShaper 3)

New BLOB shape format:

Shape information is now stored and transmitted using a new efficient binary BLOB format (Binary Large OBject if you like your acronyms).
Every Shape Editor must therefore be linked to the destination user module(s) via a Patch Memory Blob module. (Diagram below)

Adding and removing shape nodes.
Shape nodes can be added or removed by a double-click.
New nodes: A double click anywhere in and empty space in the editing field will create a new node at the corresponding mouse position.
Removing Nodes: Double-clicking on a selected node will delete
it (unless deletion is disabled, see later).
The first and last nodes cannot be deleted: a double click on a node which can’t be deleted will snap it to the specified baseline for convenience.
Moving Nodes: Shape nodes can be selected with a mouse click and dragged around within their allowed limits:
1) Between the neighboring nodes, and
2) Vertically within -5 and 5 or within a smaller range, in case of a custom range of MinY/MaxY values being specified.
Interpolation: Interpolation Type is still transmitted separately from Shape data. Since different Shape-utilizing modules may support only certain Interpolation Types or even just one, their DSP List pin is always properly set to back-transmit this information to the main Patch Memory List, whose Value plug must be connected to the corresponding Shape Editor plug, and which will be automatically configured to only list the supported mode(s). The connection method is shown below in use with the ED Shape Envelope module. (Ultra Compact module shown for simplicity)


Important note: Users must never make any assumptions about the list position of Interpolation Types and their corresponding integer values, since they might change in the future and/or more Types could be added upon need.

Plugs and Parameters

<->Shape I/O: The input-output Plug for the BLOB description on the shape.

<->Interpolation Choice In: Specifies how the Shape is to be interpolated always use the connection method shown with a Patch Memory List Module!
Shape Interpolation Types:
None : This mode does not correspond to any physical interpolation and is module-specific. It really means that a module actually only needs node positions (e.g. to render spectral peaks or sinc pulses …) and not represent an actual curve. The Shape Editor will simply draw vertical lines starting from the specified baseline. In general, this option can be useful to have a Shape representing just a set of points.
Important: Not all modules support ” None”.
Note: when the Interpolation Type is set to None, the nodes can slide freely beyond the adjacent ones for convenience.
Linear:
This plain linear interpolation (default). This results in a straight line, and no smoothing at all.
Curve 1:
Equivalent to the former “Spline” method, this method uses modified cubic splines for smoothing.
Notes: This is a Curve interpolation which will never fluctuate but can still result in unsmoothed transitions from intervals of very different width, however it still produces a very smooth result (almost comparable to Curve 2) when used with uniformly spaced nodes.
Curve 2:
Natural cubic splines. This Interpolation method always produces a smooth curve (second derivative is always continuous) at the expense of sometimes producing huge fluctuations, when used on node intervals much smaller than their neighbouring node spacings.
Edit X, Edit Y Plugs: A pair of Float editing pins is linked to the currently active node, so that its x,y values can be displayed and sent to the module if needed, by connecting a couple of suitable modules.
Note: The old left hand side edit pins have now been removed, to prevent undue connection of Patch Memories which would result in conflicting double storage.

<->Active Node I/O: The index of the active node, as available at the Active Node plug, is not internally stored in any parameter. To maintain it throughout sessions, you must connect it to a Patch Memory Int module. This can be output, or alternatively supplied as a value to select a particular node when working with a fixed number of nodes (obviously).
Note: when Interpolation Type is set to None, nodes are free to slide beyond
any adjacent ones. For this reason, the Active Node index can change while sliding
a node horizontally.

->Editable: The editor can be set to read-only mode (all editing is fully disabled, this is useful for parameter display purposes)

->Lock X: The Horizontal position of all the nodes nodes can be locked, restricting the the user to editing their vertical positions.

->Lock Add/Rem Nodes: Addition and removal of nodes can be disabled, to restrict working to a fixed number of nodes.

->Lock First/Last Nodes: Editing for the first and last node can be disabled, this prevents users adding values that could cause loud clicks.

->Y Max/Y Min: Values supplied to these plugs set range for vertical positions and limited them within a minimum and a maximum range.

->Base Line: The vertical position of a convenient reference baseline can be specified (it is zero by default).
Notes on the Baseline:
1) Shape fill gradients will be drawn originating from the specified baseline.
2) Double clicking on a node which cannot be deleted (like the first and the last node, or all nodes when addition/removal is disabled) will cause the node to be snapped to the specified baseline.
3) When no default shape is specified in the Reset Value pin, a two-node straight line shape at the baseline will be used as the default.
For example, when the shape represents positive values, it makes sense to place the baseline at the bottom (-5), and when the shape represents a spectral filtering curve, it may be more logical to set the baseline at top (+5), again when it represents signed values, the baseline is more logically
placed in center (zero) position.

->Reset Value: Specify a shape in the legacy string format to use as default value for the Reset plug. If no shape is specified (empty plug string), a straight two-points shape (line) at the specified baseline will be used as default

->Mouse Down Has the value 1 (True) when the user clicks on the editor screen area

-> Node Size: Size of the Node handles in Pixels. The size range is from 4 to 20px.

->Node Thickness: The thickness in pixels of empty node handles, from 1 to 4 px

->Circular Nodes: When set to True draws circular node handles rather than square.

->Fill Nodes (I) : When set to true draws filled node handles rather than empty.

->Shape Thickness: Sets the thickness in pixels of the shape curve, from 1 to 4px.

->Border % Sets the percentage of border area, expressed as a percentage of every dimension, from 0 to 25.
Example: If the setting is 25, then the left and right borders will both use one 25% of the box width, and the top and bottom borders will both use 25% of the box height.

->Border Clip: When this plug is set to True it clips parts of the interpolated shape which may result in values larger than +5 or smaller than -5 (usually because of curve interpolation) from being drawn in the border area, and replaces them with a clipping line.
Note: Most shape-utilizing modules doe not clip values internally. But when they do, this is always clearly specified. Therefore, always set this pin
in a consistent way, since a clipping line in the editor can be misleading

->Grid Horiz Divs: This plug sets the number of horizontal (X) grid divisions.
from 0 to 40

->Grid Vert Divs: This plug sets the number of vertical (Y) grid divisions.
from 0 to 40

These Plugs are on the RHS
->Edit X: A float pin linked to the currently active node, to read or change its
horizontal value externally.

->Edit Y: A float pin linked to the currently active node, to read or change its
vertical value externally.

->Reset: When set to true the module reverts to the default shape specified in the Reset Value plug. If no default shape is specified (empty plug value), a straight two-nodes shape (line) at the specified baseline will be used as default for convenience.

->Flip X: When set to true the current shape is flipped horizontally.

->Flip Y: When set to true the current shape is flipped horizontally.

Internal (Properties panel) settings:
>Edit Units: You can specify whether to use Volts (“legacy”, default), or native Float units for the two Edit plugs.
Important: Please remember that the Volts range is [-5,+5] in both X and Y axis, while Float range is [0,1] X and [-1,+1] Y.

ARGB Colours: 32 bits color (i.e. including alpha channel) can be specified for every graphical element of the editor as a 32 bits Hex string (e.g 80FFFF00 is a 50% transparent yellow), allowing customization of the colours and transparencies. Note: When the alpha channel (first byte) is set to zero, the corresponding foreground element won’t be drawn at all. In case of the Background, setting an alpha channel smaller than FF will progressively reveal other GUI controls placed in the background in the Panel view.
The ARGB Colours that can be set are:
BG Top
BG Bottom
Grid
Base Line The defined horizontal base line/Axis
Vert Line The centre vertical axis
Shape – The line drawn defining the shape.
Fill Grad 1 Fill grad is easier to show-
Fill Grad 2
Nodes
Active Node

Example – In the image below:
Base Line is set to FFFFFF00 (100% Red, 100% Green)
Vert Line is set to FF00FFFF (100% Green, 100% Blue
Fill Grad 1 is set to FF00FF00 (100% Green)
Fill Grad 2 is set to FF0000FF (100% Blue)
Shape is set to FFFF0000 (100% Red)

Using the CTRL key supports precise movements
Note: With SE 1.4 the CTRL precision mode does not work in the Structure View.

A more advanced reverb

Third Party Modules.

Requires the TD Allpass Dly2 module.

The Moorer Model of Reverb.

James Moorer’s version improves on Schroeder’s model of reverb, which tends to suffer from the disadvantage of a somewhat metallic sound (unless of course you want that sound).
Moorer suggested the use of low-pass filters in the comb filters’ feedback
path to emulate the sort natural high frequency damping to be found in rooms and halls full of people.
He also generated early reflections using tapped delay lines. Moorer’s reverb model employs six comb filters in parallel, the outputs of which are summed and fed into just one all-pass filter. The image below outlines its schematic.

The Delay and it’s feedback loop.

In our structure each comb filter’s feedback loop includes a one-pole low-pass filter as you can see below: (Moorer Delay prefab). As is usual to have a feedback loop in a SynthEdit structure we need to have a special Feedback – Volts module in the structure to allow this, but although this is going to introduce a delay in the loop this really won’t be all that noticeable in this application.
The only settings of note are:
1) Pitch to voltage: The Pitch control parameter should be set to 1 V/ kHz on all low pass filters. We need all filters behaving identically.
2) The Filters: 1 Pole LPF is all you need in the feedback loop. If we have any steeper cutoff it just won’t sound natural. The filter is only affecting the feedback loop because we don’t want to colour the incoming sounds in any way. We also really don’t want to introduce any resonance into the loop either.
3) Feedback: We need to ensure that the Feedback plug has its parameter set to 0. Because we are using an external feedback loop we don’t wany any feedback whatsoever in the delay module.

Having completed our delay with damped feedback we now come to the structure of our Reverb 6 container which has the structure shown below. This is where we have our six delays connected in parallel, with their structure of delay times.
This prefab employs the same delay times that were originally used by
Moorer: 50 mS, 53 mS, 61 mS, 68 mS, 72 mS, and 78 mS. These values could obviously be changed slightly to allow for different room/hall/ sizes.
Notes:
Delay times: Remember we are looking at reverb, not echo so we don’t want such a long delay that the repeated sounds become noticeably separated from each other, varying the voltages by +/- 0.3V would be plenty.
Consistency: However do keep them to the same time differences to keep the effect sounding consistent.
Suggestion: If you decide to implement a method of changing the delay times to alter the room “size” my suggestion would be to use switching to change the voltages rather than a control knob.
Warning: Do not modulate the delay times as this will introduce unwanted and unpleasant pitch changes,

The voltages set in the Fixed Values module are shown below.

Preset delay times

The final structure for our reverb, has two All Pass filters following the Reverb 6 modules just to “smear” the reverberated sound a little, the values used in the Fixed Value for the left and right channel All Pass filters are shown below.

Preset All Pass phase times

To avoid creating a ringing metallic effect as well as reverb, you need to limit the Maximum Decay parameter to around one volt (using the usual Min/Max settings in the control preferences).

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!

Using the DAM Filter Draw module

Many thanks go to Davidson for his very handy range of SE modules.
This particular module allows us to have a visual representation of a filter’s frequency response, and to be able to control the cutoff and resonance from either the graphic display, or an external control voltage. I have used an SV filter in this project.

The DAM Filter Draw module.

Hint: The usual the text supplied to this plug will give you a pop up hint when the mouse is over the display window.
Menu Items/Selection: Used for the right click menu items and the choice made.
Mouse Down X:
Mouse Down Y:
Pos X Cut: Input/Output for the filter X value, which is connected to the filter’s Pitch or Frequency plug. Values are between 0-1 Floating, so when connecting to a Patch Memory always use the Animation Position plug.
Pos Y Reso: Input/Output for the filter Y value, which is connected to the filter’s Resonance, Q or Gain plug. Values are between 0-1 Floating, so when connecting to a Patch Memory always use the Animation Position plug.
Grasp Off/On: When this plug has the Boolean value of 1 (On, or True) you can adjust the parameters only by dragging the shape curve. When it has a Boolean value of 0 (Off, or False) you can adjust the Cut and Reso values by clicking or dragging anywhere in the display window.
Filter: You can set the filter mode for the display using the appropriate integer values; Low Pass=0,High Pass=1,Band Pass=2, Band Reject=3,Peak=4,Low Shelf=5,High Shelf=6,ST=7,CN=8
Note: ST allows you to drag the filter between Band Pass and Band Reject, CN gives a variable frequency, variable width Band Pass (I’m going to assume here that these options relate to a future filter release from Davidson?)
Slope: -12db (Single pole SV)=0, -24db/Octave (2 Pole SV)=1.
BG ARGB: Sets the background colour of the display window in the usual ARGB format. Hex codes won’t work here.
Line size: Sets the colour of the curve line in the usual ARGB format. Hex codes won’t work here.
Gradient Flip: You can invert the positions of the gradient colours using 0 or 1.
Fill Below/Above Center: Places the fill colours above or below the filter curve (although this is an integer plug there are only the two options). Below the curve = 0,
above the curve = 1.
Fill Top ARGB: Specify the upper portion of the gradient fill colour as ARGB (Not Hex, that won’t work)
Fill Bottom ARGB: Specify the upper portion of the gradient fill colour as ARGB (Not Hex, that won’t work)
Grid Off/On: 1 switches the centre grid on, 0 turns it off.
Grid Box Off/On: 1 switches the outer grid on, 0 turns it off.
Grid Line Size: Sets the thickness of the grid Note: this is a Floating point value not integer so you have a fine control over the grid thickness.
Grid ARGB: Specify the grid colour as ARGB (Not Hex, that won’t work)

The DAM Filter Draw module and its various plugs.
The module and it’s associated plugs.

Filter type options.

The Filter Draw module has more filter type options than we need but as the ones we are using are in the same sequence as the SV filter options this doesn’t matter. The unwanted options are just not used ( the drop down list is automatically taken from the SV filters options list).

Controlling the filter from the Filter Draw module.

This is done via the the two PatchMemory Float3 modules:
Pos X Cut controls the filter’s cutoff frequency
Pos Y Cut controls the filter’s resonance level.
These modules convert from GUI values to DSP, which is then converted from Float values to Voltage values for the Cutoff and Resonance plugs on the filter module, and convert the 0-1 Float range to the normal 0-10 V range for DSP controls.

CV Inputs.

Next we have two QTN_Volt2GUIFloat modules to take the external control voltages, and perform two functions 1) convert the incoming DSP voltage to GUI float, 2) redirect the output Float value to the left hand side of the module so it can be connected to the PatchMemory Value plug.
When this input voltage changes it will shift the appropriate x or y position on the Filter Draw module, and the related control value on the SV filter.

Filter Options.

As I said earlier we don’t need to set up any specially formatted lists, we can just use to PatchMemory List3 modules, and ED List Entry modules (OK you can use the stock ones, but I like Elena’s as you can set the background and text colours to suit your colour scheme).

« Older posts Newer posts »