Goal of the software is to reproduce sounds of strings, organs, flutes
and drums in real time. The sound generation is based on the physics of
the instruments. That means all sounds created by this software are the
result of a mathematical model based on some physics about how the sounds
shape varies in time. You have access to most of the models parameters
through a graphical interface. Further more most of the parameters can
be controlled by MIDI controllers.
The intro of version 1.6.2 is some years old and CPU performance has
increased alot. RTSynth is now developed on an AMD Athlon XP1700+ based
PC. Here are some benchmarks for the effects measured on my machine:
|RTSynth v1.9.0 benchmarks on Athlon XP 1700+ with frame
buffer size of 128:
: 8.6 mS, NURT 3365
All together : 2359 mS, NURT 12
NURT: number of units playable in realtime at 44100Hz, stereo.
And yes i tried the above number. My machine can play even more than
the given 12 complete effect panels;)
Anyway from the numbers above RTSynth should still be usable on a Pentium 200 like system.
To perform well, RTSynth should be set to userid root with `chown root
RTSynth; chmod +s RTSynth`. This will allow RTSynth to use the real
time scheduler for best run time behaviour. After getting the scheduler
RTSynth is setting back its root priority to the normal users one.
To make the choice of the MIDI input source as flexible as possible, RTSynth can read midi events from a input stream. This can be a device, a pipe (stdin) or a named pipe (fifo).
Possible command line invocations:
RTSynth normal execution. Reading midi events from /dev/midi00.
RTSynth -o /dev/mydev use the given audio output device (must be a OSS /dev/dsp compatible device).
RTSynth -i /dev/mido
RTSynth </dev/mymidi to read from a given midi device
cat foo | RTSynth
to read midi events form a fifo or pipe.
I have tried to use EsounD as an alternative audio output destination, but the current version of esound does not support real time audio. To be more detailed, the audio stream esound opens for RTSynth to write to does not offer a constant rate of samples per second like the /dev/dsp device. Maybe ALSA will become the future of audio and midi subsystems for Linux, but I did not take a closer look on it so far, maybe when upgrading to linux 2.2 ...
If you don´t have a midi keyboard (like I am) or any other external midi equipment, you can use clavier to put you computer keyboard into a midi one. The necessary command lines to connect clavier with RTSynth would look like:
clavier -o /tmp/midififo
or you can use SoftWerk
a cool software "analogue" sequencer to trigger RTSynth.
Known bugs: Overdriving the PM-resonator effect to hard may crash
the effect. You have to restart RTSynth to get it work again. The flute
synth may also crash when using some extreme settings. Loading of corrupt
patch files may break down RTSynth completely.
The blue edition reached another milestone on its way to version 2 -> version 1.9.0.
New release version 1.8.0 (code name "blue") is available for download.
"Renovated" the quite old DSP core a little bit to fit to modern CPUs by removing lookup-tables and replacing approximations by their exact formulas.
BugFix: eliminated problems with reading from /dev/midi on linux 2.2.x based systems.
BugFix: eliminated problems with reading from /dev/midi on linux 2.2.x based systems.
BugFix: eliminated problems with reading from /dev/midi on linux 2.2.x based systems.
Changed handling of midi NoteOff events -> eliminating possible multiple playing of the same note.
Added new main-panel. You can now run several synth-/effect-modules and connect them together.
Improved and scale-able reverb effect.
minor bug fixes and runtime optimizations.
Version 1.6.0 is the first glibc based version. Advantages over the older 1.5.x versions are:
With in the main panel you can:
Every Synth- and Effect-modul is represented by a tile:
You can set the
midi channel and switch on/off a audio module directly from the tile by
using the control elements shown in the picture.
Pressing the left mouse button on the audio output symbol and dropping it over the target tile will build a connection. Doing the same process between already connected modules removes the connection.
Left/right mouse button over the midi channel field decrements/increments the channel value.
Circular connections between modules are not allowed and will be rejected by the program.
Pressing the right mouse button opens a context menu.
Any module with a output that is not explicitly connected to another
one is connected to the main output by default.
as the name suggests this synth is mainly designed to produce string like sounds. But it is not limited to that. You can also use the string synth for example to produce a sinus wave sound or together with the resonance able low pass filter some cool synthetic sounds. It is a polyphonic synthesizer with up to 24 independent voices based on the so called `physical modelling synthesis´. Because the base algorithm does not have much to do with the physics of a real string instrument (the interaction between the string, the instrument corpus and the players fingers are much to complex to be calculated on a PC in real time), I call it the `energy dissipation model´. The maximum number of playable voices of course depends on the speed of your machine, synthesizer settings like filters and the number and type of activated audio effects.
To become familiar with the synthesizer settings you may try out some of the synth voices included in the archive. A small example starting with a synth produing a sine wave, as mentioned above, and then modifing it to went into a "SynthBass" sound is given here:
1. We want a clean sinus wave -> Wave ampl. = 1, Wave type
2. The sine wave should have a constant amplitude. This is meet by setting all damping parameters in the Energy dissipation panel to "no damping" -> frequency = 1, freq max = 1, filter follows note = no, feedback = 1, filter attack = 0, off-delay = 0. It is a little bit hard to set the feedback to a value of exact 1.00, soft damp. can help in do it for you by setting it to a value greater zero.
3. Normally a sinus sound needs no output filter but as you can hear on some notes there is some noticeable distortion. To reduce it we use the Output filter with filter follows note = lin, frequency = 1 (filter any frequency higher than the base octave), bessel, 12 dB. You may also use a small resonance value (0.1) to get a even sharper filtering.
4. Now, we want to apply a conventional amplitude envelope to the sinus wave to get a short percussive sound. The Output filter envelope can be used for that -> env mode = normal, env ampl. = 0 (we don't want a filter sweep), env speed = 1 (fastest attack), env sustain = 0 (no sustain at all), env release = 0.2 (short sound). And last but not least in the Output and note controlpanel the ampl-env must be activated.
5. We modify the sound now a little bit. For the wave type we choose an unfiltered rectangular wave (crect) an apply an output filter envelope by setting env ampl. to 1.4 and to make the sound a bit more interesting we apply a value of 0.3 to the output filter resonance. To apply note velocity to the filter sweep amplitude we switch the env mode to accent., to ampl. if we want the note volume to be independent from the note velocity, and to speed if our intention is to modulate the envelope speed by the note velocity. To have a sustained sound again we can switch the ampl-env off.
6. to produce a more string like sound we switch the output filter to off, the ampl-env to off. Set the Wave ampl. to 0.5, the Random filter frequency to 0.53, its filter follows note mode to "cool" and let Energy dissipation do the decay stuff by setting: frequency = 0.68, freq max = 0.89, filter order = 1, filter follows note = "cool". To have a slowly decayed sound off delay = 30, off-feedb. = 0.998 for example can be set.
7. now we switch the Output filter on again to have a some what different "SynthBass" sound than in Step 5.
The String Synth panels:
The string synth panel is subdivided into smaller panels sorted by functionality.
This together with Random Filter and Additional wave is the "heart" of the synthesizer. Here you can set the parameters for the time dependent behaviour of the oscillator like frequency dependent damping, cut off frequency ...
The random filter is used to filter the noise source output and may also be used to filter the output of the additional wave. The filtered random noise together with an additional wave are used to initialize the oscillators starting wave form. The usage of a random noise amount to produce a wave form makes the sounds generated by the string synth quite different form the static sounds generated by sample based synthesizers. Like for a real string instrument the produced sound will never be exact the same even when playing the same note.
In addition to the noise source the output of the additional wave unit can be used to build the starting wave form. This panel includes a mixer for the balance between the random noise and the additional wave amplitude.
Here the generated wave can be filtered by a resonance able low pass filter.
Output filter envelope
Settings for an output filter and/or amplitude envelope can be done here. Each String Synth voice has only one envelope generator but it can be used for output filter and amplitude modulation.
Output and note control
Sound volume, amplitude attack, decay, amplitude envelope and more can be set here.
Energy dissipation panel
|frequency||Cut off frequency used for frequency dependent energy dissipation (damping by successive low pass filtering). This one together with `feedback` give you basic control over the time dependent character of the generated sound. (short, sustained, ...)|
|freq. max||Highest cut off frequency. A value of 1 is equal to infinite.|
|filter order||Setting the damping rate of the energy dissipation
low pass filter.
order : 1 <=> 6 dB, 2 <=> 12 dB, ...
|filter follows note||no||fixed filter frequency.|
|yes||filter frequency follows note value. Higher note gives higher cut off frequency.|
|cool,usr1,usr2||filter follows note value non linear.|
|feedback||Frequency independent energy loss. ( 1 = no damping )|
|soft damp||Starting with the value given by `feedback`. Reduce damping until a feedback value of 1 is reached. If ´off delay´ is in use the ´off-feedb.´ value will be used after the ´off delay´ time has been reached. A value of zero means, disable "soft damping".|
|filter attack||Attack time is given in number of periods. (´fixed time´ off). A value of zero means disable ´filter attack´. At the end of ´filter attack´ time the filter frequency value given by ´frequency´ is reached.|
|fixed time||Interpret the number given in ´filter attack´ as a fixed length time, independent of the note value.|
|start freq||The frequency of the energy dissipation filter used by the ´filter attack´ as the starting value.|
|off delay||Time in periods until the ´feedback´ value is replaced by the ´off-feedb.´ value. A value of zero means, disable ´off-feedb.´.|
|off-feedb.||Damping value used after the time given by ´off delay´ has been exceeded.|
Random filter / Additional wave panels
|frequency||Cut off filter frequency used for the noise source and wave given by the Additional wave panel.|
|filter follows note||For description take a look at Energy dissipation panel.|
|Wave ampl||Mixer for the amplitudes of the wave given by ´Wave type´ and the filtered noise source. A value of zero means only noise and a value of 1 only wave as source.|
|Wave type||The wave type. The choices "crect", "csaw" and "ctri" are the same
as their counterparts without the leading "c" but will not go through the
"piano", "piano2", "metal" and "sawres" are a little bit more complex wave types and functions.
|cont level||Amount of continous energie that flows into the system.|
|cont flow||Enable continous energie flow.|
|clean flow||When enabled the amount of energie has the "clean" time shape of the selected ´Wave type´.|
Output filter panel
|frequency||Cut off frequency of the low pass filter. This value can be altered in real time by the midi pitch bend.|
|resonance||Amount of filter resonance.|
|filter type||critical||critical filter characteristics.|
|bessel||filter with Bessel characteristics.|
|butterw||" " Butterworth "|
|tscheby||" " Tschebyscheff "|
|tscheb3||ditto with 3 dB cut off resonance.|
|NOTE: The filter types are only correct for filters without resonance.|
|filter order||off||filter off.|
|6, 12 , 24 dB||Low pass filter with the given damping.|
|+12, +24 dB||Mix of filtered and unfiltered output.|
|filter follows note||no||filter frequency is fixed.|
|lin||filter frequency follows note. A value of 1 means same octave as the played note, value = 2 one octave higher ... NOTE: This values are only approximate.|
|usr||filter frequency follows note value non linear.|
Output filter envelope panel
|env mode||off||no filler/amplitude envelope. (saves lots of CPU time)|
|normal||envelope speed and amplitude are independent from note velocity.|
|accent||envelope amplitude depends on note velocity.|
|acc.inv||ditto but with inverse dependency.|
|ampl.||like accent but the note velocity only affects the envelope not the volume of the played note itself.|
|a. inv||ditto but with inverse dependency.|
|speed||like ampl. but now the envelope speed depends on the note velocity, note volume is constant.|
|s. inv||ditto but with inverse dependency.|
|env ampl||The amplitude of the envelope. Setting this value to zero will disable the filter envelope but has no influence to the amplitude envelope behaviour.|
|env speed||The attack speed of the envelope. A value of 1 means no attack phase.|
|env sustain||The sustain time of the envelope.|
|env release||The release speed of the envelope.|
Output and note control panel
|volume||The amplitude of the played sound.|
|attack||The attack time of the amplitude envelope. A value of zero means no amplitude attack.|
|release||The release time of the sound after receiving the `midi note off` event.|
|silence||The number of "silence" played periods of the sound. Will normally give a more soft attack sound.|
|LFO freq.||The frequency of the amplitude envelope LFO.|
|LFO ampl.||The amplitude of the LFO. A value of zero disables the LFO.|
|dc-filter||A filter to reduce the DC part of the generated sound. Normally not needed.|
|ampl-env||When set, the "Output filter envelope" can also be used as a input for the amplitude envelope.|
|modulation||Some kind of modulation applied to the sound.|
|bass boost||This will boost the amplitude of low frequency notes.|
|auto pan||Adds a stereo placement to the sounds.|
|lin velocity||Selects a linear MIDI velocity to amplitude mapping.|
This is a monophonic synth. It implements the ´base clarinet´ and the ´base flute´ algorithms with some small extensions and modifications. Since version 1.8.0 the flute synth has become really usable. The tuning is now fine and instabilities as found in older versions have gone away ;)
Pressure - tremolo
RTSynth has seven hard wired audio effect units.
Effects in order of their connection:
The distortion effect has a soft mode, emulation of a tube like distortion, and a normal mode for a transistor like distortion.
This universal filter can be used as a LP, HP or BP filter. The filter order can be set from 6 dB to 24 dB. It also supports a simple filter sweep function.
The PM resonator gives you the possibility to add a "body" to your sounds.
It is a multi resonator with a non linearity on higher input levels. As
you can see from the "PM resonator" panel/table, this effect has alot of
settings to play with ;) Just as in real life you can tune the PM resonator
in such a way that some notes will sound "dead", so be careful ... but
usually the PM resonator is a good friend in making your sounds more reach
Please use one of the settings from the presets as an starting point to get somewhat familiar with this effect.
|feed||Amount of feed back. The resonator will start to oszillate when set to high values. (good values are around 0.5) High values may be useful in finding a resonance mode setting.|
|feedfreq||Controlls decay of high frequencies and therefor the sound characteristics of the effect. Real physical resonators like a guitar body have a fast decay of high frequencys. Anyway a very low value will supress any resonance on higher notes.|
|Intensity||Here the amount of the continous "energie flow" through the resonator, which is necessary to get some resonance, can be set. Good values are 0.6-0.8. Other values may give higher non linear effects.|
|Input gain||This effect has a limit for the maximum input value. Before this limit is hit the effect becomes more and more non linear. The input gain control allows you to down/up scale the input value. Be careful at very low gain values the movement of other sliders can generate quite loud noises as in this case the output gain is set automatically to very high values.|
|efx vol.||The volume of the effect.|
|efx only||When switched on only the effects signal will pass through but not the original one. Properly interesting when cascading several resonators.|
|reso. mode||A value of 1.0, 0.5, 0.25, ... will result in a resonator which most likely will resonate at its base frequency and all otcaves where smaller values will prefer the use of higher octaves... but thats not what we normaly want to have. We can achieve to have a resonator with much more resonance modes by choosing any other values. Good starting points are to move the mode value slightly out of tune :)|
|mode fine||Fine tune of current reso. mode value (+/- 15%).|
|scale x20||Multiplies reso. mode by value of 20.|
|frequency||The base resonance frequency of the resonator in Hz.|
|freq. fine||Fine tune base resonance frequency (+/- 10%).|
This is an equalizer with a bank of five band pass filters. Setting a filter to a value of zero disables this filter and therefor saves CPU time.
The well known chorus effect.
A simple reverb effect. In stereo mode two reverbs, one for each channel, can be mixed to give a more complex effect.
The delay effect can operate in stereo mode to give a ping-pong like