Optimized for Opera 9.0


SynthEdit Modules

You'll find some of my SynthEdit modules on this page. I made them mostly for fun, or some of them are from my VST projects. They are provided 'as is', so please test them thoroughly before use. I cannot guarantee that I will provide updates and fixes, however, bug reports are welcome.

Licensing: You're free to use these modules in any project, private, free or commercial. Please give credits, if you do so.

Please make a small donation using the PayPal button, especially if you use them in commercial products. Thank you!

Not frequently, but sometimes I make modules upon request. For more info, contact.

Also feel free to visit my VST project page.

 



Installation

To install these modules, download, extract and copy the .sem files to your SynthEdit > modules folder, preferably under some sub-directory (for example: SynthEdit > modules > 3rd party > scoofster).

Note: Recently I accidentally compiled some modules with a very small file size (10-15 KB). These include sc:Slewer and the 1p1z filter pack. These, small modules require the .NET framework to be installed. After a few users have pointed out to this, I recompiled these modules, which should run fine now on all computers. They should be about 60-90 KB big. Sorry for any inconvience.


Forum

There's an official Scoofster Audio support forum on SynthEdit Gathering. The forum is found here.



Quick navigator


History

Analysis

Beat Detector

Outputs an impulse (10 Volts) whenever a beat is detected.

Credits

Based on Beat Detector Class posted to musicdsp.org.

Status

Shows if input signal is active (ST_RUN) or in sleepmode (ST_STATIC). If signal is active then 'Active' = 10 Volts, if not, then 'Active' = 0 Volt.

Conversion

VUDriver

Converts input signal to level meter display animation. Simple, efficient, flexible, has peak and RMS modes. Consumes only slightly more CPU than a Level Adj.

Usage

Output is between 0-1, to drive a bitmap animation of a level meter. Usage example (don't forget to set patch mem's Max Value to 1):

Parameters

  • Range

    Specifies display range in decibels. Example: range=60 means input range is -60 dB to 0 dB (scaled to 0-1). Upper limit is always 0 dBFS.

  • Mode

    Peak mode tracks the peaks of the signal. RMS mode averages the signal, giving an approximation of the sound pressure level.

Volts2Freq

Converts volts to frequency in Hz or kHz.

Usage

Set the frequency unit in the properties window (Hz or kHz). There is also a precision control. 'Fast' uses an approximation, which is about 20% faster, and still precise enough for many applications (for example filters).

Why another Volts2Freq conversion module?

  • This module has both Hz and kHz unit, no need to multiply output (which causes additional overhead).
  • Uses very fast, optimized assembly code. See performance comparison.
  • It comes with example prefabs.

More info >>

Volts2Time

Converts volts to time in seconds or milliseconds using the standard SE timecent conversion rule:

time = 2^(volts-6.666666)

Flow Control

Autosleeper

Puts subsequent modules to sleep mode if there's no signal detected for given length if there's no audible input. You can set the detection threshold in decibels using the 'Threshold' option (default: -120 dB). Useful for putting a VST effect to sleep mode when there's no incoming signal. This can also fix denormal CPU spikes too.

The Time parameter was designed for modules using feedback (reverbs, delays), so that you can calculate the maximum feedback time, and set the Time float parameter accordingly dynamically. However, it seems that many modules (for example Delay2, DH_Reverb) do this automatically internally.

This module comes in two versions, mono and stereo. In stereo mode, the two channels are added together for detection, which is faster than using two separate Autosleeper modules.

Do-Nothing

Originally my first module only copied the input to the output, making organizing stuff easier. You can use this whenever you wan to mix signals together conveniently. However, copying buffers also uses CPU, so I decided to discontinue providing this machine. Instead, an emply container can be used for the same purpose, but being more economic. Containers are removed when you click Save as VST..., so this does not cause any CPU overhead. (On the other hand, whenever wires are connected, a hidden 'adder' module is inserted, which cannot be avoided.)

You can download empty containers by clicking on the screenshot on the left. It comes in mono and stereo versions, usage should be straightforward. Installation: copy to SynthEdit > Prefabs folder.

Note: If you need the original, module version for compatibility reasons, you can download it here.


Testimonials ;-)

"The coolest module in the world."

