Beatrix - the organ software synthesizer

Will Panther succeeded where others have failed and made it possible to adopt Fredrik Kilander's Beatrix in terms of the GPL.

Homepage: http://setBfree.org
Source & Issue-tracker : https://github.com/pantherb/setBfree

This article is outdated; use setBfree instead of patching Beatrix.

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

Disclaimer: beatrix is free (as in beer) - and redistribution if of the software is not permitted. the official license reads:

YOU MAY FREELY DOWNLOAD AND INSTALL A COPY OF THE SOFTWARE FOR YOUR PERSONAL USE. YOU MAY NOT BUNDLE, RENAME, SELL,
REDISTRIBUTE, REPACKAGE OR IN ANY OTHER WAY ALTER WHOLE OR PART OF THE SOFTWARE AND ITS DISTRIBUTION WITHOUT PRIOR,
EXPRESS AND WRITTEN PERMISSION FROM THE AUTHOR.

The information on this page could be used in license-contradicting ways, however the following instructions are complying to the license and do not contain any of beatrix' source-code.

About this

While https://sourceforge.net/projects/bristol would be the FLOSS synth of choise, beatrix implemets a great Hammond sound that is worth to pursue coding on. However the last official release v041 of beatrix from November 2004 lacks some essential features for professional use (eg. JACK-audio-interface and MIDI-seqencer).

Jackification

It would not to complicated to wrap beatrix into a jack-audio and alsa-sequencer application without changing any of beatrix' original source!

You would need to add jack-audio client code and wrap the midi-I/O into alsa much like beatrix-v041-jack8g.diff - I also suggest to compile beatrix with the -O3 option (in Makefile) and replace the usage documentation to include the [-R <sample-rate>] optional command line argument (in main.c). If you plan to use the built-in leslie simulation: read the note at the bottom of this page about the denormal issue.

After this small exercise, one would find that some internal buffer-sizes and hardcoded optimizations in beatrix yield to unwanted audio-effects when running at samplerates other than 22050. There are two proposed workarounds: re-sample or change pitch!

With jack at 22050Hz and multiples thereof (eg. 44.1kHz) things work just fine1) . Running at 48k SPS would need either of those fixes:

./beatrix osc.tuning=404.249986  # internal seq at 22050, tune corrected.
 # 404.25 = 440 Hz / 24000 * 22050
 # internal pitch corrected from 22050 to 24k (*2 to JACK - 48kHz)
./beatrix -R 24001 osc.tuning=440.018333 # internal seq upsampled x2
 #(-R 24000 would be correct, but collides with beatrix internals)
./beatrix -R 48001 osc.tuning=440.009179 # natively synth at 48k
 # Beware: Beatrix ties the effects to sample-buffer size.
 # Using large sample-rates, it is possible to configure
 # long reverb and whirl-effect, which may cause internal buffer
 # overflows. 

Notes: the example patch above is not optimal in several ways. However with the current license it is not possible to come up with a clean solution to the following issues:

  • Re-sampling happens in the jack process callback (this is not realtime safe)
  • Re-sample quality is not configurable.

Conclusion and Comments

Since many synth-internals are hardcoded in beatrix, a rewrite as DSSI/LDASPA/LV2 plugin would be better suited than trying to fix existing code which is not even FLOSS. The rewrite could however make use of existing code - given the author consents.

A good alternative Hammond sound can be played with: http://ll-plugins.nongnu.org/azr3/ a JACK port of the AZR3 VST plugin by Rumpelrausch Täips; GPL and everything.

There are also a few CSound instruments available: fi. RotorOrgan or DirectHammond.

Ken Restivo has picked up on Beatrix and uses it with a convolution sample of a Leslie cabinet. First because it sounds better and secondly to work around a denormal bug in Beatrix's Leslie simulator. More info and sound-samples are available at http://www.restivo.org/blog/archives/beatrix-in-the-house

Neverthelsess, if you want to use the built-in Leslie simulator: the denormal issue can be addressed by changing line 951 in whirl.cc to:

float x = (float) (*xp++) + 1e-30f;
1) the patch uses libsamplerate aka secret-rabbit-code if available (at compile time); otherwise zero-order hold is applied for integer multiples of the sample-rate
 
wiki/beatrix.txt · Last modified: 20.11.2012 13:23 by rgareus