SynthEdit Overview

What is it for

SynthEdit is designed for making music. At the simplest level, maybe just creating a short sound effect. At the other extreme it can render a complete performance with several virtual synths, drum machines and effects. SynthEdit is modular, to get the most out of it, be prepared to do some assembly yourself. It's not hard though, and the flexible nature of SynthEdit puts YOU in control. For example most electronic instruments have limitations. They may have limited Voices, Oscillators whatever, with software synthesis you are only limited by the power of your PC. In fact by using SynthEdit's 'render to disk' you aren't even limited by your PC's processing power.

If you are happy making music that sounds the same as everyone else, there are plenty of instruments with preset sounds, there are plenty of soundcards with great built-in sampled instruments. If you want something unique, or off-the-wall you need to get your hands dirty.

Analogue Synthesis

SynthEdit is modelled on the classic Analogue Synthesiser. Before the days of pre-set synthesisers, electronic musicians had to create sounds the hard way, by assembling 'modules', boxes that created or modified sound in some way. Wires called patch cords connected the modules. Although this was time consuming, you had complete freedom in designing your sounds. SynthEdit brings back the 'Analogue' synth, and adds features from the MIDI era.

Modules

The basis of everything is the 'module'. The coloured text represents 'Plugs'. You connect modules together by clicking and dragging between the plugs. The audio signals enters though the plugs on the left, and exits via the ones on the right.

Prefabs (Containers)

Not everyone wants to mess around with modules just to make music. SynthEdit comes with pre-built synths ready to use. The idea is to connect these up the same as you would instruments in the real world...

Fh705482.bmp (123334 bytes)

The black lines represent audio or MIDI cables. The green box icon container_icon.gif (899 bytes) indicates a 'Prefab' or 'Container' module. It encloses a collection of modules. This example connects the PC's MIDI in port to a virtual synth, then sends the sound to your speakers. You then use an external keyboard to play the soft synth. Try loading the example file 'live.se1' to try this out.

Another Option is playing a MIDI file.

Fh705720.bmp (97614 bytes)

This example plays one channel of a MIDI file. To simulate several instruments you cut and paste the Poly Synth several times.

View Types

There are two ways to view your modules. Firstly, the STRUCTURE view, you deal with this when you are designing your synth. It shows all the modules and their connections..

structure_view.gif (6390 bytes)

and the CONTROL PANEL view. This shows only the synth's controls. This is what you deal with when you want to play the synth.

panel_view2.gif (3321 bytes)

Both are views of the same objects. To choose the view, Right-Click a Container and choose either 'Structure...", or "Panel Edit..".

Rendering to Disk

With Software synthesis, it is very easy to overload your PC's processing power. SynthEdit supports writing your music to a Wave file( you wait while the music is recorded to Hard Disk, then play the Wave file afterward). This is not as interactive as real time output, but you're no longer limited to just one or two synths, you can have as many as you like, plus drum modules, effects etc, and can record at a high quality sample rate like 44kHz or better.


Getting Started

How do I Install SynthEdit ?

Download SynthEdit.exe to a temporary location. Find the file and run it.

Possible problems.

- SynthEdit complains it can't find MFC42.DLL. Click the link to download it. Choose 'Save to Disk', Save it to your SynthEdit folder (usually C:\Program Files\SynthEdit ).

- SynthEdit complains it can't find dsound.dll. You need Microsoft DirectX to run SynthEdit. Check out the SynthEdit download page for instructions.

Back to Top

How do I configure it ... ?

Start SynthEdit. Select menu 'Audio', 'Preferences...'.

audio_options.gif (6646 bytes)

Set the 'MIDI in' to your soundcards external MIDI in port. Set the 'MIDI Files' and 'Audio Files' to your preferred directories. The 'Play Ahead' slider sets the size of SynthEdits audio buffer. When playing SynthEdit live, select the smallest value that works (gives un-distorted audio). When using SynthEdit's internal MIDI player, you can set the PlayAhead to a larger value, this gives more reliable glitch-free playback. If you still experience audio glitches, try selecting a lower 'Sample Rate'. This reduces SynthEdits workload.
Note: Some MIDI outputs don't support 'MIDI streaming', unfortunately there is no way for SynthEdit to tell. If SynthEdit's MIDI output dosn't work, this may be why.

Screen Settings

SynthEdit uses high-colour graphics so looks best with your screen set to 'High Colour' or better, at 800x600 resolution or better.

Back to Top

Getting Started .

Playing the demo file

You may want to check out the demo file. Start SynthEdit, Open the demo file ( Select 'File', 'Open', double click 'demo'). SynthEdit will play a song.

Playing Live