Ok, I have tried all the filter coefficient modules, the waveshapers, the envelop generators, but my love goes out to scoofster with his "thru" module! Dear god you have saved me so many headaches! Thanx alot man. :) I use it because I change my mind alot when working on theories & it's much easier to control a mass of connections if they meet at a point right before input. It's a beautiful tool. :)

twocircuits

Math

Exp(x)

Calculates exp(x) = 2.7182^x.

Pow(a,x)

Calculates power for any given base (a^x).

Base can be set in the properties window.

Sign

Gives the signum of a signal (positive, zero or negative).

The output voltage for each can be set as float pins.

Poly3

Calculates 3rd order polynomial y = a + b*x + c*x^2 + d*x^3 efficiently.
Works for float datatype, not audio signals.

Logic

Monostable

Outputs a pulse with given length when the input is high (>=5 V).
Length: 10 V = 1 second.

The SE monostable does not retrigger when another trigger comes before the previous pulse has ended. The sc:Monostable retriggers, and sends a status message so that modules like ADSR can retrigger correctly.

Effects

RevAllpass

This is an allpass filter with a flat frequency response. It's phase response is not linear, and has an impulse response similar to a comb filter, thus it smears transients. It can be used to simulate diffusion for Schroeder/Moorer type reverberators. Time is limited to 100ms (however, the usual range is 0-20ms). The time parameter is not interpolated, so clicks may appear if you change it during processing. This may be corrected in future versions.

Partially based on Jezar Freeverb code.

Parameters

  • Time (ms):
    Delay time in milliseconds. Limited to 100 ms, but the usual range is about 0-20 ms.

  • Feedback:
    Sets the amount of feedback. Usual range is about 4-9 volts.

Softdrive

Soft waveshaping function. Allows smooth transition from no distortion to heavy waveshaping.

Warning: not alias-free.

Parameters

  • Signal:
    Input signal to be distorted.

  • Drive:
    Controls shape. See sc_softdrive.gif. Maximum amount is not limited to 10 volts, but aliasing can occur for high amounts.

  • Threshold:
    Sets level where waveshaping occurs. For high Drive levels, this parameter acts as an output level setting.

CPU and ozone friendly.
No animals were harmed in the making of this module.

Filters

One pole, one zero pack

This pack contains 6 dB/octave one-pole, one-zero filters, derived from analog filter prototype transfer functions using bilinear transform with pre-warping towards Nyquist.

What does that mean? They are similar to the in-built 1 Pole LP and 1 Pole HP filters, with the main difference that they also contain a so-called 'zero'. In layman's terms, these affect the frequency response at very high cutoff frequencies. The lowpass filter has a steeper cutoff close to Nyquist (half sampling rate). The highpass filter also has a better response at very high frequencies, giving a more balanced high-end response.

So, basically, these can act as a replacement for the default 1 Pole LP/1 Pole HP filters, with slightly more CPU use and somewhat better frequency response at high cutoffs.

Modules

  • sc:1p1z LP
    One-pole, one-zero lowpass filter. Works similarly to the 1 Pole LP filter.

  • sc:1p1z HP
    One-pole, one-zero highpass filter. Works similarly to the 1 Pole HP filter.

  • sc:1p1z Xover
    Module combining a 1p1z lowpass and a 1p1z highpass filter, resulting in a 6 dB/octave crossover filter.

  • sc:Color
    Module for changing the timbre of a signal, useful for delay/reverb effects. At color = 5 V, the timbre is not changed. If color is above 5 V, the lows are gradually cut. If the color is below 5 V, the highs are cut. So, this module combines 1p1z LP/HP filters, where the response/cutoff depends on the color setting.

Lowpass

Tweaked biquad lowpass filter. My attempt was to tweak and optimize a biquad filter for performance and fast modulation at the expense of frequency range. Eventually, the performance results are not very notable, and the stability got even worse. The filter blows up easily with fast modulation and high resonance settings.

However, I decided to release this module, because it has decibel resonance setting, and variable resolution. It is very similar to DH_MultiFilter2, with a bit of a 'state variable' touch, the high frequencies being slightly boosted.

