Dsp tonewheel organ
setBfree [ OPTIONS ] [ property=value ... ]
setBfree - DSP tonewheel organ
setBfree is a MIDI-controlled, software synthesizer designed to imitate the sound and properties of the electromechanical organs and sound modification devices that brought world-wide fame to the names and products of Laurens Hammond and Don Leslie.
-c <filename>, --config <filename>
Load alternate config file over default
-C, --noconfig
Do not read the default configuration file the equivalent built-in defaults are still set
-d, --dumpcc
Print a list of MIDI-CC mappings on startup
-D, --noCC
do not load default CC map on startup
-h
Print short help text
-H, --help
Print complete help text with parameter list
-M <filename>, --midnam <filename>
export current controller mapping to .midnam file
-p <filename>, --program <filename>
Load alternate program file over default
-P, --noprogram
Do not read the default program file the built-in programs are cleared as well
-r, --randomize
Randomize initial preset (whacky but true)
-V, --version
Print version information
The configuration consists of two parts: program (pgm) and config (cfg).
The static configuration of the properties of the instrument is defined in a .cfg file. There is no need to specify a config-file, as all configurable parameters have built-in default values. They can be overridden on startup using 'property=value' pairs or by loading a specific .cfg file. As the name /static/ implies, the properties can only be set on application start. Yet many of the properties merely define the initial value of settings which can later be modified during playback. The ones which can be dynamically modified are marked with an asterisk (*)
Properties are modified by sending MIDI Control-Commands (CC) to the synth. The mapping of CCs to function can be modified by setting the "midi.controller.{upper|lower|pedal}.<CC>=<function>" property. Function-names are equivalent to property-names. e.g. "midi.controller.upper.22=overdrive.outputgain" assigns the overdrive-gain to MIDI-CC 22 on MIDI-channel 1 (upper) (Note: each function can assigned only once, however MIDI-CC can be re-used and trigger multiple function at the same time.)
The program basically defines 'shortcuts'. Loading a program is usually equivalent to sending a series of CC. Programs are commonly used to define instruments (e.g. draw-bar settings to mimic a flute) or provide scalepoints (e.g. reverb=64). There are a few special commands which are only available by recalling a program (randomize settings, split-manuals, enable overdrive).
Programs are defined in a .pgm file and are fixed after starting the application. They are activated by sending MIDI-program-change messages (also known as 'presets') MIDI-banks are ignored. So at most 127 programs can be specified.
At startup 'default.cfg' and 'default.pgm' in $XDG_CONFIG_HOME/setBfree/ (default: $HOME/.config/setBfree/) are are evaluated if the files exist, unless '--noconfig' or '--noprogram' options are given. An additional config or program file can be loaded using the '-c' and '-p' option respectively.
Example config: "/usr/share/setBfree/cfg/default.cfg"
Example program: "/usr/share/setBfree/pgm/default.pgm"
Below is a list of available property-value pairs and their default values. The default value is omitted "(-)" for properties which contain an array of values.
The type identifiers are: 'S': text-string, 'I': integer, 'F': float, 'D': double-precision float.
Properties marked with an asterisk (*), are available as MIDI CC functions. When used as CC, the values 0-127 (MIDI data) is mapped to a range of values appropriate to the function. In config-files or on the command-line you must you the type as specified e.g. "osc.temperament=gear60 osc.wiring-crosstalk=0.2"
midi.driver
S ("jack")
The midi driver to use, 'jack' or 'alsa'
midi.port
S ("")
The midi port(s) to auto-connect to. With alsa it's a single port-name or number, jack accepts regular expressions.
jack.connect
S ("system:playback_")
Auto connect both audio-ports to a given regular-expression. This setting is ignored if either of jack.out.{left|right} is specified.
jack.out.left
S ("")
Connect left-output to this jack-port (exact name)
jack.out.right
S ("")
Connect right-output to this jack-port (exact name)
midi.upper.channel
I (1)
The MIDI channel to use for the upper-manual. range: [1..16]
midi.lower.channel
I (2)
The MIDI channel to use for the lower manual. range: [1..16]
midi.pedals.channel
I (3)
The MIDI channel to use for the pedals. range: [1..16]
midi.controller.reset
I ("-")
Clear existing CC mapping for all controllers (if non-zero argument is given). See also -D option.
midi.controller.upper.<cc>
S ("-")
Speficy a function-name to bind to the given MIDI control-command. <cc> is an integer 0..127. Defaults are in midiPrimeControllerMapping() and can be listed using the '-d' commandline option. See general information.
midi.controller.lower.<cc>
S ("-")
see midi.controller.upper
midi.controller.pedals.<cc>
S ("-")
see midi.controller.upper
midi.transpose
I (0)
global transpose (noteshift) in semitones.
midi.upper.transpose
I (0)
shift/transpose MIDI-notes on upper-manual in semitones
midi.lower.transpose
I (0)
shift/transpose MIDI-notes on lower-manual in semitones
midi.pedals.transpose
I (0)
shift/transpose MIDI-notes on pedals in semitones
midi.upper.transpose.split
I (0)
noteshift for upper manual in split mode
midi.lower.transpose.split
I (0)
noteshift for lower manual in split mode
midi.pedals.transpose.split
I (0)
noteshift for lower manual in split mode
pgm.controller.offset
I (1)
Compensate for MIDI controllers that number the programs from 1 to 128. Internally we use 0-127, as does MIDI. range: [0,1]
osc.tuning
D (440.0)
range: [220..880]
osc.temperament
S ("gear60")
one of: "equal", "gear60", "gear50"
osc.x-precision
D (0.001)
set wave precision. Maximum allowed error when calulating wave buffer-length for a given frequency (ideal #of samples - discrete #of samples)
osc.perc.fast
D (1.0)
Fast Decay (seconds)
osc.perc.slow
D (4.0)
Slow Decay (seconds)
osc.perc.normal
D (1.0)
Sets the percussion starting gain of the envelope for normal volume; range [0..1]
osc.perc.soft
D (0.5012)
Sets the percussion starting gain of the envelope for soft volume. range [0..1[ (less than 1.0)
osc.perc.gain
D (11.0)
Sets the percussion gain scaling factor
osc.perc.bus.a
I (3)
range [0..8]
osc.perc.bus.b
I (4)
range [0..8]
osc.perc.bus.trig
I (8)
range [-1..8]
osc.eq.macro
S ("chspline")
one of "chspline", "peak24", "peak46"
osc.eq.p1y
D (1.0)
EQ spline parameter
osc.eq.r1y
D (0.0)
EQ spline parameter
osc.eq.p4y
D (1.0)
EQ spline parameter
osc.eq.r4y
D (0.0)
EQ spline parameter
osc.eqv.ceiling
D (1.0)
Normalize EQ parameters.
osc.eqv.<oscnum>
D (-)
oscnum=[0..127], value: [0..osc.eqv.ceiling]; default values are calculated depending on selected osc.eq.macro and tone-generator-model.
osc.harmonic.<h>
D (-)
speficy level of given harmonic number.
osc.harmonic.w<w>.f<h>
D (-)
w: number of wheel [0..91], h: harmonic number
osc.terminal.t<t>.w<w>
D (-)
t,w: wheel-number [0..91]
osc.taper.k<key>.b<bus>.t<wheel>
D (-)
customize tapering model. Specify level of [key, drawbar, tonewheel].
osc.crosstalk.k<key>
S (-)
value colon-separated: "<int:bus>:<int:wheel>:<double:level>"
osc.compartment-crosstalk
D (0.01)
crosstalk between tonewheels in the same compartment. The value refers to the amount of rogue signal picked up; range: [0..1]
osc.transformer-crosstalk
D (0)
crosstalk between transformers on the top of the tg; range: [0..1]
osc.terminalstrip-crosstalk
D (0.01)
crosstalk between connection on the terminal strip; range: [0..1]
osc.wiring-crosstalk
D (0.01)
throttle on the crosstalk distribution model for wiring; range: [0..1]
osc.contribution-floor
D (0.0000158)
Signals weaker than this are not put on the contribution list; range: [0..1]
osc.contribution-min
D (0)
If non-zero, signals that are placed on the contribution have at least this level; range: [0..1]
osc.attack.click.level
D (0.5)
range: [0..1]
osc.attack.click.maxlength
D (0.6250)
range: [0..1]. 1.0 corresponds to BUFFER_SIZE_SAMPLES audio-samples
osc.attack.click.minlength
D (0.1250)
range: [0..1]. 1.0 corresponds to BUFFER_SIZE_SAMPLES audio-samples
osc.release.click.level
D (0.25)
range: [0..1]
osc.release.model
S ("linear")
one of "click", "cosine", "linear", "shelf"
osc.attack.model
S ("click")
one of "click", "cosine", "linear", "shelf"
scanner.hz
D (7.25)
range: [4..22]
scanner.modulation.v1
D (3.0)
range: [0..12]
scanner.modulation.v2
D (6.0)
range: [0..12]
scanner.modulation.v3
D (9.0)
range: [0..12]
overdrive.inputgain
F* (0.3567)
This is how much the input signal is scaled as it enters the overdrive effect. The default value is quite hot, but you can of course try it in anyway you like; range [0..1]
overdrive.outputgain
F* (0.07873)
This is how much the signal is scaled as it leaves the overdrive effect. Essentially this value should be as high as possible without clipping (and you *will* notice when it does - Test with a bass-chord on 88 8888 000 with percussion enabled and full swell, but do turn down the amplifier/headphone volume first!); range [0..1]
xov.ctl_biased
F* (0.5347)
bias base; range [0..1]
xov.ctl_biased_gfb
F* (0.6214)
Global [negative] feedback control; range [0..1]
overdrive.character
F* (-)
Abstraction to set xov.ctl_biased_fb and xov.ctl_biased_fb2
xov.ctl_biased_fb
F* (0.5821)
This parameter behaves somewhat like an analogue tone control for bass mounted before the overdrive stage. Unity is somewhere around the value 0.6, lesser values takes away bass and lowers the volume while higher values gives more bass and more signal into the overdrive. Must be less than 1.0.
xov.ctl_biased_fb2
F* (0.999)
The fb2 parameter has the same function as fb1 but controls the signal after the overdrive stage. Together the two parameters are useful in that they can reduce the amount of bass going into the overdrive and then recover it on the other side. Must be less than 1.0.
xov.ctl_sagtobias
F* (0.1880)
This parameter is part of an attempt to recreate an artefact called 'power sag'. When a power amplifier is under heavy load the voltage drops and alters the operating parameters of the unit, usually towards more and other kinds of distortion. The sagfb parameter controls the rate of recovery from the sag effect when the load is lifted. Must be less than 1.0.
whirl.bypass
I (0)
if set to 1, completely bypass leslie emulation
whirl.speed-preset
I (0)
initial horn and drum speed. 0:stopped, 1:slow, 2:fast
whirl.horn.slowrpm
D (40.32)
target RPM for slow (aka choral) horn speed
whirl.horn.fastrpm
D (423.36)
target RPM for fast (aka tremolo) horn speed
whirl.horn.acceleration
D* (0.161)
time constant; seconds. Time required to accelerate reduced by a factor exp(1) = 2.718..
whirl.horn.deceleration
D* (0.321)
time constant; seconds. Time required to decelerate reduced by a factor exp(1) = 2.718..
whirl.horn.breakpos
D* (0)
horn stop position 0: free, 0.0-1.0 clockwise position where to stop. 1.0:front-center
whirl.drum.slowrpm
D (36.0)
target RPM for slow (aka choral) drum speed.
whirl.drum.fastrpm
D (357.3)
target RPM for fast (aka tremolo) drum speed.
whirl.drum.acceleration
D* (4.127)
time constant in seconds. Time required to accelerate reduced by a factor exp(1) = 2.718..
whirl.drum.deceleration
D* (1.371)
time constant in seconds. Time required to decelerate reduced by a factor exp(1) = 2.718..
whirl.drum.breakpos
D* (0)
drum stop position 0: free, 0.0-1.0 clockwise position where to stop. 1.0:front-center
whirl.horn.radius
D (19.2)
in centimeter.
whirl.drum.radius
D (22.0)
in centimeter.
whirl.mic.distance
D (42.0)
distance from mic to origin in centimeters.
whirl.horn.level
D (0.7)
horn wet-signal volume
whirl.horn.leak
D (0.15)
horh dry-signal leak
whirl.drum.filter.type
I* (8)
Filter type: 0-8. see "Filter types" below. This filter separates the signal to be sent to the drum-speaker. It should be a high-shelf filter with negative gain.
whirl.drum.filter.q
D* (1.6016)
Filter Quality, bandwidth; range: [0.2..3.0]
whirl.drum.filter.hz
D* (811.9695)
Filter frequency.
whirl.drum.filter.gain
D* (-38.9291)
Filter gain [-48.0..48.0]
whirl.horn.filter.a.type
I* (0)
Filter type: 0-8. see "Filter types" below. This is the first of two filters to shape the signal to be sent to the horn-speaker; by default a low-pass filter with negative gain to cut off high freqencies.
whirl.horn.filter.a.hz
D* (4500)
Filter frequency; range: [250..8000]
whirl.horn.filter.a.q
D* (2.7456)
Filter Quality; range: [0.01..6.0]
whirl.horn.filter.a.gain
D* (-30.0)
range: [-48.0..48.0]
whirl.horn.filter.b.type
I* (7)
Filter type: 0-8. see "Filter types" below. This is the second of two filters to shape the signal to be sent to the horn-speaker; by default a low-shelf filter with negative gain to remove frequencies which are sent to the drum.
whirl.horn.filter.b.hz
D* (300.0)
Filter frequency; range: [250..8000]
whirl.horn.filter.b.q
D* (1.0)
Filter Quality, bandwidth; range: [0.2..3.0]
whirl.horn.filter.b.gain
D* (-30.0)
Filter gain [-48.0..48.0]
reverb.wet
D (0.3)
Wet signal level; range [0..1]
reverb.dry
D (0.7)
Dry signal level; range [0..1]
reverb.inputgain
D (0.025)
Input Gain; range [0..1]
reverb.outputgain
D (1.0)
Note: modifies dry and wet values.
reverb.mix
D* (0.3)
Note: modifies dry/wet.
convolution.mix
D* (0.0)
Note: modifies dry/wet. [0..1]
convolution.ir.file
S ("/usr/share/setBfree/ir/ir_leslie-%04d.wav")
convolution sample filename
convolution.ir.channel.<int>
I (-)
<int> 1:Left, 2:Right; value: channel-number in IR file to use, default: 1->1, 2->2
convolution.ir.gain.<int>
D (0.5)
gain-factor to apply to IR data on load. <int> 1:left-channel, 2:right-channel.
convolution.ir.delay.<int>
I (0)
delay IR in audio-samples.
0
LPF low-pass
1
HPF high-pass
2
BF0 band-pass 0
3
BF1 band-pass 1
4
NOT notch
5
APF all-pass
6
PEQ peaking eq
7
LSH low shelf
8
HSH high shelf
Note that the gain parameter does not apply to type 0 Low-Pass-Filters.
These properties can not be modified directly, but are meant to be mapped to MIDI-controllers (see "General Information" above) e.g. "midi.controller.upper.70=upper.drawbar16".
{upper|lower|pedal}.drawbar<NUM>
I* (-)
where <NUM> is one of [16, 513, 8, 4, 223, 2, 135 , 113, 1]. Set MIDI-Controller IDs to adjust given drawbar. -- The range is inversely mapped to the position of the drawbar, so that fader-like controllers work in reverse, like real drawbars. Note that the MIDI controller values are quantized into 0 ... 8 to correspond to the nine discrete positions of the original drawbar system: 0:8 (loudest), 1-15:7, 16-31:6, 32-47:5, 48-63:4, 64-79:3, 80-92:2, 96-110:1, 111-127:0(off)
rotary.speed-preset
I* (-)
set horn and drum speed; 0-stop, 1:slow, 2:fast
rotary.speed-toggle
I* (-)
toggle rotary.speed-preset between 1/2
rotary.speed-select
I* (-)
low-level access function 0..8 (3^2 combinations) [stop/slow/fast]^[horn|drum]
swellpedal1
D* (0.7)
set swell pedal gain
swellpedal2
D* (0.7)
identical to swellpedal1
vibrato.knob
I* (0)
<22:vibrato1, <44:chorus1, <66:vibrato2, <88:chorus2, <110vibrato3, >=110:chorus3
vibrato.routing
I* (0)
<32:off, <64:lower, <96:upper, >=96:both
percussion.enable
I* (0)
<16:off, <63:normal, <112:soft, >=112:off
percussion.decay
I* (0)
<64: fast-decay, >=64 slow decay
percussion.harmonic
I* (0)
<64: third harmonic, >=64 second harmonic
overdrive.enable
I* (0)
<64: disable overdrive, >=64 enable overdrive
setBfree setBfree -p pgm/default.pgm midi.port="a2j:[AV]" midi.driver=jack setBfree midi.port=129 midi.driver=alsa jack.connect=jack_rack:in_ setBfree jack.out.left=system:playback_7 jack.out.right=system:playback_8
Report bugs at <http://github.com/pantherb/setBfree/issues>.
Website and manual: <http://setbfree.org>
Copyright © 2003-2004 Fredrik Kilander <[email protected]>
Copyright © 2008-2012 Robin Gareus <[email protected]>
Copyright © 2010 Ken Restivo <[email protected]>
Copyright © 2012 Will Panther <[email protected]>
This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.