Diodow 32/64-bit VST Synthesizer by HrastProgrammer
This page is about my Diodow Virtual Synthesizer.
It contains less than 10% capabilities/features of it's mighty bigger brother - Tranzistow.
But don't worry, despite this 10% it has enough capabilities to keep you busy for quite some time and very complex sounds can be made with 4x oscillators, 4x filters, 4x LFOs, 4x 5-stage envelopes, 16x+16x modulation matrix, 4x delays, etc. In many cases I am reaching for Diodow instead of Tranzistow because it is simpler to work with :-)
Diodow v1 Download [32/64-bit] (unzip into the VST folder and that's it)
Copyright © 2012-2014 by HrastProgrammer. All rights reserved.
I developed Tranzistow and Diodow for myself in the first (and only) place.
My goal was not to (try to) emulate existing (hardware or software, analog or digital) synthesizers but to create something I can actually use in my own music, to master DSP/Assembler/Vector/SSE/AVX/GPU/OpenCL programming, to refresh my mathematics knowledge and, last but not least - to have fun.
As a result, the synthesizer is mostly unconventional, some features (which most users take for granted) could be missing or could look rather strange, user interface may not be everybody's cup of tea because it was designed according to my habits/needs, etc.
Scroll down the page for screenshots and more info ...
The synthesizer is fully functional and there are no disabled features ... use freely.
A fantastic free Diodow soundbank made by Ed Ten Eyck (edtaudio.com):
Those sounds can be loaded into Tranzistow synthesizer as well (only registered version, of course). A lot of them use samples in LA style and, by default, sample engine is configured for higher quality so they can be transposed over several octaves without aliasing artifacts. This uses more CPU and can lower the available polyphony. So, if you have less powerful computer and don't need transposing over several octaves you can lower the "UpSample" parameter.
Sounds are free to use in your music, you can modify them according to your needs etc. but you cannot make another soundbank or any other product derived from it!
Description of parameters, capabilities and features (parameters without description are mostly self-explanatory) ...
[*] 4x Oscillators
Diodow oscillators are based on Tranzistow Aux oscillators model. Each oscillator contains two saw waveform generators (Saw1 and Saw2) with continuous morphing between full saw and sine wave.
* FixedFreq (Hz) ... Oscillator fixed frequency.
* PulseWidth ... Controls phase distance between Saw1 and Saw2 (only if SawSigma1<>0 and SawSigma2<>0) for pulse-width modulation on all waveforms.
* SyncOsc ... Activates sync between the oscillator and internal sync oscillator (set SyncOsc to 1 for the usual sync). The frequency of the sync oscillator is fixed to the note frequency, so you can achieve a typical sync-sound by modulating oscillator pitch.
* OscRange (Hz) ... Oscillator pitch modulation range (0 => range equals Osc pitch).
* SawShape ... Controls the amount of waveshaping applied to the sum of Saw1 and Saw2.
* SawSigma1/SawSigma2 ... Saw1/Saw2 level.
For Square/Pulse waveform set SawSigma1=1, SawSigma2=-1, SawShape=0. For Ramp/Triangle waveform set SawSigma1=1, SawSigma2=-1, SawShape=0.993 or so. Mathematics behind all this is out of the scope of this manual.
* Morph ... Morphing between full saw (up or down) and sine wave. Higher morphing values (starting at around 0.7-0.8) generate stronger high-frequency harmonics which can actually produce aliasing when using lower sample rates and/or oversampling has been turned off.
* DCFilter ... DC filter at the oscillator output (my oscillator algorithm can produce DC offset in some cases, which can sometimes be desirable or undesirable and can be controlled using this parameter).
* Level ... Oscillator output level.
* Balance1-2 ... Balance between filters 1 and 2.
* Balance3-4 ... Balance between filters 3 and 4.
* FreeRun ... If activated then oscillator phase will not restart on note-on.
* Env1Mod, Env2Mod, Env3Mod, Env4Mod ... The amount of envelope => oscillator pitch modulation.
* Tracking ... Oscillator pitch keyboard tracking.
* Center ... Center note for keyboard tracking (60 = C3).
[*] Sample Engine
Oscillator section has a complete sample engine built-in. Sample oscillators are sub-modules inside main oscillators - they share common pitch/frequency parameters together with the same outputs, so they can be used in tandem with the regular oscillators, processed through Diodow engine, etc.
* SampleLoop ... One-shot (off) or sample looping (on).
* SampleLevel ... Sample oscillator output level.
* SampleFilter ... The strength of 20kHz lowpass filter applied to the sample.
* Upsample ... The rate of internal upsampling inside the sample engine. Higher upsampling = higher transposition quality and bigger CPU usage, so if you don't transpose over several octaves you can keep this value fairly low.
Diodow sample engine supports linear interpolation only and doesn't have high-quality interpolation available in Tranzistow.
The engine can load 8/16/24/32-bit PCM and 32-bit FP mono/stereo WAV files.
To load a sample click on the oscillator section name (Osc #1, Osc #2, Osc #3, Osc #4).
In case of stereo samples - if you load a sample into oscillators 1 & 3 then left left channel will be loaded, otherwise right channel will be loaded.
To remove the sample press and hold Ctrl key and click on the appropriate oscillator section name.
The oscillator section name will have an asterisk on front of it if a sample has been loaded into the connected sample oscillator.
[*] 4x Filters
Filters are based on 4-Pole Ladder model (like the ones on Oberheim Xpander, for example) and are the same as B-filters on Tranzistow with greatly reduced parameter/feature set and without the ability to freely configure filter poles.
* Cutoff (Hz) ... Well, filter cutoff. Although it can go down to 0Hz there really isn't much sense to go below 20-30Hz, otherwise you can experience excessive output level and similar artifacts with some filter configurations.
* Gain ... Input level gain.
* Qompensate ... Resonance (Q) gain attenuation compensation (may shift cutoff a bit).
* FilterRange (Hz) ... Filter cutoff modulation range (0 => range equals cutoff).
* NoiseMix ... Level of white noise mixed with oscillator output *prior* to filter.
* Level ... Filter output level.
* PostFeed ... If activated then only feedback signal will be fed into the feedback saturator, otherwise both input and feedback signals will be fed.
* Declick ... Activates declicker for the particular filter (see "Voice/Declicker" parameter).
* Env1Mod, Env2Mod, Env3Mod, Env4Mod ... The amount of envelope => filter cutoff modulation.
* Velocity ... The amount of velocity => filter cutoff modulation.
* Tracking ... Filter pitch keyboard tracking.
* Center ... Center note for keyboard tracking (60 = C3).
* Pole1Init ... Filter initialization value. Great for percussive sounds if set to a non-zero value (1 by default) but can cause clicks with some filter configurations, especially with very low cutoff (below 20Hz) and/or high resonance.
[*] 4x LFOs (Low Frequency Oscillators)
* Rate (Hz)
* Level ... LFO output level.
* Random ... LFO random output level (summed with the regular output).
* Offset ... LFO output offset.
* FadeIn (s) ... LFO fade-in time.
* Quantize ... LFO phase quantization (no further explanation - just try it ;-)
* Clocked … LFOs will be synced to host tempo when activated.
* Smooth … Smooths out the LFO shape.
[*] 4x Envelopes
* Time0/1/2/3 (s) … Envelope stage times.
* Level0/1/2/3 … Envelope stage levels.
* Time4 (s) … Release time.
* Level4 … Release level.
Each envelope stage can have it’s own curve and can continue to any other stage after finishing, so you can have loops an even use envelopes as some kind of additional LFOs.
Envelope #4 is amplifier envelope - it controls the overall duration of the voice. Of course, it can be routed to various modulation destinations but it controls the voice activity no matter what destination it is routed to.
* Legato … If activated then envelope will not restart on note-on while playing legato (only for mono voices e.g. Polyphony=1).
* FreeLFO1/2/3/4 (not an envelope parameter) … If activated then LFO phase will not restart on note-on.
* Declick ... Activates declicker for the particular envelope (see "Voice/Declicker" parameter).
* VoiceLFO1/2/3/4 ... If activated then LFO will be global.
[*] 16-Slot Modulation Matrix
Modulation rate is SampleRate/8 so, for example, at 96kHz all modulations are calculated/refreshed at 12kHz. There is another 16-slot modulation matrix which is refreshed at MIDI-rate, approx. 333 times per second. MIDI modulation matrix parameters are hidden on the modulation matrix page.
Modulation matrix is processed in groups of 4 slots (1..4, 5..8, 9..12, 13..16). To conserve CPU power only groups with at least one active slot (Destination other than None) are processed. So, don't leave unnecessary gaps between slots and allocate them sequentially from the beginning.
[*] 2x Delays
* Wet ... Level of wet (delayed) signal.
* Dry ... Level of dry (original) signal.
* TimeL/R (s) ... Delay time of left/right channel.
* FeedbackL/R ... Feedback of left/right channel.
* Damp ... Damping of the delayed signal over time.
* StereoWidth ... Stereo image width of the delayed signal.
* Input ... Level of the input signal to the delay.
* Mix ... Level of the output signal from the delay.
* Clocked … Delays will be synced to host tempo when activated.
* Serial ... Serial delay configuration.
If Wet levels of both delays are zero then delays are deactivated to conserve CPU.
By default delays work in parallel and the same signal is fed into both delays. Using Serial/Input/Mix parameters various other configurations can be achieved. To have a pure serial connection you have to set Delay #1 Input=1 & Mix=0, Delay #2 Input=0 & Mix=1 and activate Serial mode.
Due to the design of the delay engine it can start to selfoscillate if you overdo the feedback, and it will continue to oscillate even after there is no input signal present anymore. To reset the engine click at the top of the delay section.
[*] Voice/Global Parameters
* Oversample ... Internal engine oversample on/off. It doesn't make much sense to turn oversample off and degrade the sound quality, except if you have a really underpowered CPU.
* PlayNote ... You can actually play a note using this slider ;-)
Amp/Volume ... Overall voice level (prior to delays).
AmpSource ... Amplitude modulation source (Envelope #4 by default).
AmpAmount ... Amplitude modulation amount.
* Declicker ... Enables declicker for envelopes and filters. Clicks can occur under various circumstances: short envelope times combined with mono mode and/or free-running oscillators, voice stealing, playing speed and style, etc. Declicker can minimize those clicks in most cases. Use it carefully (otherwise it can create clicks when there aren't any) and don't forget that not all clicks are (always) bad ;-)
* Velocity ... The amount of velocity => amplitude modulation.
* Init ... Initialize a voice to default settings.
* Load ... Load a voice from the *.hp file.
* Save ... Save a voice to the *.hp file.
* Alt+Save ... Asks for a file name before saving ("Save As").
All voice parameters are saved to a separate files, no VST parameter handling has been used. Only Polyphony and MIDI Channel are saved as part of the VST configuration.
[*] User Interface
* Hidden parameters can be accessed by clicking twice on the page button.
* To access various parameter lists (LFO Shape, Modulation Source/Destination, etc.) just click on the parameter and a list will pop up.
* All sliders have an edit box above them => you can enter the value directly into it.
* All sliders have vertical mode => you can move a mouse vertically outside the slider area and use the whole display height for a single slider.
* Right-click on the parameter resets it to a default value.
* Double-click on the parameter name (or right-click on the parameter slider/combo while holding Ctrl key) is Undo - resets a parameter to the previous value (Undo buffer is unlimited for each parameter).
* Press and hold Ctrl key while moving a slider to activate the "microscope" mode for precise parameter adjustment.
* Many parameters have extended ranges e.g. they allow values outside the slider range. If a value falls outside the slider range then a slider will be colored red. You can enter such values directly into the edit box or you can press and hold Alt key and move a mouse outside the slider area.
* In case of "clocked" parameters (LFO rates and Delay times with Clocked activated) numbers represent notes e.g. 0.0625 = 1/16 note, 0.125 = 1/8 note, 0.25 = 1/4 note, 0.5 = 1/2 note, 1 = whole note, etc. To simplify entering of such parameters you can enter a number and press / (divide) key ... For example, 4 followed by / will give you 0.25.
By default, Diodow doesn't support VST automation because I don't use it and prefer to control everything over MIDI. But you can turn it on using Diodow.ini file:
I don't plan to provide any additional automation features beside this.
[*] Technical Details
* Requirements: 32/64-bit VST2.x host and SSE3 capable CPU.
* The complete low-level audio/processing/control/MIDI/FX engine is written in 100% Intel x86/x64 assembler utilizing SSE3 instructions for vector processing - that's the main reason why there are 4 (and multiples of 4) elements of each module (oscillators, filters, etc.) because I am processing 4 vector elements in parallel.
* 32-bit integers and single-precision floating point numbers are used for all processing as a proof that, if done correctly, you don't really need 64-bit and double-precision to achieve a high-quality sound in most cases. In fact, the only place where I had to switch to double-precision is the sample engine because I wanted sample oscillators to be able to handle large files with a high resolution.
* User interface and all other high-level tasks are written in Borland Delphi.
* The engine is optimized for 96kHz sample rate. Other sample rates can be used, of course, but 96kHz is the only officially supported sample rate. On today's machines it doesn't have much sense to intentionally degrade a sound by using lower sample rates just to save some CPU, and 192kHz is really an overkill.
[*] Tranzistow vs. Diodow
* Diodow has Single audio processing engine ... Tranzistow has Single, Dual and Quad audio processing engines (Dual comes with 2x oversampling and Quad with 4x oversampling).
* Diodow has 4x analog-modeling oscillators only ... Tranzistow has 4x analog-modeling/wavetable/spectral oscillators (Osc) with XFade/Interpolation plus 4x sine/analog-modeling oscillators (AuxOsc) and tons of additional oscillator functionality, including Waldorf Q, Microwave II/XT, MonoWave, Prophet VS, Ensoniq SQ waves/wavetables etc.
* Diodow has 4x 24dB (4-pole) Transistor-Ladder filters of older design ... Tranzistow has 4x 24dB (4-pole) Transistor-Ladder filters (both new and older design), 4x 12+24dB (2/4-pole) SVF (State Variable Filter), 2x 24dB (4-Pole) Diode-Ladder filters, 4x Comb filters, both Transistor/Diode-Ladders have normalizers, etc.
* Diodow sample engine doesn't support high-quality interpolation available in Tranzistow.
* Diodow has fixed Transistor-Ladder filter types ... Tranzistow has freely configurable Transistor-Ladder filter poles.
* Diodow has 4 LFOs ... Tranzistow has 8 (much more advanced) LFOs.
* Diodow has 4 envelopes ... Tranzistow has 8 (much more advanced) envelopes.
* Diodow envelopes have 5 stages ... Tranzistow envelopes have 10 stages.
* Diodow modulation matrix has 16 slots ... Tranzistow modulation matrix is much more advanced and has 32 slots where dedicated groups of 4 modulation slots can be run at audio/oversample rate.
* Diodow has 40+ modulation sources ... Tranzistow has 250+ modulation sources (even more with Additive/GPU engine), including audio sources which can be used as modulators.
* Diodow supports all MIDI controllers, pitch bend and channel aftertouch ... Tranzistow supports all MIDI controllers, pitch bend and channel/poly aftertouch.
* Diodow has 70+ modulation destinations ... Tranzistow has 640+ modulation destinations (even more with Additive/GPU engine), plus additional 36 SyncMod destinations and 100+ FX modulation destinations.
* Diodow supports linear modulations only ... Tranzistow has linear, exponential, logarithmic, chromatic and many other modulation curves.
* Diodow modulation rate is SampleRate/8 ... On Tranzistow this is configurable from SampleRate/256 up to SampleRate (Single), 2x SampleRate (Dual) and 4x SampleRate (Quad).
* MIDI modulation rate is approx. 333 per second on both Diodow/Tranzistow.
* Diodow doesn't have contour generators ... Tranzistow has 100 contour generators per patch/part.
* There is no FX modulation on Diodow ... On Tranzistow FX modulation is configurable from SampleRate/256 up to SampleRate.
* Diodow has only one Multi part ... Tranzistow has 4 multimode parts with separate stereo outputs for each part + main stereo output + 4 external mono inputs which can be routed freely between parts.
* Diodow can utilize only one CPU core ... Tranzistow can utilize up to 4 CPU cores in multithreading mode (one core per each multimode part).
* Tranzistow has Oscillator FM (Osc and AuxOsc), Filter FM (Ladder and SVF), 4x Ring Modulators, various forms of waveshaping (including 4x Driver, 4x Shaper and feedback curves on all filters), dedicated 4-bus Mixer (each with 4 inputs), Colored Noise, 4x Vectors, 4x Rotors per each audio/modulation generator (Main/Aux oscillators, mixers, LFOs, envelopes, modulation matrix, etc.), 16-slot NoteOn Modulation Matrix, 4-slot NoteOff Modulation Matrix, 4x Modifiers, 4x Sync Modulators, 4x Lag Processors, External Audio Processing, 2x Phasers, 2x Reverbs, etc, etc.
* Diodow doesn't support external control interface and doesn't have a native support for Behringer BCR2000 controller.
* Diodow doesn't have randomizer.
* Diodow does not support Additive/GPU engine.
* Many features are cut-down on Diodow and, in global, it contains less than 10% of Tranzistow capabilities.
Look at the images here to get a better Tranzistow picture ...
[*] Known Issues
* Tab key doesn't work in some hosts, or doesn't work properly, like in Reaper, for example - Tab selects prior edit control and Shift+Tab selects next ... This is out of my control and I cannot do anything about it.
[*] Final Notes
* If you don’t like then don't use it, simple as that ;-) I really don't have the time and patience to argue about something someone doesn't like, or whether "it is or isn't analog enough" etc.
* I've done my best to make it 100% compatible with the VST specification but if it still doesn't work (or doesn't work well) under some VST hosts then - sorry. There are tons of various VST hosts out there and the exploration of all sorts of VST hosts quirks is almost "mission impossible".
* [Doesn't really apply anymore] There are no presets included - my synthesizers are aimed at sound programmers, not preset players. If you don't know how to design/program sounds then this synthesizer is not for you, I am afraid.
* The synthesizer is "feature finished" - no new features will be added so, please, don't ask for a new feature, user interface changes, VST3 support, additional VST automation support, VST preset management, etc. I also don't have any plans to support AU, AAX, RTAS or any other platform beside VST.
* I am not responsible for anything you do with this software - use it at your (and only your) own risk!
* You may not alter this software in any way, including changing or removing any messages.
* You may not decompile, reverse engineer, disassemble, modify, rent or resell this software, or create derivative works based upon it.
Copyright © 2012-2014 by HrastProgrammer. All rights reserved.