Parameters

  • Pitch:
    Due to optimizations in the calculation, frequency range is limited to 20 Hz .. 11025 Hz.

  • Resonance:
    Set in decibels. Resonance = 0 means gain is -3dB at cutoff frequency, so in 12dB mode it behaves as a Butterworth filter. Usual range is about -10 .. 60.

  • Slope:
    24dB mode is the same as cascading two 12dB filters in serial. It has a steeper rolloff slope, and a wider resonance peak.

  • Freq Scale:
    As usual, 1 Volt/kHz selects linear frequency scale, 1 Volt/Octave selects exponential frequency scale.

  • Resolution:
    Sets the update rate of the filter. Instant means audio rate resolution, which is best for very fast modulation, but also more CPU use. If there's no fast modulation, you can set it to lower to save CPU.

Notes

Please note that the filter may blow up with fast modulation and high resonance settings. For such settings, another filter may be a better choice.

Also, cascading more modules for even steeper slope is not suggested, because this would boost high frequencies, similar to the effect of cascading state variable filters.

MovAvg

Moving average filter. Calculates average of last n input samples.

Technically it is a FIR (finite impulse response) filter with a rectangular kernel. Soundwise it is like a comb filter plus a 6 dB/octave lowpass filter.

Parameters

The frequency/width can be controlled by the Freq/Width parameter.

Input modes:

  • 1 Volt/kHz - calculate frequency using 1 V/kHz scale
  • 1 Volt/Octave - calculate frequency using 1 V/Octave scale
  • 1 Volt/ms - Freq/Width determines the length of the window in millisecs
  • TimeCent - the length of the window is 2^(volts-6.6666666) seconds

Options

The 'Max length (secs)' option determines the maximum window width. It is suggested to set this to the minimum necessary. The relationship between the minimum possible cutoff frequency and the maximum length is:

fmin = 0.883/(2*t)

So, for the default 0.1s maxmimum length, the minimum cutoff frequency is 4.4 Hz. The Maximum length option is limited to 10 seconds.

Possible uses

Smoothing control signals, portamento effects, signal level detection, etc.
Not designed for fast modulation.

SVF

This is a fast 2 pole filter, quite similar to the native SV Filter. Its main advantages are fast performance even with audio rate modulation, and good bass response (unlike the unstability of biquad filters at low frequencies and high resonance settings.)

The lowpass and highpass slopes are 12dB/octave, and the bandpass slopes are 6dB/octave.

Differences to the native SV Filter:

  • Better performance on P4, especially when more outputs are used at the same time
  • Resonance can be set in decibels (default), or as Q factor
  • Can work at different rates for CPU saving
  • The upper frequency limit is lower, about samplerate/4 (11k at 44k). This results in less high-frequency ringing, especially for bandpass and highpass outputs

CPU usage comparison in 1 Volt/Octave, 1 Volt/4dB reso mode: (test done on AMD2200+)

  SV Filter sc:SVF
No modulation, lowpass mode 0.16% 0.26%
No modulation, all outputs are used 0.45% 0.26%
Pitch mod at samplerate, LP mode 0.74% 0.53%
Pitch mod at samplerate, all outputs 0.92% 0.53%
Pitch mod at samplerate/2 n/a 0.39%
Pitch mod at samplerate/4 n/a 0.32%
Pitch mod at samplerate/8 n/a 0.29%
Pitch & reso mod at samplerate, all outs 0.89% 1.51%
Pitch & reso mod at samplerate/2 n/a 0.86%
Pitch & reso mod at samplerate/4 n/a 0.58%
Pitch & reso mod at samplerate/8 n/a 0.42%

Comparison on PIII 1 GHz (thanks to Dave Haupt):

  SV Filter sc:SVF
No modulation, LP mode 0.20% 0.32%
No modulation, all outputs used 0.64% 0.32%
Pitch mod at samplerate, all outputs used 0.66% 0.80%
Pitch mod at samplerate/2, all outputs used n/a 0.57% *
Pitch mod at samplerate/4, all outputs used n/a 0.45% **
Pitch mod at samplerate/8, all outputs used n/a 0.41% ***

* some aliasing with audio rate modulation
** significant aliasing with audio rate modulation
*** heavy aliasing with audio rate modulation

As you see, sc:SVF is notably faster in many modes.