If you have a MIDI keyboard connected to your PC you can play SynthEdit live. Open the 'live' file. ("File->Open live.se1). Push the red play button. Note: Ensure you have configured SynthEdit to use the correct external MIDI port, also SynthEdit responds to MIDI channel 1 by default. You may need to experiment with different "Play Ahead" and "Sample Rate" settings to get the best results (Audio->Preferences).

Back to Top


Using VST Plugins

What are they?

Virtual Studio Technology plugins were invented by Steinberg. These are software versions of traditional recording studio hardware, e.g echo, reverb, overdrive etc. Before VST you had to pay big money for these pieces of hardware, now you can buy the software version much cheaper. There is also a growing number of free and shareware plugins available. Recently VST Instruments have become available, SynthEdit supports these too. It is now possible to produce professional music using no hardware other than your PC.

Copyright notice: ”VST is a trademark of Steinberg Soft- und Hardware GmbH”

Where do I get plugins?

There are many plugins available on the Internet, check out the SynthEdit VST Page for some links.
You need to save them to your VST Plugins folder, usually C:\Program Files\SynthEdit\VSTPlugins\ . The "Audio-Preferences" menu sets this.
Once installed, the Plugin appears on the 'Insert' menu, sub-menu "VST Plugins". To classify your plugins by type, create sub-folders in the VSTPlugins folder, these appear as new headings on the 'Insert Menu'.
vst_menu.gif (2212 bytes)

Step by Step - Downloading and playing a VST Synth

SynthEdit doesn't come with any VST plugins, you need to buy/download them yourself. A good start is Steinberg's web site, which offers some free downloads.

Download the VB-1 Virtual Bass Plugin from http://service.steinberg.net/webdoc.nsf/show/download_e

Or, if the link has moved, you should be able to locate it from here...

http://www.steinberg.de/ (look for the demo software page)

You will be prompted to save the file to disk, Note the folder you are saving to.
Use the Windows Explorer to locate the downloaded file.

'Unzip it' - If you have an unzip utility, just double click the file to open it, then select 'Extract', you should be prompted for a destination folder, select your VST Plugins folder: usually C:\Program Files\SynthEdit\VSTPlugins\
Note: A very good free unzip utility is 'PowerArchiver', you can get it from http://www.efront.com/

In SynthEdit, Choose menu "File-New" to create a blank workspace. If the Plugin installed OK, you should be able to use it, menu "Insert-VST Plugins-VB-1".

vb1.gif (1965 bytes)

To see the plugin's controls, Click "EDIT"...

vb2.gif (25841 bytes)

Drag the Bass Controls window out of the way...
To use the Plugin you need two more modules, the Sound Out module ("Insert-Input/Output-Sound Out"), and a keyboard ("Insert-Controls-Keyboard"). Wire them like so.... (to connect them, click and drag on the colored text).

OK!, Push the red 'Play" button and click the on-screen keyboard to play it.

Other options:

  • Use a "MIDI Player" module to play your MIDI files via the synth.
  • Use a "Step sequencer" module to create your own bass loops. NOTE: to see a step sequencer's controls, Right-click the white workspace, choose "Panel Edit...".
  • Use a "MIDI In" module to play the synth from your external MIDI keyboard.
  • Download some VST effects plugins, wire them up between the VB-1 and the 'Sound Out'.

Automation

Any Plugin parameter can be automated via MIDI controller messages, for example the modulation wheel on a keyboard, or the MIDI controller functions of most sequencers. To see a plugin's automation settings: Right-click the Plugin, choose 'Properties'..

vst_automation.gif (5167 bytes)

Select the Controller number from the drop down list. Controllers 98 and 100 are 'Registered Parameter Numbers', these are used in conjunction with the RPN number box to provide more than the 95 standard controllers. For example you could control one parameter with NRPN number 1, and another independently with NRPN number 2.

To enable automation click option 'MIDI Automation'..

vst_automation2.gif (2361 bytes)

Plugin 'Fixs'

VST plugins don't always behave as they should. Some make assumptions about the 'Host' (SynthEdit in this case). If you encounter a plugin that doesn't work, or crashes, you can try the two options in the Properties screen:

Process Replacing Fix - This setting is known to fix problems with Steinberg's VB-1 and Neon plugins.

Data Alignment fix - This is for plugins that expect particular sample block size or alignment. This is known to work for 'SC Virtual Sampler', and 'Sampletank'.

These fix's can be used together of separately. You may need to experiment. Don't use a fix if you don't need to, they do reduce performance a little.

Auto-Reload

SynthEdit's "Auto-Reload" feature makes testing your plugins easy. From the SynthEdit's File menu, choose 'Options...', and tick the "VST Auto-Reload" box.

How it works

SynthEdit scans your VST plugin folder every 15 seconds. If your plugin's file date changes (because you have compiled a new version) SynthEdit reloads the plugin. To let you know, The Plugin displays the file creation time..

dll_auto_load.gif (1968 bytes)

To make the process relatively painless, you should be able to configure C++ to compile directly to your VST Plugins folder. (menu 'Project' - 'Settings'-'Link'-'Output File Name')

Notes: Auto-Reload must be activated BEFORE you insert you plugin. Otherwise you can Save, Close and Re-Load your SynthEdit file to activate Auto-Reload.


Tutorial

Part 1 - Basic Editing

In SynthEdit, choose menu "File->New" to create a blank project.

SynthEdit's basic building block is the 'Module'. Modules either create or process audio. To see a module choose the menu 'Insert->Waveform->Oscillator". You should see an Oscillator module.

This module produces raw audio waveforms. To actually hear the sound you need an 'Sound Out' module. Choose 'Insert->Input/Output->Sound Out'. You should see one of these.

Click and drag the blue title of the module to move it a little to the right. Now connect the two modules together. The coloured text on each module represents a connection point (plug). Carefully click the word 'Audio Out' on the Oscillator. Still holding the mouse button down, drag the mouse to the first plug on the Sound Out. Release the mouse button. The display should look like this.

Congratulations!, your first 'patch'. To hear the result, push SynthEdit's play button [image] WARNING: the oscillator produces a loud waveform, turn your speaker's volume down first. To stop the sound press the stop button [image].

To save your work. Choose menu "File->Save", name "tutorial"

2 - Module Parameters

This continues on from part 1

If necessary open your work from part 1. You should have something like this...

Each module has several parameters. These are represented by the coloured text. There are two ways to change a parameter. The first is to add a 'Control Module'.

Insert a 'Slider' ( "Insert->Controls->Slider" ). Drag it to the left of the Oscillator. Connect the Slider's 'Signal Out' output to the Oscillator's 'Pitch' input. Your patch should look like this.

Push the Play button. To hear the effect of changing the pitch, move the knob ( click on the blue knob, still holding down the button, move up and down slowly ).

The second method is to use the module's 'Properties' dialog. While the sound is playing, Right-Click the Oscillator, Choose 'Properties'. You should see this.

osc_props.gif (5091 bytes)

You can directly enter any input value. Select the 'Waveform', try each of the different selections. Each waveform has a distinctive character. Note: because the 'Pitch' parameter is connected to a slider, you can't change it's value here, the slider overrides the default setting.

Set the wavefrom back to "Saw", Press [image] to close the dialog.

Save your work.

3 - Filters

If necessary open your work from part 2. You should have something like this...

The Oscillator provides the raw beginnings of a useful sound, but is not very interesting by itself. Delete the line between the Oscillator and the Sound Output (Carefully click directly on the line until it is highlighted, Choose menu 'Edit->Delete'. Add a Filter module. (Inset->Filters->SV Filter). Add a second Slider. Connect like so... (you may need to drag modules around to make room).

If necessary push play to start the sound. Experiment with the two sliders. The Filter's 'Pitch' input acts like a tone control. Try each of the Filter's different outputs (Low Pass, Hi Pass, Band Pass, Band reject). In each case you will need to delete the line to the Sound Out, and connect a new line.

The Low Pass output removes high frequencies from the sound (like turning down a treble control). The Hi Pass does the opposite, removing low frequencies (like turning down the bass ). The Band Pass removes high and low frequencies, leaving only mid-range frequencies. The Band Reject remove a small 'band' of frequencies leaving high and low frequencies on either side.

This patch illustrates the basics of 'Subtractive Synthesis' (removing frequencies from a sound rich in harmonics).

Save your work.

4 - Envelopes

This continues on from part 3

If necessary open your work from part 2. Ensure the Filter's 'Low Pass' out is connected to the Sound Out. Set the Filter's Slider at aprox '9.00' Volts. Set the Oscillator's Slider to aprox '2.00' Volts.

So far we have experimented by changing parameters by hand. This is fun, but there is another way, the Envelope Generator.

Insert an 'ADSR' (Envelope) module. "Insert->Waveform->ADSR'. Connect it's 'Signal Out' to the Oscillator's 'Pitch'. Open the ADSR's Property Page (Right click it, choose Properties). Set the 'Sustain' property to 0 (zero). Set the 'Decay' property to 7. Close the Properties Window.

Push 'Play' a few times, you should hear a falling pitch. What is happening?

The ADSR produces an output that looks like this..

Applying this to the Oscillator has the same effect as moving the Slider. The 'Attack' is like moving the slider rapidly from zero to maximum. The 'Decay' segment slides it back down to around halfway. The 'Sustain' parameter sets this 'Halfway' point. The 'Release' segment moves our imaginary slider gradually back to zero. All of this happens when you press the 'Play' button.

The ADSR currently has a very fast attack phase, too fast to hear. Try connecting a new Slider to the ADSR's 'Attack' input. Experiment with different settings (you will need to push 'Play' each time).

Bonus Points: Try connecting the ADSR to the Filter's 'Pitch' input. See what happens. (you will need to disconnect it from the Oscillator, also set the Oscillator's Pitch Slider to '4.00' and the Filter's Pitch Slider to zero.

N OTE: Notice the 2 lines to the Filter Pitch. The two wires sum their signals (add together).

Even better: Connect a new Slider to the Filter's 'Resonance' input. Set the resonance to 8.00. Press 'Play'. Now you should be getting a sound something like a real synth!. You should have something like this...

The filter's 'Resonance' parameter emphasises it's cut-off frequency ( makes the filter's effect more obvious ). This is the basis of many classic squelchy dance music bass lines. Setting the resonance too high will cause feedback and distortion, usually pretty unpleasant, but useful in some situations.

Save your work.

5 - Low Frequency Oscillator

This continues on from part 4

If necessary open your work from part 4.

The envelope generator is a common way to modulate the sound's parameters. Many natural sounds start off loud and bright, then gradually fade to silence, the ADSR simulates this. Another useful modulator is the Low Frequency Oscillator ( LFO ). SynthEdit doesn't have an LFO module, but you can make one.

Add a second Oscillator, Add a Slider. Connect the Slider to the new Oscillator's Pitch, connect the new Oscillator's output to the original Oscillator's pitch like so..

To clarify the purpose of the new oscillator we can rename it. Right click it, choose 'Properties...', type in the 'Title' box "LFO". Close the Properties Window.

An LFO produces a lower pitch than a standard Oscillator. We do this with a negative control voltage. Right click the Slider connected to the LFO Pitch, choose Properties. Click 'Lo Value', enter -6 ( negative 6 ). Click 'Hi Value' enter 0 (zero). Close the Properties Window. Experiment with the slider, it's value now ranges between -6.00 and 0.00 Volts.

Push Play and experiment ( Increase the Filter's Pitch Slider to 8.0 to hear the sound more clearly). You should hear a repeating sweeping sound. Try a different LFO wave shape. ( Open the LFO's property page, Click 'Waveform', choose 'Triangle' from the list. Experiment. The LFO's slider controls it's 'Rate' (speed).

This is an extreme example of using an LFO. Practical patches might use the LFO to provide Vibrato to a sound. We need to reduce the strength of the LFO.

Add a 'Level Adjuster' module (Insert-Modifiers-Level Adj), add a Slider, connect like so...( you may have to move the other modules over a bit).

The Level Adjuster gives you control over the LFO's level. This is called the "Modulation Depth", or "Modulation Amount". To produces a more subtle effect, set the Level Adjuster's slider to a small value (0.20). You should now get a vibrato sound. An LFO is often used to add a subtle variation to a synth sound. You can connect it to the filter, to affect the 'brightness' of the sound...

Disconnect the Level Adjuster's output from the Oscillator, connect it to the Filter's Pitch. Push Play, experiment with the Filter Pitch slider, the LFO pitch, and the Level Adjuster Slider.

Note: How 'Level Adjuster' works. When the slider is set to 10, the LFO's level is unaffected, at 5 Volt is half the level, and 1 Volt is 1/10th normal level. This helps keep things simple, as most module's generate signals between 0 to 10 Volts.

6 - A Real Synth

If necessary open your work from part 5. If you have a Slider connected to the ADSR's 'Attack', set it back to zero. Set the 'Level Adjuster's slider back to zero.

So far we have most of what we need to make a basic synth. We can control the sound's Pitch and it's Timbre ( tonal character) What's missing?:

  • Control over the sounds loudness.
  • A way to control the sound from a Sequencer or MIDI keyboard.

To control our sound's volume we need a 'Voltage Controlled Amplifier' (VCA).

Add one. 'Insert->Modifiers->VCA'. Insert this between the Filter and the Sound Out. (Delete the existing line between the Filter and the Sound Out, Add a line from Filter 'Low Pass' to VCA 'Signal'. Add a line from VCA 'Output' to the Sound Out module)...

To give the sound a natural fade out, connect the envelope generator to the VCA. Add a line from the ADSR's 'Signal Out' to the VCA's 'Gain'. Press Play. The sound won't be much different, but you may notice that the volume fades out to silence, like a plucked guitar. The VCA is adding a volume envelope to the sound.

All that's missing now is ability to 'Play' your synth as a musical instrument. One method is to use a MIDI file.

Insert a 'MIDI Player' module ( You can figure out how ). This module is like a mini sequencer, it 'plays' music from MIDI files. The MIDI data needs to be converted into control voltages suitable for our modules, namely Pitch and Duration. This is done by a 'MIDI to CV' module.

Insert a 'MIDI to CV' module. Drag it up near the MIDI Player. Connect the MIDI Players 'MIDI Out' to the MIDI CV's 'MIDI In'. Connect the MIDI CV's 'Gate' to the ADSR's 'Gate', connect the MIDI CV's 'Pitch' to the Oscillator's 'Pitch'. Finally delete the Oscillator's pitch Slider, we don't need it anymore (click it, press <Delete>).

The "MIDI to CV' now controls our patch. When it receives a MIDI note command, it does two things:

  • It set's the Oscillator's pitch
  • It triggers the ADSR (The ADSR starts over)

Push 'Play', experiment with the sliders while the music plays.

Note: You can select different MIDI files from the MIDI Player's property page. ( To change, Right Click, Select 'Properties', Use the File Selection box [image] ).

Alternate method: Use a MIDI keyboard to play SynthEdit. Simply use a 'MIDI In' module in place of the MIDI Player. You will need to configure SynthEdit's MIDI in port ( see the faq ) and Set your keyboard to channel 1.

We have only scratched the surface of what is possible with these modules. Some suggestions to try..

  • Connect Sliders to all the ADSR's controls (and experiment).
  • Connect a 'List Entry' to the Oscillator's 'Waveform' input (and experiment).
  • Connect the LFO to the VCA (via the level adjuster). This adds tremelo to your sound (varies the volume).
  • Read up on modular synthesisers, I have barely covered the possibilities.
  • Check out this site "What Is Analogue Synthesis?" http://www.geocities.com/SunsetStrip/Birdland/3547/analog.htm

7 - Containers and Control Panels

We now have a useful Synth, it's fun to experiment with, but what if we want to make some music?. All these wires and modules become 'clutter'. All we really need to see are the Sliders and other controls. We need to simplify our view.

Open the SynthEdit window as large as possible. Select all the modules except the MIDI Player and the Sound Out. (to select several modules at once, hold down the <Cntrl> key and click the title of each module. Alternately 'drag a box' around them.

Now click menu "Edit->Box Selection". What has happened?. We have enclosed the modules into a Container, creating a 'Synth' prefabricated module. Let's name it ( Right click the Container, choose 'Properties...', type a new Title, "Synth". Close the Properties Window ).

We can still access the modules, Right click the Synth, click 'Structure...'. A new window will open showing the modules. Notice the "IO Mod" ( Input / Output ). This module is like the backpanel of a synth, it allows you to send signals in and out. There should be a MIDI In and an Output plug. Close the Structure window.

Back at the main window, Right click the Synth, click 'Panel Edit...'. A new window will open showing just the controls. This represents the front panel of the synth. The controls appear to be scattered around. Tidy them. Try adding a 'Panel Group' object ( Insert-Controls-PanelGroup ). This 'frame' type object allows you to visually group your controls. You can change the Panel Group's title by right-clicking it (choose 'Properties' etc). You can resize the Panel Group by dragging the lower-right corner. Arrange the controls like so...

Image18b.gif (5265 bytes)

In fact by alternating between the 'Structure' and 'Controls' windows, you can add sliders to all the synth's modules.

For some examples of Synths created this way, check out the 'live.se1' and 'fm_synth' files. (fm synth is in the Prefabs folder).

End of tutorial, have fun!.


Frequency Modulation Synthesis

Frequency Modulation Basics

Frequency Modulation, as a form of synthesis, was discovered experimentally by John Chowning, and was popularised by the Yamaha DX-7. The idea is to use the output of one oscillator to modulate the frequency of another. The result is a rich complex sound with many harmonics.

The DX-7 used a variation on direct frequency modulation, phase modulation. The result is the same, but with phase modulation it's easier to control the pitch and depth of modulation independently. (phase modulation is not to be confused with phase distortion).

Lets try it...

Open a new SynthEdit project. Insert an Oscillator (Insert->Waveform-Oscillator). Set it to Sine waveform (right-click, Properties, Waveform:Sine).

Copy and Paste it to create a 2nd oscillator. Yamaha calls these operators. Wire them like so....

The leftmost one is a 'modulator', the right one a 'carrier'.

To hear and see what is happening we need an 'Sound Out'(Insert- Input Output- Sound Out) and a 'Scope' (Insert-Controls-Scope). Also connect a Slider the the modulator's pitch....

Push the 'Play' button. Moving the Pitch slider changes the carrier's sound dramatically, like a short-wave radio trying to tune in. The resulting sound depends on two factors, the difference in frequency between to two operators, and the amount of modulation (modulation depth).

Connect a new Slider to the carrier's 'PM Depth' input. Experiment with the sliders.

A Synth usually controls the modulation depth with an envelope, Add one (Insert-Waveform-ADSR). Connect it's output to the carriers 'PM Depth'. Delete the line between the PM Depth and the slider (carefully click it, press <Delete>). Connect the Slider to the ADSR's 'Overall Level' input....

Increase the PM Depth slider. Adjust the ADSR for a longer release (Right click-Properties... Set "Sustain" to zero, set "Release" and "Decay" to 7.00). Push Play to trigger the sound.

It is now sounding more like an instrument, you can experiment with the two sliders to achieve different effects (push Play each time to re-trigger the envelope).

Well that's the basis of FM Synthesis. Of course a full synth would include control over the sounds loudness, (see the 'Analog Synthesis Tutorial' for a step by step guide). Also the pitch of the modulator is usually relative to the pitch of the carrier. To achieve this in SynthEdit....

fm_4.gif (7578 bytes)

This section of an fm synth patch has both Oscillator's pitch controlled from the same source(MIDI to CV), but the modulator oscillator has an additional pitch slider.

To see a complete example, check out SynthEdit's FM Synth prefab( Insert-Synths-FM Synth ), Right-click choose "Structure" to see how it works.

Also, the Yamaha DX-7 used a total of 6 operators in a variety of configurations, some using feedback from the carrier to the modulator. (SynthEdit doesn't support feedback though). Some other possibilities to try...

Each block represents an operator, each line represents a signal path( with control over the depth ).

For a more in-depth look at FM, Check out "Sound on Sound" magazine's excellent articles

Synth Secrets - Introduction to FM

Synth Secrets - More on FM

In fact the entire series is excellent.


Phase Distortion Synthesis

Phase Distortion Synthesis was pioneered by Casio in the 80's. It is based on the idea of distorting the playback phase of a sine wave. For example...

pd1.gif (1344 bytes) pd2.gif (1510 bytes) pd3.gif (1347 bytes) pd4.gif (1514 bytes)

By speeding the playback of one section of the sine wave, it approximates the analog 'Sawtooth' shape.
Phase Distortion synths like the Casio CZ-1000 are characterised by a very 'clean' sound, similar in some cases to Yamaha's DX-7. The Casio's 8-stage envelopes for Pitch, Waveshape, and Amplitude were superior to most synths at the time. The main drawback of the Casio was a lack of velocity sensitive keys. Of course with SynthEdit, you can use the Velocity output of the 'MIDI to CV' to improve the 'playability' of the Casio sound. Vince Clark ( of Erasure ) used a rack full of Casio-CZs to achieve a 'fat' sound. Now you can too!.

pd_osc.gif (1554 bytes)

This module re-creates the PD sound. The Modulation input controls the amount of distortion, Zero Volts gives a pure sine wave, 10 Volts gives the fully distorted wave. There are 8 different waveshapes to choose from, and you can select combinations of two waves.

This Oscillator is used slightly differently from the standard one. Here is a typical Synth Voice.

struct_analog.gif (2771 bytes)

There are two ADSR envelopes, one to control the Volume, and one to control the filter cuttoff (See the Analogue tutorial for an explanation).

Here is how you would achieve a similar result with Phase Distortion.

struct_pd.gif (2479 bytes)

There is no filter, instead the 'Filter' ADSR is connected to the PD Osc's 'Modulation Depth' input. This patch will give a sound very similar to traditional subtractive synthesis, but without the need for a filter.


MIDI Control

Patch Selection

Hardware synths and effect units allow you to store different 'Programs' or 'Patches'. SynthEdit can too. Usually your SynthEdit patch will be in a Container module. To add support for storing patches, simply insert a "Patch Select" module into the container (Insert-MIDI-Patch Select). This will add a patch display window to the container, and extra patch selection controls to the Control Panel view.....

patch_selector.gif (11088 bytes)

MIDI Automation

As well as using MIDI to select patches, you can control individual sliders via MIDI as well. To add MIDI automation support insert a "MIDI Automator" (Insert-MIDI-MIDI Automator).

automator.gif (1399 bytes)

This adds automation support to all other controls within the same CONTAINER. To configure, right-click the container, choose "Properties..." below the various options you should see the "Automation" section...

automation.gif (4940 bytes)

Here you can specify which controller each slider will Send and Receive. You can use this to automate parameter changes from a sequencer, or to control your synths from an external MIDI control surface. You can enable or disable automation via the "MIDI Automation" button.
You can do the same from any Slider's property page.

Remember to connect the Patch Selector and Automator's MIDI input to your MIDI source. Typically like so...

automation2.gif (6657 bytes)

i.e. all of the MIDI devices share the same Input and Channel selector. From the outside, the container has just one MIDI input and one MIDI output. When the user switches MIDI Channel, the patch selector, automation and MIDI CV all switch to the new channel.

MIDI Controllers module

This module provides non-permanent control from MIDI. For example you might wish to use your keyboard's Modulation wheel or joystick to control vibrato on a sound. To do this use a "MIDI Controllers" module. e.g.

automation3.gif (5564 bytes)

This simplified section of a synth shows an LFO(Low Frequency Oscillator) passing though a Level Adjuster. Initially the "Controllers" module sends out zero volts, effectively preventing any of the LFO signal passing though the Multiplier. The musician pushing her Mod Wheel sends a rising voltage to the multiplier, increasing the amount of LFO going into the Oscillator.
You can configure the module for different MIDI controller codes via it's Properties sheet (right-click-Properties...).
For an advanced version of this check out the "Poly Synth" prefab (Insert-Synths-Poly Synth). The modulation section uses "Switch" modules to select various modulation sources and destinations.


Tutorial

Tutorial 2 - Making a VST Plugin Synth

Part 1 - Building a basic synth

Please make sure you understand the concepts in Tutorial 1, as I'm going to assume you know the basics of SynthEdit already.

The easiest synth to build is a simple Bassline type synth, as we only have to use one oscillator, one filter, and one Envelope generator (ADSR).

tut2_block_diag.gif (2236 bytes)

In SynthEdit, choose menu "File->New" to create a blank project. Make this simple synth in the main window.....

tut2_structure.gif (12259 bytes)

You should be able to play the keyboard and hear the synth.

This is OK as a starting point, but what we really have here are 3 devices:
1 - A Keyboard
2 - A Synth
3 - The Sound Output

When used as a VST plugin, we need only the synth. The host (Cubase whatever) will be providing the audio output, and the MIDI input.

Put the synth components into a container ( select all modules EXCEPT the "Sound Out" and "Keyboard". Choose menu Edit->Box Selection ).
( You can select multiple modules by holding down the SHIFT key and clicking each one).

tut2_containered.gif (3091 bytes)

OK, the Container represents the synth (the modules are all in there). Lets give it a name, right click it, choose "Properties..." enter a new title, Mysynth. Close the properties window. This will become the name of out VST instrument.

The control Panel

Right-click the synth, choose "Panel Edit..". You will see the blue front panel of your synth, The controls will all be jumbled together. Tidy them...

tut2_panel.gif (4451 bytes)

Resize the panel window to neatly frame your controls. This size will become locked-in once your synth is a plugin.

OK, we're basically done. Just need to tidy up. The "Input 1" control needs a better title, it controls the amount of envelope sent to the filter. Right-click it, Properties..., Title "Env Amnt"

Performing the "Save At VST"

Back in the main window. Your Synth should have a MIDI Input, and an Sound Output. These represent the input and output features of your VST plugin.
if you haven't already done so, Save your creation.

Choose menu File->"Save AS VST..."

tut2_dialog.gif (5323 bytes)

Enter a four character identifier for your plugin. It is important that you use a unique code for each different synth you make. This helps any VST host distinguish between plugins. Hit OK.

tut2_confirm.gif (3298 bytes)

Done!, you can now load you synth as a VST plugin, just like any other. (Insert->VST Plugin->MySynth). You can also share your plugin with others and use it in your favorite sequencer ( most hosts should support your plugin, let Jeff know of any problems ).

Note: if you create your plugin on a Windows 98 system, it will consist of two files (Mysynth.dll, Mysynth.dat). If you create it on a Windows NT, 2000, or XP system, there will be just one file (Mysynth.dll). Either type will work on any windows system (you don't have to make 2 versions).

Enhancing the basic plugin

Adding support for several patches

If you've used any VST plugins, you will know they usually have a choice of 'Programs' (also known as "Presets", or "Patches"). Adding support for these is easy, just add a "Patch Select" to your synth.(Right-click->Structure, to see the internals. Insert->MIDI->Patch Select).

tut2_patch.gif (2969 bytes)

Now your control panel has the standard Patch selection controls. If you intend to distribute your plugin, set up a variety of patches to show what it can do. Name each patch too.

Stereo

Many VST Hosts assume VST instruments have 2 audio outputs, Left and Right. If you don't provide both, your plugin won't work correctly in some hosts. The easiest way to provide two outputs is simply to duplicate the existing one...

Open the structure view, look for the "IO Mod" (input/Output Module). Drag a new connection from the VCA Output to the IO Mod's 'Spare' connection...

tut2_stereo.gif (1578 bytes)

Back in the main window, you will notice your synth has two outputs. This will work better in most hosts.

MIDI Channel

In SynthEdit, you normally assign each synth it's own MIDI channel. A VST plugin however must respond on ALL channels (The Host filters out the correct channel). So you need to set your 'MIDI to CV' to receive on all channels. Open the structure window, right-click the 'MIDI to CV", Properties.. Set Channel to "All".

Part 2 - Creating a custom look (Skin)

A professional VST plugin has a customized look. You can do the same.
WARNING: This is an advanced topic. Creating professional skins is an art in itself.

All the images used in SynthEdit are kept as bitmap files in the SynthEdit 'skins' folder.

tut2_folders.gif (1924 bytes)

Each skin has it's own folder. The 'default' folder contains the standard blue background and knobs. Never change any files in the default folder. To make your own skin, first create a new folder for it. Using Windows Explorer, find your SynthEdit folder, find the skins folder, make a new folder called "MySkin".

Changing the background

Whenever you want to customize an item, first copy the default files to your skin folder as a starting point. You don't need to copy all the files, just the ones you want to change.

Copy the background image files from the default folder to your new folder (background.bmp, background.txt). Use a paint program to create a new background.bmp. It can be a repeating tiled image, or can be designed as a one piece custom background.

tut2_skin1.gif (4265 bytes)

OK, It's pretty lame, but you get the idea. You will need to restart SynthEdit to use the new skin. Once you've done so, open the panel of your synth, Right click a blank area, Choose Skin->MySkin.

tut2_skin2.gif (5690 bytes)

Making custom knobs

(REALLY Advanced)

Each knob and button consists of a series of images, 1 for each possible position of the knob/button. For convenience, these images are combined together into one long 'strip'. Find the "skins\default\knob_med.bmp" to see this..

tut2_skin3.gif (1533 bytes)

Because each image is rectangular, you also need to specify the transparent parts of the image (where the background will be visible), this is done with a 'Mask' File. Look at knob_med_mask.bmp to see this.

tut2_skin4.gif (1430 bytes)

The black bits represent the parts of the knob to show, the white sections will be transparent (you will see 'though' those bits). Notice also the grey areas of the mask, these will be semi transparent, in this case they are used to create a semi transparent shadow (drag a knob around in SynthEdit's panel view, you can actually see things though the shadow. You could use this effect to create transparent objects too, like glass knobs for example. If you've seen the PD-303's knobs, I've used transparency to create a glowing 'halo' around the lights. (very subtle, but adds to the realism)

tut2_skin5.jpg (4087 bytes)

So how do I draw the knob images?

tut2_skin6.jpg (3208 bytes)

To do this well, you need 3D rendering software. I use a freeware package called PovRay. This is a text-based package, but it's pretty good. You will need to go through the tutorials to learn how to use it (don't ask me, there is plenty of help available on the internet).

Get povray from www.povray.org

Here is the standard blue knob file to get you started....

#include "colors.inc"
// <- comments start with two slashes (don't affect image, just notes to you)

// This is a variable, set this to 1 to render the background,including shadow
// or to 0, for a plain black background. More about this in the help file.
#declare BackGroundVisable=1;

// set this to 0 to see the knob from an angle (helps to visualize it)
// 1 for a top down view ( as it will appear in your skin )
#declare topdownview=1;

#if (topdownview = 1)
camera {
orthographic
up <0, 3.5, 0>
right <3.5, 0, 0>
location <0, 0.001, -2>
look_at <0, 0, 0>
}
#else
// normal camera at angle
camera {
location <-2.0, 0.0, -3.7>
look_at 0
}
#end

// soft light source
light_source {
<-15, 15, -20>
color White
area_light <15, 0, 0>, <0, 0, 15>, 5, 5
adaptive 1
}

// grey background
#if (BackGroundVisable = 1)
plane { -z, 0
texture{
pigment { Grey }
}
}
#end

// white ticks around knob on background
#declare Ticks=10;
#declare Count=0;
#while (Count <= Ticks)

cylinder {
<1, 1, -.0001>,// Center of one end
<1, 1, 0>, // Center of other end
0.1 // Radius
texture {
pigment{ color White}
finish {
phong 1
ambient 0.5
diffuse 0.6
}
}
rotate <0,0,180 - Count*270/Ticks>
}

#declare Count=Count+1;
#end

// blue knob
sphere { <0, 0, 0> , 1
texture{
pigment{ color Blue}

finish {
phong 1
}
}
}

// white line on knob
box {
<-1.1, -.2, -.97>, // Near lower left corner
< 0, .2, 0> // Far upper right corner
texture {
pigment{ color White}
finish {
phong 1
ambient 0.5
diffuse 0.6
}
}

// OK, this is the bit that rotates the knob ( or at least the white line on it! )
// once you've enabled animation.
// rotate from 8 o'clock anticlockwise to 4 o'clock
rotate <0,0,45 - clock*270>
}
To set up the animation you need to add some stuff to your Povray ini file too (it's all explained in Povray's help).

Initial_Frame = 1
Final_Frame = 20
Initial_clock 0.0
Final_clock 1.0

Setting up the animation makes povray output a series of files ( knob_sm01.bmp, knob_sm02.bmp... etc ), each one with the knob rotated a bit.

'Stitching' the files together

To combine all the images together into one long strip, you need 'Trentstitch', get it from TrentSoft. It's pretty easy to use.

Creating the transparency mask.

To simplify the process of making the mask, I have written a basic program called Masker. Masker calculates the correct amount of transparency for each part of your image. To do this it compares two versions of your image:
tut2_skin7.jpg (1733 bytes) - one against a grey background
tut2_skin8.jpg (1728 bytes) - one against a black background.

To produce the 2nd image change...
#declare BackGroundVisable=1;
To
#declare BackGroundVisable=0;
In the PovRay file.

Masker takes these two files as input, and produces 2 files as output...

tut2_skin9.jpg (1746 bytes) Image file (Notice shadow has been converted to solid black)
tut2_skin10.jpg (1760 bytes) Mask File (Notice the shadow mask is semi-transparent)

Get masker from www.synthedit.com/masker.exe save it somewhere.

Details

- First render all your knob images against a grey background
- Combine the images into a long strip (using TrentStitch)
- Name the file myknob_wh.bmp ( the '_wh' is important...)

- Do the same again against a black background.
- Name the 2nd image myknob_bl.bmp

You should now have two image strips, one containing all the images against a grey background, one containing all the images against a black background.

- Start Masker
- choose one of the files using the file selector ( the button with '...' on it)
- Enter 'Reduction times' 1
- Push button "RS Mask Black/White"

After a short time, masker will produce two files, dest.bmp, and mask.bmp.
rename these:
knob_med.bmp, and
knob_med_mask.bmp

place the two files in your MySkin folder.

Almost done, check out the knob_med.txt file. The line..

frame_size 32,32
sets the size of the image frames, you may need to adjust this to suit.

Start SynthEdit, insert a slider, change it's appearance to "Knob", and open the panel edit. You will see your new knob( well, my example here will look the same as the old knob, maybe you want to try making it red or something. You can work out how ).

Anti-Aliasing

tut2_skin11.gif (1613 bytes)

To add that extra touch of professionalism to your images, you can add Anti-Aliasing to smooth the image outlines. Masker can do this automatically if you provide it with extra-big images. For example you could draw/render your image at 4 time normal size. Then when you process it through masker, specify a reduction of 4 times. Masker will average out the pixels, any pixels near the edge of the image are made semi-transparent to merge smoothly into the background bitmap.

tut2_skin7.jpg (1733 bytes) without Anti-Aliasing
tut2_skin13.jpg (1634 bytes) with new patented Anti-Aliasing! (OK not much different, but notice the white 'ticks' look more regular, and the knob outline has lost it's 'jaggies' )

You're on your own!, but feel free to email Jeff if you have questions, or need clarification, or if you just want to send him money for nothing.


VST Plugins

Save As VST Plugin

Once you are familiar with creating synths in SynthEdit, you can save your work work as a VST Plugin. A VST plugin is read-only (you still have the Original SynthEdit file though). You can use the plugin in other music software (Cubase VST, FruityLoops, Psycle etc). You can use it in SynthEdit too of course, but the 'SynthEdit Native' uses less CPU and memory.

Notes.

You patch should be in a in container, like the SynthEdit prefab synths. The inputs and outputs of this container represent the inputs and outputs of the VST plugin. You can have as many audio inputs and outputs as you need, but be aware that many VST hosts have limitations. Many VST Hosts expect a Synth plugin to have exactly 2 outputs (Left and Right). You can have a MIDI Input and Output if necessary.

Some SynthEdit modules, like the MIDI player, access external files. The external file will NOT be saved as part of the VST plugin. So be aware that if you distribute a plugin, you must also distribute any external MIDI or WAVE files. You can imbed other VST plugins within your plugin, but again you will need to keep any imbedded VST dll file in the same folder. You can not access the control panel of an imbedded plugin.
The exception to these rules are customized skin files, these are merged into the plugin dll file.

If your patch is a Synthesizer it should usually have a "Patch Selector" module. This gives the user several 'Programs' to choose from. If you intend to distribute your plugin to others, create several programs as a starting point for the user.

It is the responsibility of the VST hosts to filter all MIDI data sent to your plugin. Your plugin should respond to MIDI on all channels, so set any Channel settings to "All" (On the MIDI to CV module for example).

Size your Synth's control panel so you can see all the controls, it will be frozen to this size as a plugin.

The plugin's 4 character identifier is very important. It is used by the VST Host to tell it apart from others. Each plugin you distribute must have a different 4 character identifier. You will be propted for this when you choose "Save As VST..".

When you save you synth as a VST you have the option "Nag User". What this does is it pops up the 'about box' every so often. The idea is you put a message in the 'about box' like..

"This is shareware, please send $40 to me"

And the person using the VST gets the message poping up every so often. This feature is activated in the registered version of SynthEdit.

Plugins created on a Windows XP (or NT) system are saved to a single file e.g. mysynth.dll
On Windows 98 systems, the plugin consists of two files e.g. mysynth.dll and mysynth.dat. ( on XP the two files are merged, Win98 lacks this feature )

No matter what system you create the plugin on, it will work fine on either Win98 or XP.

Effect Types

There are 3 categories:
-Master : These are applied to the entire mix.
-Send: These are like Aux send on a hardware mixer, any chan can send some audio to these, the result gets mixed into the Master mix, or one of the busses. Send effects are Mono In, Stereo Out.
-Insert: These apply to an individual channel, all audio from that chan goes though the effect.
I created several effects in SynthEdit, combinations of 1 or 2 audio outputs, 1 or 2 inputs, and with "Mono Use OK" set or not.
The results.
Any combination of 1 IN 1 OUT, 1 IN 2 OUT, 2 IN 2 OUT will work as an INSERT or MASTER effect.
1 IN 2 OUT or 2 IN 2 OUT (with "Mono use OK" set) will work as a SEND effect.
So in English: Most plugins appear to work as MASTER or INSERT effects.
Only plugins with 1 input and 2 outputs work as SEND effects. Plugins with 2 inputs will also work if you select "Mono Use OK", which means it will function correctly with input signals on just one of it's 2 inputs

Use Of Trademarks (from Steinberg's VST SDK)

If the Licensee is publishing a product under his own name that is using parts or all of the Licensed Software Developer Kit, the Licensee shall be under an obligation to refer to Steinberg's copyrights and trademarks in the following way:

a) Steinberg's copyright notice should be included in the documentation, regardless of the media used to supply the documentation.
Copyright notice: 'VST is a trademark of Steinberg Media Technologies AG'

b) The VST Logo has to appear on packages and promotional material.
The VST Logo artwork and usage guidelines are part of the 'Licensed Software Developer Kit' and are supplied by Steinberg in digital format.

c) In the 'about box' of the product in one of the following formats:
- VST PlugIn Technology by Steinberg Media Technologies AG,
- VST PlugIn Interface Technology by Steinberg Media Technologies AG


SynthEdit & Sequencers

Using SynthEdit with your Sequencer

SynthEdit is not a sequencer. To record your own music you need a Sequencer as well. A good list of sequencers is available at http://www.hitsquad.com/smm/win95/MIDI_SEQUENCERS/

Option 1

Record your music using a separate sequencer, save it as a standard MIDI file (*.mid).
In SynthEdit, load the MIDI file into the 'MIDI Player' module. It's big advantage is the elimination of MIDI timing problems. SynthEdit's internal midi connections transmit 'instantly'. This very high speed offers rock solid timing, better than ANY hardware MIDI setup.

Option 2

Use SE with your sequencer

Use a 'MIDI loopback'. This separate piece of software redirects your sequencer's MIDI output to SynthEdit's MIDI input.

A good free loopback is Hubis_MIDI LoopBack_device ( see the midlpbk.txt for install instructions ). Or if you use Windows XP, MIDI Yoke ( http://midiox.com/ ) looks good.

After Installing the loopback, configure SynthEdit for external MIDI Input, the file 'live.se1' is already set up to do this.

Set SynthEdit's MIDI input. menu 'Audio->Preferences, MIDI In' set this to LB1.

Set your sequencer track's MIDI output to the same loopback, LB1.

Push SE's 'Play' button, then switch to you sequencer. Any MIDI data sent should now go to SynthEdit.

If your sequencer supports audio tracks, you may need to select it's DirectSound driver for audio output.

Performance

Running a software synth alongside a sequencer is very demanding on the PC. For good timing you will need to minimise SynthEdit's latency ( Audio->Preferences->Play Ahead ). Unfortunately this will increase the processor load more. Setting SynthEdit's sample rate the same as the sequencer should help performance, but again, running SynthEdit at 44khz or more requires a lot of processor power.

One advantage of SynthEdit's internal MIDI Player is that you can use 'Offline Rendering'. By using the Wave Recorder module, SynthEdit writes the music to a wave file before playing it. In this mode you effectively have no CPU limitations. You can have as many Synth, Drum Machine or effects modules as you like. You can use 44, 48 or even 96khz sample rates with no problems.

You will find that using many Synths and effects at once will overload your CPU. Switching to 'File' rendering will overcome this, but you can't hear the audio while you make adjustments. To get around this, try Muting some of the modules (Right Click, 'Mute'). For example, once you have your drums mixed OK, mute them while you work on the bassline and lead sounds.


Efficiency - A few notes about CPU usage in your synth

Efficiency - A few notes about optimizing CPU usage in your synth design

PC's are never fast enough, the better they get, the more we ask of them. 10 years ago software synthesizers were confined to University Computers. Today we expect to run 10 soft-synths at once on our home PC. The more efficient you can make your synth, the better.

CPU use is very dependant on a synth's structure, sometimes there are 2 ways to do something, with vastly different results.

Example case... The volume control section of a synth, It has a VCA to apply a volume envelope (pretty standard stuff)

efficiency1.gif (3883 bytes)

You want your synth to have a volume control, the 'obvious' way, just add a second VCA, and hook up a slider...

efficiency2.gif (4935 bytes)

This is not the most efficient method, both VCA's operate at audio-rate (usually 44.khz), so your synth now does an extra 44,100 calculations per second!.

Better way...

efficiency3.gif (5067 bytes)

What's the difference?. Instead of controlling the audio volume directly, we are controlling the ADSR level (which in turn controls the volume).
Now, there no obvious improvement here, just a different way of doing the same thing right?.

What is not obvious is the effect on SynthEdit's automatic 'power saving' mode....

CPU 'Power Saving'

If you observe the slider's output on the Oscilloscope, you will see it is outputting a 'flat-line' signal..

efficiency4.gif (3221 bytes)

In other words, when you aren't moving the slider, it's not doing any real work, SynthEdit puts it to 'sleep', whereby it is ignored by the CPU, and uses absolutely no CPU resource.
The same rule applies to the ADSR, while you hold a note (the sustain segment), the ADSR goes into 'sleep-mode' too. It's also outputting a 'flat-line' signal. Looking at the 'Level Adjust' module, you see that for much of the time, both it's inputs will be 'flat-line', inactive, signals. Therefore it also enters 'power-save' mode.
That just leaves the Oscillator, one VCA, and the 'Sound Out' doing any real work. You've effectively eliminated one entire module for 'free'.

Additional improvement. The ADSR has a built in level adjuster, it's 'Overall Level' plug. Using that instead of the external 'Level Adjust' eliminates annother module...

efficiency5.gif (4648 bytes)

Each 'wire' on you SynthEdit screen represents an audio buffer of around 100 samples (that's 400 bytes of memory). So this final version not only saves 44,100 math calculations every second, it also saves a further 88,200 sample copies per second through using less wires.

Well, I hope that made sense. Note that this example also applies when adding velocity sensitivity, or panning to your synth.

Another way of looking at it

Your synth handles two types of signal:

1 - 'Audio Signals' (the Oscillator, VCA, and Sound Out)

2 - 'Control Signals' (ADSR, Level Slider)

Adding modules to the 'audio path' is 'expensive' in terms of CPU usage. Adding modules to the 'control path' is often 'cheap' or even free. Signals originating from sliders, and signals that don't change often, like the 'MIDI to CVs' Pitch and Velocity outputs, can be considered 'Control' signals'.
An ADSR is somewhere in-between, during its Attack and Decay segments, it's generating 'Audio Rate' data, during the Sustain section, it's generating a 'flat-line', Control-Rate signal.


Module List

Modules

1 Pole HP

1 Pole LP

8 Stage Env

ADSR

AND Gate

All Pass

Binary Counter

Ceil

Clipper

Comparator

Container

Controllers

Decade Counter

Delay

Delay2

Denormal Cleaner

Denormal Detector

Divide

Drum Sequencer

Drum Trigger

Fixed Values

Floor

Freq Analyser

IO Mod

Inverter

KeyBoard

LED Indicator

Level Adj

List Entry

MIDI Automator

MIDI Filter

MIDI In

MIDI Monitor

MIDI Out

MIDI Player

Midi to CV

Monostable

Moog Filter

Multiply

NAND Gate

NOR Gate

NOT Gate

OR Gate

OS Command

Oscillator

Pan

Panel Group

Patch Select

Peak Follower

Peak Meter

Phase Dist Osc

Quantiser

Rectifier

Ring Modulator

SV Filter

Sample and Hold

Scope

Shift Register

Slider

Sound In

Sound Out

Soundfont Oscillator

Soundfont Player

Step Counter

Step Sequencer

Sub Panel

Subtract

Switch (1->Many)

Switch (Many->1)

Text Entry

Trigger to MIDI

VCA

VST Plugin

Voice Combiner

Volt Meter

Voltage To List

Wave Player

Wave Recorder

WaveShaper

WaveShaper2

X-Mix

XOR Gate

1 Pole HP

A simple, efficient Hi Pass filter. Has 6db/Octave response.

Inputs:

Signal
Pitch - Controls the Filter's 'Cutoff'. 1 Volt per Octave or 1 Volt / kHz switchable

Outputs:

Output

Parameters:

Freq Scale - Switches between 1 Volt per Octave or 1 Volt per kHz response. [ 1 Volt/Octave ,1 Volt/kHz ]

1 Pole LP

A simple, efficient Low Pass filter. Has 6db/Octave response.

Inputs:

Signal
Pitch - Controls the Filter's 'Cutoff'. 1 Volt per Octave or 1 Volt / kHz switchable

Outputs:

Output

Parameters:

Freq Scale - Switches between 1 Volt per Octave or 1 Volt per kHz response. [ 1 Volt/Octave ,1 Volt/kHz ]

8 Stage Env

An 8 segment Rate/Level style envelope. Configurable Sustain and End points. The segment rates are based on a log 'timecent scale' ie 0V = 0.01s, 5V = 0.3 s, 10V = 10s, 15V = 322 seconds

Inputs:

Gate - Triggers the Attack phase when greater then 0 V
Rate 0 - Segment rate ( 0 - fastest, 10 - slowest )
Level 0 - End level (0 - 10V)
Rate 1 - Segment rate ( 0 - fastest, 10 - slowest )
Level 1 - End level (0 - 10V)
Rate 2 - Segment rate ( 0 - fastest, 10 - slowest )
Level 2 - End level (0 - 10V)
Rate 3 - Segment rate ( 0 - fastest, 10 - slowest )
Level 3 - End level (0 - 10V)
Rate 4 - Segment rate ( 0 - fastest, 10 - slowest )
Level 4 - End level (0 - 10V)
Rate 5 - Segment rate ( 0 - fastest, 10 - slowest )
Level 5 - End level (0 - 10V)
Rate 6 - Segment rate ( 0 - fastest, 10 - slowest )
Level 6 - End level (0 - 10V)
Rate 7 - Segment rate ( 0 - fastest, 10 - slowest )
Level 7 - End level (0 - 10V)
Overall Level - Controls the overall output level. Handy for adding Velocity sensitivity
Sus Seg - Which segment to 'hold' at until key is released [ None ,0 ,1 ,2 ,3 ,4 ...]
End Seg - Which segment to stop at, subsequent segments are ignored. [ 0 to 7 ]

Outputs:

Signal Out

ADSR

This module provides a standard 5 section envelope. The attack, decay and release times are based on an exponential scale. You can use negative voltages for shorter durations. See Signal Levels and Conversions for Votage-Time conversion info

Inputs:

Gate - Triggers the Attack phase when greater then 0 V
Attack - Controls the rate of the attack, 0 V is quickest, 10 V slowest
Decay - The Decay rate
Sustain - The 'hold' level, while the gate is high (key is down)
Release - The Release rate
Overall Level - Controls the overall output level. Handy for adding Velocity sensitivity

Outputs:

Signal Out

AND Gate

Simulated Logic Gate. Output goes high when all inputs high.

Inputs:

Input

Outputs:

Output

All Pass

A two-pole all-pass filter.

Inputs:

Signal
Pitch - Controls the Filter's 'Cutoff'. 1 Volt per Octave
Resonance - Controls the rollover frequency band width

Outputs:

Output

Parameters:

Freq Scale - Switches between 1 Volt per Octave or 1 Volt per kHz response. [ 1 Volt/Octave ,1 Volt/kHz ]

Binary Counter

Output steps though binary count when clocked

Inputs:

Clock
Reset

Outputs:

B0
B1
B2
B3
B4
B5
B6
B7

Ceil

Outputs the next highest whole number

Inputs:

Signal in

Outputs:

Signal Out

Clipper

Restricts (clips) the signal to a range between two Voltages. Use this to distort the sound, or to limit a control signal between two values.

Inputs:

Signal In
Hi Limit - Clips any input signal above this voltage
Lo Limit - Clips any input signal below this voltage

Outputs:

Signal Out

Comparator

Compares the two input levels. If input A is greater, output is high (5), else low (-5).

Inputs:

Input A - The 2 inputs are compared. The output goes either high or low depending
Input B

Outputs:

Output

Parameters:

Hi Out Val
Lo Out Val

Container

This is a special module that holds a group of modules( like a folder ). The contents of a container are polyphonic. If you intend to use several independent synths, each should be a Container. To set the maximum number of simultaneous voices, right-click the Container and choose 'Properties', then choose 'Polyphony'. To see what's inside a Container, right click it and choose 'Structure'. To see a container's controls, choose 'Controls'. You can rename the container's plugs by right clicking and choosing 'Properties'. To group several modules into a container: select them (SHIFT-Click), then, from the Edit menu, choose 'Box Selection'. About polyphony

Spare - Connection to a module inside

Parameters:

Polyphony - Limits the number of notes you can play at once. (Changes take effect next time you re-start the sound) [ 1 to 200 ]
MIDI Automation - Enables Automation of incoming MIDI Controllers to Knobs. Requires 'MIDI Automator' module inside Container

Controllers

Converts MIDI Controllers like Modulation Wheel etc to voltages. Has four outputs, configurable to any MIDI controller number. See Patches & MIDI Control for more.

Inputs:

MIDI In
Channel - MIDI Channel [ All ,1 ,2 ,3 ,4 ,5 ...]
Type - Choose which MIDI controller you want converted to a Voltage output [ ,0 - Bank Select ,1 - Mod Wheel ,2 - Breath ,3 ,4 - Foot pedal ...]
Type - Choose which MIDI controller you want converted to a Voltage output [ ,0 - Bank Select ,1 - Mod Wheel ,2 - Breath ,3 ,4 - Foot pedal ...]
Type - Choose which MIDI controller you want converted to a Voltage output [ ,0 - Bank Select ,1 - Mod Wheel ,2 - Breath ,3 ,4 - Foot pedal ...]
Type - Choose which MIDI controller you want converted to a Voltage output [ ,0 - Bank Select ,1 - Mod Wheel ,2 - Breath ,3 ,4 - Foot pedal ...]

Outputs:

Aftertouch
Bender
Controller
Controller
Controller
Controller

Decade Counter

When triggered, send MIDI note messages

Inputs:

Clock
Reset

Outputs:

B0
B1
B2
B3
B4
B5
B6
B7
B8
B9

Delay

Creates an echo effect

Inputs:

Signal In
Modulation - Varies the delay time dynamically ( -5V to +5V )
Feedback

Outputs:

Signal Out

Parameters:

Delay Time (secs) - Max delay time in Seconds. Limited to maximum 10s.
Interpolate Output - Provides smoother modulation of delay time, but increases CPU load

Delay2

Creates an echo effect

Inputs:

Signal In
Modulation - Varies the delay time dynamically ( 0 to 10V )
Feedback

Outputs:

Signal Out

Parameters:

Delay Time (secs) - Max delay time in Seconds. Limited to maximum 10s.
Interpolate Output - Provides smoother modulation of delay time, but increases CPU load

Denormal Cleaner

Cleans DeNormal numbers any audio passing through. Denormal numbers are VERY small value that are inaudible, but waste CPU resources. This module is no longer needed, now that denormal removal is built-in to many other modules.

Inputs:

Signal in

Outputs:

Signal Out

Denormal Detector

A diagnostic module to indicate DeNormal numbers in the audio. Connect to a LED for visual indication. Denormal numbers are VERY small values that are inaudible, but waste CPU resources.

Inputs:

Signal in

Outputs:

Signal Out

Divide

Divides Input 1 by Input 2.

Inputs:

Input 1 - Input 1 is Divided by Input 2
Input 2

Outputs:

Output

Drum Sequencer

A MIDI Drum sequencer, connect it to a drum module. Either virtual, or real via a MIDI Out module.

Inputs:

Channel - MIDI Channel [ All ,1 ,2 ,3 ,4 ,5 ...]
MIDI In - Used to Sync tempo to an external MIDI clock source.

Outputs:

MIDI Out - Connect this to a Synth. Also outputs MIDI time sync info.

Parameters:

Ignore Program Change - Prevents this responding to patch changes from 'Patch Select' module
Sync - Synchronise Timing to MIDI Input, or Self-Generate Timing [ Internal ,MIDI I ]

Drum Trigger

Converts MIDI note data to individual trigger signals, one per drum. Supports the most common drums, and has 4 user-configurable trigger outputs.

Inputs:

MIDI In
Channel - MIDI Channel [ All ,1 ,2 ,3 ,4 ,5 ...]
Open HH Decay - Three different MIDI notes can trigger a hi-hat, but each one will vary the 'Hi Hat Decay' output, which you can connect to an envelope generator
Pedal HH Decay
Close HH Decay

Outputs:

Kick Trig
Vel
Snare Trig
Vel
Hi Hat Trig
Vel
Hi Hat Decay
Cow Bell Trig
Vel
Tom1 Trig
Vel
Tom2 Trig
Vel
Tom3 Trig
Vel
Clap Trig
Vel
Crash Trig
Vel
Tamb Trig
Vel
Ride Trig
Vel
User1 Trig
Vel
User2 Trig
Vel
User3 Trig
Vel
User4 Trig
Vel

Parameters:

User1 Note # - Set this to the MIDI note number of the percussion you want to use [ 0 to 127 ]
User2 Note # [ 0 to 127 ]
User3 Note # - Set this to the MIDI note number of the percussion you want to use [ 0 to 127 ]
User4 Note # [ 0 to 127 ]

Fixed Values

Provides a fixed voltage source, handy if you need a control voltage that won't appear on the control panel.

Outputs:

Spare Value - Pre-Set Voltage

Floor

Outputs the next lowest whole number

Inputs:

Signal in

Outputs:

Signal Out

Freq Analyser

Displays a signal's harmonic spectrum

Inputs:

Signal in

Parameters:

Frequency Scale - Changes Frequency scaling [ Linear ,Lo ]

IO Mod

Provides a link in/out of a container. Any plug you connect to this will appear as a plug on the outside of the container (and vice versa).

Spare - Connection to modules outside (at higher level of structure)

Inverter

Inverts (negates) the input signal.

Inputs:

Signal in

Outputs:

Signal Out

KeyBoard

On-Screen MIDI keyboard. Can be played with mouse, or from PC keyboard ('Q' is Middle-C, 'Z' two Octaves lower) The 'T' symbol sets 'Toggle Mode' where each key stays held untill you click it a second time.

Inputs:

Channel - MIDI Channel [ 1 ,2 ,3 ,4 ,5 ,6 ...]

Outputs:

MIDI Out

LED Indicator

A simulated LED (Light)

Inputs:

Signal in - Input signal
Threshold - Voltage where light switches on

Parameters:

Appearance - Not currently Used [ LE ]

Level Adj

This multiplies one input by the other. It can be used for ring modulation, or to apply an envelope to a signal ( amplitude modulation ), or to scale a signal by a fixed amount. Note: to apply an volume envelope use the DCA module (it changes the volume of the signal on a decibel scale, not a linear scale).

Inputs:

Input 1 - The 2 inputs are Multiplied. Then 'normalised' eg 5V multiplied by 2 V = 1V, (5 * 2 ) / 10
Input 2

Outputs:

Output

List Entry

This control is for connecting to a 'List of Values' type plug, (green). For example connect one of these to an Oscillator's 'Waveform' input.

Outputs:

Choice - Connect this to any input needing a list of values

Parameters:

MIDI Controller ID - Sets which MIDI controller this sends/responds to [ ,0 - Bank Select ,1 - Mod Wheel ,2 - Breath ,3 ,4 - Foot pedal ...]
Ignore Program Change - Prevents this control responding to patch changes from 'Patch Select' module
MIDI NRPN - Used with Controller 99 and 101 to provide user definable controllers [ 0 to 16255 ]
Appearance - Sets the appearance of the control [ Combo Box ,LED Stack ,Labeled LED Stack ,Selector ,Button Stack ,Rotary Switch ...]
Show Title On Panel - Leaves control's title blank on Control Panel

MIDI Automator

Enables MIDI automation of all a container's controls. See Patches & MIDI Control for more.

Inputs:

Channel - MIDI Channel selection [ All ,1 ,2 ,3 ,4 ,5 ...]
MIDI In - Use this to automate the controls from a MIDI sequence

Outputs:

MIDI Out - Sends MIDI controller messages when control is changed

MIDI Filter

Filters MIDI data based on Channel, Velocity and Note information. Use to create Keyboard Splits and Velocity Switching between Synths

Inputs:

MIDI In - MIDI Input Plug
Channel Lo - MIDI Channel Low [ 1 to 16 ]
Channel Hi - MIDI Channel Hi [ 1 to 16 ]
Note Lo - Note Low [ 0 to 127 ]
Note Hi - Note Hi [ 0 to 127 ]
Velocity Lo - Velocity Low [ 0 to 127 ]
Velocity Hi - Velocity Hi [ 0 to 127 ]

Outputs:

MIDI Out - MIDI Output Plug

MIDI In

Provides live MIDI input. Use the 'Audio' - 'Preferences' menu to change the source. In conjunction with a 'MIDI Loopback' allows controlling SynthEdit from a sequencer. Due to the nature of software synthesis, there is a small delay between when you hit a note and when the sound starts.

Outputs:

MIDI Data

MIDI Monitor

Shows any MIDI notes or controllers sent to it. Can filter on MIDI channel

Inputs:

MIDI In - MIDI Input Plug
Channel - MIDI Channel [ All ,1 ,2 ,3 ,4 ,5 ...]

MIDI Out

Provides live MIDI output, usually via your soundcard external midi interface, but can be configured to send MIDI to your soundcard's synth. Use the 'Audio' - 'Preferences' menu to change the destination.

Inputs:

MIDI In

MIDI Player

Plays a MIDI file from disk. Connect this to virtual synths/drum modules. Using this (as opposed to an external sequencer) gives you very high resolution timing, much better than standard MIDI, giving your music rock-solid accuracy.

Inputs:

File Name - A MIDI filename(*.mid)
Tempo - 10V = 100 bpm

Outputs:

MIDI Out

Parameters:

Ignore MIDI tempo Changes - Tempo is usually set by the MIDI file, this setting overrides it.
Loop Mode - Entire sequence loops from end, back to beginning

Midi to CV

This module converts MIDI notes into control voltages. The midi note number is converted into a pitch voltage ( 1Volt per octave). Connect this to an Oscillator or Filter to control frequency. The Trigger output goes high while the key is depressed. Connect the trigger output to an ADSR gate to trigger an envelope. This module plays an important part in making SynthEdit Polyphonic. You must put each MIDI to CV module in it's own Container. See Signal Levels and Conversions for Voltage to pitch conversion info

Inputs:

MIDI In
Channel - MIDI Channel [ All ,1 ,2 ,3 ,4 ,5 ...]
Bend Range - Maximum MIDI bender range in semitones [ 0 to 12 ]
Mono Mode - Limit sound to one voice. Enables the Retrigger option [ On ,Off ]
Retrigger - Retrigger Envelopes when playing legato (you hit a note before releasing previous). Used with Mono Mode. [ On ,Off ]
Portamento Time - Time for pitch to slide to a new note (When you play legato)

Outputs:

Gate - Use this to control an envelope (ADSR)
Pitch - Use this to control an Oscillator or Filter Pitch
Velocity - Provides MIDI velocity level (How fast you hit the key)
Aftertouch - Provides MIDI Aftertouch level

Monostable

When triggered, produces a fixed length pulse

Inputs:

Signal in
Pulse Length - 10 Volt = 1 Second

Outputs:

Signal Out

Moog Filter

A very 'Fat' 4 pole low pass filter. Has built in overdrive if pushed too far. Has higher CPU load than the SV Filter.

Inputs:

Signal
Pitch - Controls the Filter's 'Cutoff'. 1 Volt per Octave or 1 Volt / kHz switchable
Resonance - Emphasises the Cutoff frequency

Outputs:

Output

Parameters:

Freq Scale - Switches between 1 Volt per Octave or 1 Volt per kHz response. [ 1 Volt/Octave ,1 Volt/kHz ]

Multiply

Multiplys two Voltages.

Inputs:

Input 1 - The 2 inputs are Multiplied
Input 2

Outputs:

Output

NAND Gate

Simulated Logic Gate. Output goes high when any inputs low.

Inputs:

Input

Outputs:

Output

NOR Gate

Simulated Logic Gate. Output goes high if all inputs low

Inputs:

Input

Outputs:

Output

NOT Gate

Simulated Logic Gate. Output is opposit of input.

Inputs:

Signal in

Outputs:

Signal Out

OR Gate

Simulated Logic Gate. Output goes high when any one input high.

Inputs:

Input

Outputs:

Output

OS Command

Executes a DOS command when triggered. Warning: Triggering this at a high frequency could overload your Operating System.

Inputs:

Trigger in - Whenever this input exceeds 3.33 Volts, the DOS command is executed.
Command - The DOS command to execute.

Oscillator

The Oscillator is the starting point for many patches. It produces a choice of simple waveforms, plus white or pink noise. The Phase Mod input is for Yamaha DX style 'frequency modulation' (works well with a sine-wave output). See Signal Levels and Conversions for Voltage to pitch conversion info

Inputs:

Pitch - 1 Volt per Octave, 5V = Middle A
Pulse Width - Width of rectangular pulse. -10 to 10 Volts = 0 to 100%
Waveform - Selects different wave shapes [ Sine ,Saw ,Ramp ,Triangle ,Pulse ,White Noise ...]
Sync - Syncs this Oscillator to an external signal, usually another oscillator to produce a gnarly sound.
Phase Mod - Varies the phase (-5 to +5 Volts), used for yamaha style frequency modulation. Don't work on Pulse waveform.
PM Depth - Varies the phase modulation depth (0 to 10 Volts)

Outputs:

Audio Out

Parameters:

Freq Scale - Switches between 1 Volt per Octave or 1 Volt per kHz response. [ 1 Volt/Octave ,1 Volt/kHz ]
Smooth Peaks (Gibbs Effect) - Improves the Wave Appearance by rolling off upper harmonics, reduces wave 'brightness' though.
Sync X-Fade (Anti Alias) - Reduces Alias noise when Syncing at Audio rates. Can be disabled to provide precise note-on phase sync (usefull for phase modulation patches)

Pan

Panorama module. Provides Left/Right and Volume control of a signal.

Inputs:

Input - Audio signal input
Pan - -5V = Left, +5V = Right
Volume - Controls the Volume of the input signal. 10 V = original volume, 0 V = silence

Outputs:

Left Out
Right Out

Parameters:

Fade Law - Chooses different cross fade laws [ Equal Intensity (0dB) ,Equal Power(+3dB) ,Sqr Roo ]

Panel Group

Not really a module, draws a titled box on the control panel.

Patch Select

This special control remembers the settings of the other controls. Dropping one of these into a synth allows 127 different patches to be stored. Only the settings of sliders etc are stored, not the routing of the patch cords. If connected to a synth's MIDI input, will respond to MIDI patch change messages, and will switch ALL controls in the same container to the new patch. See Patches & MIDI Control for more.

Inputs:

Channel - MIDI Channel [ All ,1 ,2 ,3 ,4 ,5 ...]
MIDI In

Outputs:

MIDI Out - Transmits MIDI Program change messages

Peak Follower

The output attempts to follow the envelope (level) of the input signal.

Inputs:

Signal in - Input signal
Attack - Rate at which current_level rises to track input level
Decay - Rate at which current_level falls to track input level

Outputs:

Signal Out - current_level Signal

Peak Meter

A LED Bar Graph style volume meter, calibrated in decibels.

Inputs:

Signal in - Input signal
Response [ Decibel ,Linea ]

Phase Dist Osc

The Casio CZ Oscillator more

Inputs:

Pitch - 1 Volt per Octave, 5V = Middle A
Modulation Depth - Controls Waveshape distortion. 0 to 10 Volts = 0 to 100%
Wave1 - Selects different wave shapes [ Saw ,Square ,Pulse ,Dbl Sine ,Saw-Pulse ,Reso1 ...]
Wave2 - Selects different wave shapes [ None ,Saw ,Square ,Pulse ,Dbl Sine ,Saw-Pulse ...]

Outputs:

Audio Out

Parameters:

Freq Scale - Switches between 1 Volt per Octave or 1 Volt per kHz response. [ 1 Volt/Octave ,1 Volt/kHz ]

Quantiser

Use to contrain the voltage to discrete 'steps', e.g. to the nearest whole Volt.

Inputs:

Signal In
Step Size - Quantisation step size in Volts

Outputs:

Signal Out

Rectifier

'Flips' negative voltages to positive

Inputs:

Signal in

Outputs:

Signal Out

Ring Modulator

One input controls the level of the other. It can be used for ring modulation, or to apply an envelope to a signal ( amplitude modulation ), or to scale a signal by a fixed amount.

Inputs:

Input 1 - The 2 inputs are Multiplied. Then 'normalised' eg 5V multiplied by 2 V = 1V, (5 * 2 ) / 10
Input 2

Outputs:

Output

SV Filter

'State Variable' Filter. Changes the frequency content of the sound. Provides Low Pass ( only low frequencies pass through), High Pass, Band Pass, and Band Reject outputs. The resonance control adds a peak to the response (great for dance music bass lines). 2 pole, 12 db/ octave response

Inputs:

Signal
Pitch - Controls the Filter's 'Cutoff'. 1 Volt per Octave
Resonance - Emphasises the Cutoff frequency

Outputs:

Low Pass
Hi Pass
Band Pass
Band Reject

Parameters:

Freq Scale - Switches between 1 Volt per Octave or 1 Volt per kHz response. [ 1 Volt/Octave ,1 Volt/kHz ]

Sample and Hold

Sample and Hold Module

Inputs:

Audio
Hold - Freezes input signal on leading edge

Outputs:

Output

Scope

Displays Audio waveform graphically

Inputs:

Signal A
Signal B

Shift Register

Digital Shift Register. For you seriously warped experimenters

Inputs:

Clock
Input
Reset

Outputs:

B0
B1
B2
B3
B4
B5
B6
B7
B8
B9

Slider

Allows direct control of an input voltage. For example connect one to an Oscillators's 'Pitch' input. Can appear as a knob or button as well (See 'Appearance' parameter). Can be configured to send any MIDI controller or NRPN number, handy for controlling external MIDI gear.

Outputs:

Signal Out

Parameters:

MIDI Controller ID - Sets which MIDI controller this sends/responds to [ ,0 - Bank Select ,1 - Mod Wheel ,2 - Breath ,3 ,4 - Foot pedal ...]
Ignore Program Change - Prevents this control responding to patch changes from 'Patch Select' module
MIDI NRPN - Used with Controller 99 and 101 to provide user definable controllers [ 0 to 16255 ]
Lo Value - Minimum output value
Hi Value - Maximum output value
Appearance - Sets the appearance of the control [ None ,Plain Slider ,Vert Slider ,Horiz Slider ,Knob ,Button ...]
Show Readout - Adds text readout of value
Show Title On Panel - Leaves control's title blank on Control Panel

Sound In

Gets audio from your mic/line in. You are limited to one soundcard in module.

Outputs:

1
2
3
4
5
6
7
8
9
10
11
12

Sound Out

Sends audio to your speakers. You are limited to one soundcard out module. Non-registered SynthEdit limited to 2 output channels.

Inputs:

1
2
3
4
5
6
7
8
9
10
11
12

Soundfont Oscillator

The Soundfont Oscillator does only one thing, plays raw samples. It dosn't add any envelope or velocity response to the sample. You can add full control over volume, filtering and pitch externally. Use it as you would a standard Oscillator, i.e. it's now just the starting point of a patch. You also need at least a MIDI CV,an ADSR and a VCA to make it work. It has trigger, pitch and velocity inputs. One thing about the velocity input, it dosn't change the output volume. Soundfonts sometimes use velocity-split samples, i.e. one sample for quiet notes, one for loud notes. The 'Velocity' input is used to choose the appropriate sample from the soundfont. You still need to control the sound volume externally via a VCA. Because the SF Osc is controlled from a MIDI CV, you now get access to Portamento, Mono mode, and Retrigger controls. Portamento acts a bit weird if you glide over a wide range, as the sample has to be transposed much further than usual. The sample gets seriously warped (this is not a bug, just a consequence of the pitch shifting).

Inputs:

Bank - Provides external choice of bank. NOTE: Changing bank via external control only works while audio engine is running [ 1 ,2 , ]
Patch - Provides external choice of patch. NOTE: Changing patch via external control only works while audio engine is running [ 1 ,2 , ]
Gate - Triggers the sample when greater then 0 V
Pitch - 1 Volt per Octave, 5V = Middle A
Velocity - Chooses between velocity-split samples in soundfont file (if any)

Outputs:

Left (mono)
Right

Soundfont Player

Plays standard .SF2 (Soundfont 2) samples. Currently only basic Soundfont features are supported. This is a polyphonic module, use it inside a container. Note: many soundfonts reference ROM Samples, assumed to be available on your soundard. SynthEdit doesn't have these, so you may encounter 'dead' patches in some soundfonts. Shareware such as 'Awave' can check a soundfont for ROM samples references. Use a 'Wave Player' module for wave files, *.wav

Inputs:

MIDI In
Bank - Provides external choice of bank. NOTE: Changing bank via external control only works while audio engine is running [ 1 ,2 , ]
Patch - Provides external choice of patch. NOTE: Changing patch via external control only works while audio engine is running [ 1 ,2 , ]

Outputs:

Left Out
Right Out

Step Counter

When clocked, each output in turn goes HI (5 Volts). Similar to decade counter, but can be configured to any number of outputs

Inputs:

Clock
Reset

Outputs:

Out

Step Sequencer

A simple Pattern sequencer, connect to a synth. (For playback of MIDI files, use a 'MIDI Player' module).

Inputs:

Channel - MIDI Channel [ All ,1 ,2 ,3 ,4 ,5 ...]
MIDI In - Used to Sync tempo to an external MIDI clock source.

Outputs:

MIDI Out - Connect this to a Synth. Also outputs MIDI time sync info.

Parameters:

Ignore Program Change - Prevents this responding to patch changes from 'Patch Select' module
Sync - Synchronise Timing to MIDI Input, or Self-Generate Timing [ Internal ,MIDI I ]

Sub Panel

Like a window onto a lower level panel. Use the right-click properties screen to set the 'target' container or VST

Subtract

Subtracts Input 2 from Input 1.

Inputs:

Input 1 - Input 2 is Subtracted from Input 1
Input 2

Outputs:

Output

Switch (1->Many)

Used to provide switchable signal routing, or on/off control of a patch cord. Right-click, Properties... to rename choices.

Inputs:

Choice - Chooses which output to route the input signal to. Connect to a 'List Entry' module. [ 1 ,2 , ]
Input

Outputs:

Spare Output

Switch (Many->1)

Used to provide switchable signal routing, or on/off control of a patch cord. Right-click, Properties... to rename choices.

Inputs:

Choice - Chooses which output to route the input signal to. Connect to a 'List Entry' module. [ 1 ,2 , ]
Spare Input

Outputs:

Output

Text Entry

This control is for connecting to a Text Values' type plug, (red). For example connect one of these to a Wave Out's 'Filename' input.

Outputs:

Text Out

Parameters:

MIDI Controller ID - Sets which MIDI controller this sends/responds to [ ,0 - Bank Select ,1 - Mod Wheel ,2 - Breath ,3 ,4 - Foot pedal ...]
Ignore Program Change - Prevents this control responding to patch changes from 'Patch Select' module
MIDI NRPN - Used with Controller 99 and 101 to provide user definable controllers [ 0 to 16255 ]
Show Title On Panel - Leaves control's title blank on Control Panel

Trigger to MIDI

Sends a MIDI note-on message whenever the 'Trigger' input goes over 0 Volts.

Inputs:

Gate - Triggers the Note on message
Pitch - Sets the note pitch
Velocity - Sets the note velocity
Channel - MIDI Channel [ All ,1 ,2 ,3 ,4 ,5 ...]

Outputs:

MIDI Data

Parameters:

Freq Scale - Switches between 1 Volt per Octave or 1 Volt per kHz response. [ 1 Volt/Octave ,1 Volt/kHz ]

VCA

Controls the volume of a signal. 10V is full volume. Connect an ADSR to apply a volume envelope to a sound. Has a choice of 3 response curves. See Signal Levels and Conversions for more

Inputs:

Signal - The 2 inputs are Multiplied (Ring Modulated). Then 'normalised' eg 5V multiplied by 2 V = 1V, (5 * 2 ) / 10
Volume

Outputs:

Output

Parameters:

Response Curve - In db mode: 10V to 2V gives 0 to -40db, 2V to 0v gives -40db to -70db (silence) [ Decibel ,Exponential ,Linea ]

VST Plugin

A 3rd party 'plugin' device. More about VST Pluins

Inputs:

MIDI In - MIDI Input Plug
Channel - MIDI Channel [ All ,1 ,2 ,3 ,4 ,5 ...]
Signal in

Outputs:

MIDI Out - MIDI Output Plug
Signal Out

Parameters:

ProcessReplacing Fix - Some Plugins malfunction in 'ProcessReplacing' mode. This works around the 'bug'
Data Alignment Fix - Some Plugins expect audio aligned in memory. This fixes the problem (with some performance overhead)
MIDI Automation - Enables Automation of incoming MIDI to plugin's paramters

Voice Combiner

Forces signal to be monophonic. Usefull for triggering a monophonic LFO from a MIDI CV gate signal.

Inputs:

In

Outputs:

Out

Volt Meter

Displays input voltage digitally

Inputs:

Signal in - Input signal

Parameters:

Mode - Choose between DC Average Voltage, or AC RMS Voltage Readout [ DC ,AC RM ]
Update Rate - Chooses how often the display is updated [ Regular ,Fast ]

Voltage To List

Converts a voltage to a List, allows any voltage source to control a list selection input, e.g Oscillator Waveform selection

Inputs:

Signal in - Input signal

Outputs:

List Out

Wave Player

Inputs sound from a WAVE file. You can use several at once. Wave files are 'streamed' there is no practical limit to file size. Can be triggered from a 'MIDI to CV' or 'Drum Trigger' module to play wave files under MIDI control. Wave file looping information is supported. For more sophisticated sample playback, use the 'Soundfont Player' module.

Inputs:

Gate - Triggers wave file playback
Pitch Shift - 1 Volt per Octave, 5V = Original Pitch
File Name - Enter the .WAV filename. Check the menu 'Audio - Preferences' for the default directory.

Outputs:

Left Out
Right Out

Wave Recorder

Sends it's input to a file. You can record several 'tracks' of audio to your hard disk at once.

Inputs:

Left (Mono)
Right
File Name - Enter the .WAV filename. Check the menu 'Audio - Preferences' for the default directory.

Parameters:

Format - Sets the file format when recording to disk [ 16 bit ,32 bit floa ]
Sample Time - Sets length of WAV file, in seconds
Play Wavefile - Plays sound once it is written to file (only applies to 'File' mode)
Report Stats - After writing to File, shows efficiency statistics

WaveShaper

Distorts the input depending on a 'Transfer Function' you can draw. Can be used as a distortion unit, soft clipper, waveform modifier, or control voltage transfer function (eg velocity response curve).

Inputs:

Signal In

Outputs:

Signal Out

Parameters:

Ignore Program Change - Prevents this control responding to patch changes from 'Patch Select' module

WaveShaper2

Distorts the input depending on a 'Transfer Function' you specify. e.g sinx(x) + PI. Can be used as a distortion unit, soft clipper, waveform modifier,or control voltage transfer function (eg velocity response curve). Input is limited to -5.0 to +5.0 volts.Supported Math funtions: *,/,+,-,^,sin,cos,tan,asin,acos,atan,sinh,cosh,tanh,exp,log,log10,sqrt,floor,ceil,abs,hypot,deg,rad,sgn,min,max

Inputs:

Signal In

Outputs:

Signal Out

Parameters:

Ignore Program Change - Prevents this control responding to patch changes from 'Patch Select' module

X-Mix

Mixes two signals into one.

Inputs:

Input A
Input B
Mix - Varies the mix from +5V - Input A, to -5V - Input B

Outputs:

Signal Out

Parameters:

Fade Law - Chooses different cross fade laws [ Equal Intensity (0dB) ,Equal Power(+3dB) ,Sqr Roo ]

XOR Gate

Simulated Logic Gate. Output goes high when exactly one input high.

Inputs:

Input

Outputs:

Output


Signal levels

Signal Levels and Conversions

SynthEdit is modeled after real Analog Synthesisers.

Synths were once hardware!

In a modular Synth the various modules offer many features and functions, there are no rules as to how you connect the modules (that's the fun!). As a result all modules must be compatible. This is achieved with Voltage Control. All modules respond to the same voltage range, in SynthEdit's case 10 Volts. Most module inputs have a useful range from 0.0 to 10.0.

Voltage to Pitch conversion

The Oscillator pitch is calibrated in Volts per Octave. 5 Volts plays note 'Middle A' the note in the center of a piano keyboard. (also known as 440 cycles per second, or Hertz). If you increase the input by 1 Volt, the pitch goes up one octave ( the frequency doubles to 880 Hz )...

signals2.gif (2594 bytes) chart_volt_to_hz.gif (4956 bytes) Bare wires, love it!

To convert a specific frequency to a voltage..

VtoF.gif (2218 bytes)

Frequency = 440 * 2 ^ (Volts - 5)

Voltage to Volume conversion

The amplifier works by default on a Decibel scale. A volume of 0 is silence, and 10 is full volume.

signals1.gif (2175 bytes) chart_volt_to_db.gif (4823 bytes)
This shows that an input of 10 Volts produces full volume ( 0 Decibels ), and a gain of 0 volts gives silence ( -70 decibels, very quiet).

You can choose 3 different resonse curves.

Exponential: This scale imitates the voltage drop of a discharging capacitor. Why?, many hardware synths generated their envelopes using this method, as it it similar to the decay curve of a natural sound.

chart_volt_to_exp.gif (3379 bytes)

What do they look like?, all these sounds have the same envelope settings, but different VCA modes...

Decibel mode VCA decay
signals_db_decay.gif (2845 bytes)

Exponential mode
signals_exp_decay.gif (4098 bytes)

Linear mode VCA (or Level Adjust)
signals_lin_decay.gif (5414 bytes)

Voltage to Time conversions

The ADSR envelope times are based on a 'TimeCent' scale. This is a similar concept to decibels, whereby you get finer control over the short envelope segments..

chart_volt_to_time.gif (6102 bytes)

Time = 2 ^ (Volts - 6.666666)
Volts = log(Time)/log(2) + 6.66666

The shortest time shown here at 0 Volts is around 10 milliseconds. Sometimes you may need faster envelope times, e.g. for Drum sounds. You get shorter times by using negative voltages.


Editing Commands

To insert a new module

Use the insert menu, choose the module you want. Alternate method- Right click in the main window, choose 'Insert'.

Fh707802.bmp (248514 bytes)

To connect two modules

Left click a modules 'Plug' (the coloured text on the modules), and drag a line to the destination module.

Fh707517.bmp (127650 bytes)

To delete a module

Left click it to highlight it. Press <Delete> key.

To delete a connection line

Carefully click directly on the line until it is highlighted. Press the <Delete> key.

To select several modules

Hold the shift key and click each module. Alternately: Left click above and to the left of a module and 'drag' a box around several modules.
To Toggle one module or line's selection. Hold the 'Control' key and click a module.

Connections

Some module's parameters can't be represented by a Voltage. Inputs are colour-coded to show the type of data.

Blue - Normal Audio or control Voltage signal. Connect these to other modules or a control 'Slider'.
Red - Text data, Connect a 'Text Entry' control to these.
Green - A list of values e.g. Waveform names. Connect a 'List Entry' to these.
Yellow - MIDI data

Parameters

Some modules have extra parameters. Access these by Right clicking on the module and choosing 'Properties'. You can also directly set plug's input values here. These default setting are overridden when you connect patch cords.


SynthEdit Online

To download the latest version of SynthEdit... http://www.synthedit.com

To contact the author, Jeff McClintock, email jef@synthedit.com

links don't work?, search for 'SynthEdit' on Google: http://www.google.com/


Technical Specs

Bit Depth

SynthEdit processes all signals internally at 32 bits floating point. SynthEdit outputs either 16 bit integer, or 32 bit floating point samples.

Sample Rate

Many software synths separate 'control signals' and 'audio signals'. Control signals e.g. LFO's and Envelopes are processed at a low sample rate. This saves on CPU power, but results in sluggish envelopes and 'zipper noise' (noticeable stepping clicks on fast envelopes, panning or volume fades ). You also have the hassle of having conversion modules.
To maintain sound quality, SynthEdit uses the same high sample rate for all signals. As a result SynthEdit just sounds 'cleaner' and more responsive than many other soft synths.

Latency

SynthEdit uses either 'DirectSound' or ASIO for audio output. On a fast PC, this gives good response. When using a Directsound driver, experiment with the 'Audio->Preferences->Playahead' menu to determine the best setting for your PC.

Polyphony

SynthEdit defaults to 6 voice polyphony. However you change this, up to the maximum of 128 supported by MIDI. To access a synth's polyphony setting, right click it, choose 'Properties'. VST Synths control their own polyphony.

Feedback loops

Feedback Loops are now NOT supported in SynthEdit, I hope to re-introduce the ability in a future version.


Registration

The SynthEdit registration feature is new, and is being tested at present. The beta (test) version of SE supports registration. The beta version is available at..

www.synthedit.com/beta/beta.htm (although you may prefer to wait until the testing is complete)

SynthEdit is shareware ($20 US).
To enable all of SynthEdit's features you can register online for a serial number. The registered version gives you control over the number of patches in your VST, and removes references to SynthEdit in the Plugin title and 'about box' (there's no indication it was made with SynthEdit). Registered users get free updates for version 1.1, 1.2 etc. Version 1.x will be current for 1 year. Version 2.0 will be a new purchase.

Purchase Registration Online This links to Online Registration Service - ShareIT

Please email me any problems / bugs / questions so I can fix them.

email jef@synthedit.com

License

Any sounds, music, and VST plugins you create with SynthEdit are your property to distribute freely or sell. No royalties are payable to Jeff.
You may not sell, hire or lease SynthEdit.
You need Jeff's permission to distribute SynthEdit on a magazine disk, or compilation CD.
You may not reverse engineer, decompile, or disassemble SynthEdit.
You download, install and use SynthEdit completely at your own risk.


How Does Polyphony work

SynthEdit's synths are automatically polyphonic. For this to work correctly, each synth must be in it's own container. Each container should have exactly one 'MIDI to CV' module.

To play multiple notes, SynthEdit clones (copies) the modules as needed ( you can't see the clones ). To set the Polyphony (maximum number of notes playing at once), access the container's properties (Right Click - Choose 'Properties', 'Polyphony').
'MIDI to CV' modules have a parameter 'Mono Mode', if on, this overrides the container's polyphony. Setting mono-mode is usefull for bass lines and lead sounds, where you are imitating a one-note-at-a-time instrument. Fast bass lines sound clearer without several notes blurred together. In mono mode you can use the 'Retrigger' option to make legato(overlapped) notes merge together without retriggering the filter. You can also use Portamento to slide the pitch between legato notes.

SynthEdit only clones the modules it needs to. e.g..

Here the LFO is shared by all the voices. This is because the LFO does not depend on the 'MIDI to CV' (it is not 'downstream' in the signal path). This saves CPU power. SynthEdit analyses each synth's signal flow to minimize the number of modules cloned to sound a new voice. This helps reduce the CPU load.
Voices that aren't in use don't use any CPU power.

ADVANCED NOTE: If you want one LFO per voice, you will need to connect it downstream from the 'MIDI to CV', for example you could connect the MIDI to CV 'Pitch Out' to the LFO via a 'Switch' module, then turn off the switch, you would then hear an independent LFO on EACH note you played.

Common mistake

One common mistake with SynthEdit is to place the "MIDI to CV" in it's own container.

A symptom is the Oscillator pitch jumping higher with each new note. The downstream modules are outside the 'MIDI CV's container, they arn't cloned when you play a new note. Instead the 2 note's pitches are combined before the Oscillator.


How Does Polyphony work

Translation

Want SynthEdit in your own language? Check out the SynthEdit translation page...

www.synthedit.com/translate.htm

I can't pay for translation unfortunatly, I provide this as a free service for anyone who wants synthedit in their own language. I do give credit to the translator though.


How Does Polyphony work

Questions

Why can't I use feedback paths?

It's due to the way VST, and therefore SynthEdit process audio in 'blocks'. e.g. in a typical synth, the Oscillator produces a short piece of sound (96 samples long), then passes the 'block' to the filter, which then processes the 96 samples. This carries on through the chain of modules..

Feedback in 'real' electronics is considered instantaneous. In a sample-based system, feedback is usually delayed by 1 sample. You can appreciate that in SE the filter, for example, can't feedback it's output without introducing a delay of at least 96 samples.

There are two posible solutions:

1) run the modules on blocks of 1 sample. The original SynthEdit worked this way, feedback was no problem. Unfortunately VST came along, and I re-wrote synthedit to use 'blocks' of samples. This is suposedly a more efficient way of processing samples. Forcing VST-style modules to run on 1 sample block is possible, unfortunately the CPU use is extremely high. SynthEdit would be close to unusable in real-time.

2) Allow feedback, but with the understanding that a 96 sample delay will be introduced. This would make using feedback to create physicaly-modeled sounds difficult, the time delay affects the pitch of the sound. This feature is looking like the best solution though.

On Win98, When I save-as-vst I get two files ..mysynth.dll, and mysynth.dat, how do I get rid of the dat file like other people. I'm just wondering what's the difference with Win98 there?

The Win98 kernel dosn't support the 'UpdateResource' function. It's this function SE uses to merge the .dat file into the dll file's resources. The easiest solution is to email your file to someone with Win XP, get them to compile it, then email back the dll.

Will there be a Mac version of SynthEdit?

I think Macs are great. I would love to have a Mac version, but It is not possible at present. It would involve rewriting some parts of SynthEdit. Unfortunately Jeff dosn't have a mac, and dosn't know how to program a mac. The SynthEdit source code is not open source, so the task can't be given to a 3rd party either.

I want to trigger a note from a button on my Synth's panel, but it dosn't work

Connecting a button directly to you synth's ADSR won't work as you expect. The reason is SynthEdit's CPU 'Power Saving'. When a 'MIDI CV' module finishes playing a note, it powers-off any 'downstream' modules. This saves CPU. However this prevents the ADSR responding to the button.
The Fix:
Connect a Button to a 'Trigger to MIDI' module. Connect the 'Trigger to MIDI's 'MIDI out' to the 'MIDI CV' 'MIDI in'. Now when you push the button, a MIDI command is sent to the MIDI CV, just like any other note-on. The MIDI CV then 'wakes' all the modules and starts the note.

trigg_synth_but.gif (3998 bytes)

How do I control a delay time easily, in milliseconds

To control the delay module's delay time, use it's "Modulation' input. This input can be confusing, because it's full range is -5.0 to +5.0 Volts. The delay time also depends on the "Delay Time" property (right click - Properties - Delay Time (secs)).

To set up a delay you can vary between 0 to 1 second long:

  • Connect a slider up to a Delay module's "Modulation" plug.
  • Set the Delay Time properties to 1.0

This is not ideal, it's not easy to work out the delay time from the slider, +5 V gives 1 second delay, 0 Volts give 0.5 sec delay, -5 V gives 0 Sec...

It would be much easier if 1 volt gave 1 sec delay, 0 V gave 0 sec delay.....

Add a level Multiply module, add a Subtract module, connect like so...

Set the sliders range to 1 Volt (Right click - Properties - Slider Lo Value 0.0, Hi Value 1.0)

Set the Multiply module's input2 to 10.0 (Right click - Properties - input2 10.0)

Set the Subtract module's input2 to 5.0 (Right click - Properties - input2 5.0)

Add the voltmeter, just to clarify what is happening

Rename the Modulation Slider "Delay Time" (Right-click - Properties - Title "Delay Time")

Push 'Play', experiment with the slider, when the slider is at 1.00, the Voltmeter reads 5.0 (full delay time). Slider at 0.00, the Voltmeter reads -5.00 (zero delay time). The Slider now specifies the delay time directly in seconds.

Note: To set the delay time in milliseconds, change the Multiplier input2 to 0.01, change the Slider max range to 1000

How do I use the 'Denormal Cleaner'

You computer's CPU can perform calculations to a high accuracy, it can deal with numbers as small as 1.0 e -38 (that's 0.00000000000000000000000000000000000000.1 ) to deal with even smaller numbers the CPU switches to 'denormal mode' ( calculations are even more accurate, but much slower ).
Audio applications don't need this degree of accuracy, numbers this small are completely inaudible, even on the best soundcard.
In a software synth, performing thousands of calculations, denormals are a major problem. The symptoms are sudden CPU 'spikes' and glitchy audio as a sound fades out.

The 'Denormal Cleaner' module removes denormal numbers from an audio stream. Since SynthEdit V0.74, The denormal cleaner has been integrated into serveral modules known to have denormal problems. As a result you don't need the denormal cleaner module anymore.

Voltmeter connected to MIDI-CV gives strange readings

"I Connected the Velocity out from the MIDI->CV module to a volt meter and got weird values, the voltage seems to go higher and higher instead of going low when you lift the key."

The MIDI CV is polyphonic. Although there's only one on-screen, imagine there are 6 of them, all connected to your volmeter. What should happen?...

When you first push "Play", all 6 modules output zero (Voltmeter reads "0.00"),

You play a note, the voltmeter, reads "1.0" (for example)
You play a 2nd note, the volmeter reads "2.0"
you play a 3rd note, the voltmeter read "3.0"

etc, etc.....

Why dosn't the voltage return to zero when you release the note?

Because each note takes time to fade out, the MIDI CV continues to output the same voltages as when you first hit the note...
Imagine if the pitch went to zero the instant you released a note, instead of
fading gracefullly to silence, notes would thump into a low freq buzz.

Imagine if the Velocity output went zero on note-off, if you were using
it to control the note loudness, the note would click instantly to silence,
like an organ sound.

So, when you release your finger from a key, the MIDI CV continues to output
the same pitch and velocity. ("Gate" does drop to zero instantly).

In a polyphonic synth, these voltages add up, higher and higher, untill you
reach the max polyphony.

THERE IS NO BUG.
Except perhaps that the Voltmeter is not Polyphonic, so instead of showing
you 6 readings (for 6 voices), it adds them all together, which I admit is
confusing.
If you need to take voltage reading to debug your synth, The easiest solution
is to set you synth to Mono mode. Voltage readings will make more sense. (you can
set your synth back to Polyphonic once you're done)