HrastProgrammer HrastWerk Bandcamp Bits & Bytes New! Tranzistow Hot! Diodow Emulators

Diodow Virtual Software Synthesizer by HrastProgrammer

This page is about my free Diodow Virtual Software Synthesizer. It contains around 5% capabilities/features of it's mighty bigger brother - Tranzistow. But don't worry, despite those 5% 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.

Diodow v1 Windows VST 2.x Download [ZIP file with both 32/64-bit versions] (unzip into the VST folder and that's it)

Starting with build 16.08.2016/1, Diodow is available on Linux in the form of 32-bit and 64-bit standalone audio applications as well as experimental Linux native VST 2.x libraries:

Diodow v1 Linux Standalone / Experimental Native VST 2.x Download [ZIP file with both 32/64-bit versions]
(unzip into some folder and that's it, scroll down the page for more info about Linux version)

Due to various reasons which I will eventually explain one day (mainly - my irritance and disappointment with tons of hosts quirks and limitations which I don't want to tolerate anymore) experimental native VST versions are implemented as client/server combo where the client is a 32/64-bit VST .so library and the server is a separate 32/64-bit standalone Diodow synthesizer application.

Copyright © 2012-2016 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.

Diodow bank with 100 patches made by Ed Ten Eyck (already included into above downloads):

Diodow Patches by EDT [ZIP file]

Those patches can be loaded into Tranzistow synthesizer as well. 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.

Patches 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.


* Semitone

* Detune

* 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.

Hidden parameters:

* 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.

Hidden parameters:

* 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.


* Type

* 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.

* Resonance

* 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.

* Pan

* 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.

Hidden parameters:

* 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)

* Shape

* 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.

Hidden parameters:

* 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.

Hidden parameters:

* 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

* Source

* Destination

* Amount

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.

* Polyphony

* MIDIChannel

* 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.

Hidden parameters:

* 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.

[*] Buttons

* 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.

[*] Automation

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 Windows 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 properly, you don't need 64-bit and double-precision to achieve a high-quality sound. 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 and Free Pascal / Lazarus.

* 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. Most high-end hardware synthesizers (like Solaris, for example) use 96kHz sample rate as well, so I didn't want to make compromises here. On today's computers 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.

* Oscillator sync is much more advanced on Tranzistow and there are two sync modes with inter-oscillator syncing ability.

* 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 loopable stages ... Tranzistow envelopes have 10 loopable 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 340+ modulation sources, 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 940+ modulation destinations (even more with Additive+FM/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 with various editing/resynthesis options together with four .

* Tranzistow now has four user-definable wavetables per patch, each containing from 1 to 128 individual waves with size of up to 256 samples, bandlimiting and interpolation of missing waves.

* 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 main and 4 sub multimode parts with separate stereo outputs for each main/sub pair + main stereo output for all parts + 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 main 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 does not support Additive+FM/GPU engine.

* Many features are cut-down on Diodow and, in global, it contains around 5% 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.

[*] Linux Notes

In order to use Diodow you need 32-bit or 64-bit Linux with at least GTK2 version 2.8 installed (GTK3+ is not supported yet). I recommend 64-bit Ubuntu Studio distribution as the best one currently available, IMHO. There is no Diodow installation per se - just unpack the ZIP archive into some folder and that's it. Diodow use ALSA, Jack or PortAudio/PortMIDI to communicate with audio and MIDI hardware, so you must have correct driver and firmware installed for the sound card you intend to use. You need libasound2 as well, although I suspect it is already installed together with ALSA. By default, Diodow will connect to "hw:0,0" audio device and "hw:0,0" MIDI device, but this can be changed through configuration/INI files. If you intend to use Jack then you must have Jack installed and configured properly, of course. The same with PortAudio/PortMIDI.

Diodow will search for Diodow.ini configuration file in /home/<UserName>/.config/Diodow folder (replace <UserName> with your Linux user name). If it doesn't find one there, it will search in a folder where Diodow application has been copied and run from. You can open Diodow.ini using a regular text editor and configure the following sections/options:

Driver=ALSA | Jack | PortAudio ; Audio driver to use (default: ALSA)
Device=... ; ALSA audio device to use with Diodow (ALSA only, default: hw:0,0)
SampleRate=... ; Sample rate to use (ALSA only, default: 44100)
BufferTime=... ; Size of cyclic audio buffer in milliseconds (ALSA only, default: 20)
FrameTime=... ; Size of one audio frame in milliseconds (ALSA only, default: 10)
Resample=0 | 1 ; Turn automatic ALSA resampling on/off (ALSA only, default: 0)
Format=16 | 24 | 32 ; Set the format / number of bits for audio data (ALSA only, default: 16)
Oversample=0 | 1 ; Turn internal Diodow 2x oversampling on/off (default: 0)

Device=... ; ALSA MIDI device to use with Diodow (ALSA only, default: hw:0,0)
Tempo=... ; Fixed tempo in BPM or 0 for automatic synchronization to incoming MIDI clock (default: 125)
TempoSmooth= ... ; Smooths out tempo changes when synchronizing to incoming MIDI clock (default: 0)

ClientName=... ; The name of Jack client (default: Diodow)
ServerName=... ; The name of Jack server (default: None)

AudioLibrary=... ; The name of PortAudio library (default:
AudioDevice=... ; The name of audio output device (default: None = default device)
InputDevice=... ; The name of audio input device (default: None = output device)
AudioBufferSize=... ; Size of audio buffer (default: 512)
MidiLibrary=... ; The name of PortMIDI library (default:
MidiDevice=... ; The name of MIDI input device (default: None = default device)
MidiBufferSize=... ; Size of MIDI buffer (default: 256)

Note: PortAudio/PortMIDI device names are not the same as ALSA device names!

Other configuration options are the same as described in previous sections.

To avoid unnecessary ALSA resampling, it is much better to match the requested sample rate to be the same as driver-supported one.

Configuration example:




Note #1: Upper/lower cases are important in all file names and paths because I am not really a fan of lowercase-only names. If an operating system has been designed with case sensitivity in mind then both upper and lower case should be used in my opinion.

Note #2: Configuration file should be writeable because Diodow will use it to store various data like window position, patch names/paths and MIDI channels for all parts, etc.

Linux version will sound, look and work more-or-less exactly like the Windows one, with the following exception:

* No parameter automation in either standalone and experimental native VST versions.

Everything else is the same and almost everything written in this document applies to Linux version as well. All patches are interchangeable between versions too. BTW, despite the equal look and functionality on Linux and Windows, both Tranzistow and Diodow are native Linux GTK2 applications which don't use Wine or WineLib at all.

[*] Final Notes

* I developed the synthesizer for myself and it probably won't appeal to everyone, but I cannot do anything about this, I am afraid.

* 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".

* 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.

* Only 32/64-bit Windows VST 2.x, Linux standalone and experimental Linux native VST 2.x versions are currently available. No other versions (VST 3.x, Mac, AU, RTAS, AAX, dumbphones and similar) are planned at the moment.

* 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-2016 by HrastProgrammer. All rights reserved.

All content (audio, graphics, software, etc.) on this and related websites is fully copyrighted. You can download the music for your personal listening only, but you cannot redistribute it, modify it, sample it, sell it, release it, perform it, broadcast it, stream it, or use it in any other way, commercially or non-commercially, personally or in public, without my explicit written permission!