Parameters

  • Pitch:
    Can be set in kHz, or in 1 Volt/Octave mode, where 5 volts = 440 Hz. Upper frequency limit is about samplerate/4 (so at 44k rate, it is about 11 kHz). Due to an optimization, there's a little tuning error for very high frequencies (similarly as in SV Filter).

  • Resonance:
    In 1 Volt/4 dB mode, resonance is set in decibels. 0 volt means flat passband (Butterworth character), 1 volt is 4dB resonance, 2 volts is 8 dB resonance and so on. So 10 volts is 40dB. Upper limit is 15 volts (60 decibels).

    Note that negative values are also valid, resulting in a softer 'knee'. So the usable range is about -2 .. 10 volts.

  • Freq Scale:
    1 Volt/kHz selects linear freqency scale, 1 Volt/Octave selects exponential frequency scale.

  • Resolution:
    Sets the update rate of the filter. Samplerate is best for very fast modulation, but also means more CPU use. If there's no fast modulation, you can set it to lower to save CPU.

  • Lowpass, Highpass, Bandpass, Bandreject:
    The filtered signal.

Usage notes

Please note that state variable filters are so called all-pole filters, meaning their frequency response is not completely linear. High frequencies get boosted by some decibels, mainly for the bandpass and highpass outputs. This can be as much as +10 decibels near nyquist. I strongly suggest NOT cascading more bandpass or highpass stages, as this can result in serious high frequency ringing.

The most usable output is the lowpass, which is more-or less balanced through all the frequency range. If you need precise high-frequency performance, especially in bandpass and highpass modes, then another filter (possibly a biquad) may be a better choice.

Also note: the Bandreject mode works correctly only for Q values greater than 1, below that, there is a tuning error. This is due to the stability limit of the state variable filters.


Testimonials ;-)

G R E A T !!! I was wishing for that one ! Thanks a lot :)

Rene

Modifiers

Level Adj Stereo

Stereo level adjustment. More efficient than using two individual Level Adj modules.

CPU Comparison on AMD2200+:

  • 2x SE LevelAdj: 0.110%
  • sc:LevelAdjSt: 0.067%

Level Adj X2

Dual level adjustment. More efficient than using two individual Level Adj modules.

CPU Comparison on AMD2200+:

  • 2x SE LevelAdj: 0.110%
  • sc:LevelAdjX2: 0.081%

DISCONTINUED - this module had caused rare crashes with multiple instances, and have been removed.

PeakFollow

Tracks the envelope of the input signal. This module is simlar to the SE Peak Follower, with a few differences:

  • It's about 40% faster
  • It goes to sleep mode when the input is not changing (more CPU save)
  • It uses timecent scale for attack/delay times (more resolution for low attack/release times)
  • It handles zero attack correctly. Set attack to -10 V to set it to immediate. SE Peak Follower does not handle zero attack correctly, so it is not suitable for hard limiters.

Possible uses:

Compressors, dynamic processors, vocoders, modulation effects, etc.

Parameters:

Attack and Release use timecent scale, which means

    time (secs) = 2^(volts-6.666666)

Usual range: about -4 V (0.6 ms) to 8 V (2500 ms).

Rescaler

Rescales an incoming signal in the In Low - In High range to the Out Low - Out High range.

Example

In Low = -5
In High = 5
Out Low = 0
Out High = 10

This rescales the output of a basic Oscillator to the 0-10 Volt range.

This module does basically the same as EVM Rescaler, but with a much greater efficiency (with less than 50% CPU use). Etric gave me permission to release this optimized version.

Rescaler2

Same as Rescaler, but the input/output boundaries are float pins, not parameters.

Using these modules is the fastest way of rescaling a signal. If you use a Multiply module plus add a fixed constant, SE will add a hidden adder module, thereby increasing CPU use. Comparison on AMD2200+:

Multiply + add: ~0.120%
Rescaler: ~0.080%

Requested by Loopingdude.

Quantizer

Constrains the input signal to discrete steps.

Updated to v1.1, which fixes a possible rounding mode error.

Example

If you set Step Size to 1, then it quantizes the input to whole volts.

Parameters:

The Resolution parameter controls whether the Step Size parameter is updated instantly (Samplerate) or at block rate (about 400 times a second).

This module does the same as the Quantizer module, but with much better performance. Comparison on an AMD2200+:

Quantizer 0.56%
sc:Quantizer (Samplerate) 0.17%
sc:Quantizer (Block Rate) 0.09%

Separator

Separates input signal to two signals, one containing only positive, the other containing only negative voltages.

A possible use is asymmetrical waveshaping: overdrive the positive and negative parts differently, and add the two signals together.

Example prefab included for creating an asymmetric soft drive (using sc:SoftDrive).

Slewer

Limits the maximum rate of change defined in Volts/s. Usable for smoothing control signals. Usable range: 1-100 V/s. For audio signals, it causes aliasing, so it is not suggested to use.

History

  • v1.1 Bugfix. Output status messages are now handled corectly, the output goes to sleep when there's static input.

Slewer2

Limits the maximum rate of change defined in Volts/s. Usable for smoothing control signals. Usable range: 1-100 V/s. For audio signals, it causes aliasing, so it is not suggested to use.

The difference between Slewer and Slewer2 is that Slewer2 has separate controls for up/downwards change rate.

CascMult

Cascaded multiplier with auto-duplicating inputs. A lot faster than using multiple Multiply modules.

Output = Input1 * Input2 * Input3 * ... * InputN

Source code included.

History

  • v1.2 Bugfix: goes to sleep properly.
  • v1.1 Goes to sleep when any of the inputs is static and zero.

CascLevAdj

Cascaded level adjuster with auto-duplicating inputs. A lot faster than using multiple Level Adj modules.

Output = (Input1/10) * (Input2*10) * (Input3/10) * ... * (InputN/10)

Source code included.

History

  • v1.2 Bugfix: goes to sleep properly.
  • v1.1 Goes to sleep when any of the inputs is static and zero.

FloatQuantizer

Quantizer for floats.

Enabled if 'enabled' pin is nonzero.

Waveform

I-Train

Generates an impulse train consisting of one sample long impulses with given frequency. Usable for impulse response analysis of reverbs, filters, and other linear systems.

Sub-Controls

GuiFloatSqrt

Bidirectional square/square root module for GUI floats.

If Direction is ->, then left to right is square root, right to left is square.
If Direction is <-, then left to right is square, right to left is square root.

History

  • v1.1 Bugfix. Doesn't crash for negative input.

GuiFloatAbs

Bidirectional absolute value for GUI floats. Rectifies negative numbers to positive. Both directions are calculating abs(x).

GuiFloatSign

Bidirectional module for calculating signum function for GUI floats. Gives 1 if the input is positive, gives -1 if the input is negative, and gives 0 if the input is zero.

FloatTrigger

Passes input to output when triggered. I developed this module to be used together with DH_MouseDetector to output x/y position only when the the mouse is clicked.

Usage example

BmpQuantize, BmpQuantize2

Quantizes animations.

MIDI

sc:MIDIChan

Simple MIDI filter. You can select which channels to pass. It passes either all MIDI channels or just a selected channel from 1-16.

sc:MIDI2CV

I found a problem with the Midi to CV in SE v1.015, namely that in mono mode the velocity is not instant, instead, it's smoothed/filtered. This prevented me to use the velocity as a trigger, since it's always too late because of the heavy smoothing. Jeff says this is to prevent clicks in mono mode, however I think it would be better not to include this filtering since it can be added later externally any time.

I tried solving this problem by using poly mode and setting polyphony to 1, but then Retrigger doesn't work. So I had to make a MIDI to CV module to be able to use the velocity for triggering properly.

Differences from SE v1.015 Midi to CV:

  • The velocity is not smoothed/filtered in any way! It's always instant.
  • Poly mode is not supported (this is not possible in the SDK2), so it's only usable for monophonic synths.
  • You can add more sc:MIDI2CV modules in a container.
  • Note priority is always 'Last' (the SE default).
  • When note A is held, and you press and release note B, SE Midi to CV changes pitch/vel back to note A and retriggers Gate. sc:MIDI2CV changes pitch/vel back to note A too, but doesn't retrigger Gate.
  • Portamento is not supported. You can simulate that by placing some kind of filter after the Pitch plug (you can use some of my filter modules).
  • It doesn't retrigger the Pitch/Vel plugs when their values aren't changed - this might result in a very slight CPU-save in oscillators in certain cases.
  • It seems to use about 50% less CPU, however, this is notable only with very fast sequences or fast arpeggio patterns.
  • The Retrigger option makes Gate 0 V for 1 sample, whereas SE Midi to CV makes Gate 0 V for 3 samples. In practice, this does not matter. <\ul>

    v1.1 update: note on with velocity=0 is treated as note-off.

Contact

Peter Schoffhauzer
email: scoofy (AT) inf.elte.hu
iRC: irc.freenode.net, channel #synthedit

eXTReMe Tracker