Simple simulation of an electronic organ like e.g. Vox Continental.
This project is a toolbox for creating an electronic organ program with JACK MIDI input and JACK audio output for Linux.
The mercurial repo is hosted here at http://bitbucket.org/horo/connie/.
Connie is a JACK application. It has one MIDI input and a stereo audio output.
-a autoconnect to system:playback ports -c CHANNEL MIDI channel (1..16), 0=all (default) -d nnnnnnnnnnnn drawbar preset, n=0..8 -f french AZERTY keyboard -g german QWERTZ keyboard -h this help msg -i INSTRUMENT 0: connie (default), 1: poor-man's-hammond -m MIDI_PORT connect to jack midi port -p PITCH concert pitch 220..880 Hz -s INTONATION_SCALE 0: Hammond Gears 1: Equally Tempered 2: Pure Intonation 3: Pythagorean 4: ¼ Comma Meantone 5: Werckmeister III 6: Kirnberger III -t TRANSPOSE transpose -12..+12 semitones -v print program version -C /path/to/config load config/session file -U UUID set jack-session UUID
The latest -rc versions support the experimental jack-session management. The session manager (e.g. qjackctl (svn)) triggers the saving of the internal state via a jack callback and is able to restart the program and restore its previous state.
An experimental qt4 user interface is available (source only, not in deb) in subdirectory qt4. It's mostly a proof of concept to test the separation of tone generation and interface.
The sound is generated by sampling lookup tables with calculated waves at 12 equal tempered frequencies for one octave. The upper octaves were generated by sampling with greater sample steps.
This solution allows a moderate cpu load and makes the proggie eeepc-friendly.
The sound of each note is ramped on and off to reduce the key click. For each sounding note four stops are mixed:
- The subharmonic 16' (one octave lower)
- The unison stop 8'
- The octave stop 4' (one octave higher)
- The mixture stop 2 2/3' (octave+fifth), 2' (superoctave), 1 3/5' (superoct.+major third), 1' (superoct.+octave)
To cover a broad variation of sounds three voices from two lookup tables can be mixed:
- Flute - a sine wave
- Reed - a bandlimited rectangle wave
- Sharp - a bandlimited sawtooth wave
For the reed/sharp voice I've created own samples of bandlimited signals for each octave. These samples are mixed at octave border to minimize the ugly "sound jump". This combination allows a much wider sound range from very soft to very harsh. To get the typical cheesy "Connie" sound you have to fiddle with theese voices. I'll do more experiments with the waveforms and the lookup tables - but my first goal was to hear some noise ;)
Drawbars (vol=0..8) control the four stops, the three voices and the intensity of the vibrato and percussion.
The vibrato works as a combined stero am and fm to create a sound like a very simple leslie - massive work has to be done, maybe with the help from some experts out there...
The percussion effect changes the attack waveform from smooth sin^2 shape (click remove) to a straight step.
A simple JCRev reverb adds some life to the sound.
Poor Man's Hammond
I'm working on a second test model with individual control of each stop and some other changes, kind of poor-man's-hammond, but (at the moment) without all the hammond special effects (leakage, click, random phase of wheels, vibrachorus etc.). This "hammond" project is just the extrapolation from the registers (16', 8', 4' and the mixture 2 2/3' + 2' + 1 3/5' + 1') already existing in connie to the nine well known numbers with a sine voice.
Critics and hints are welcome, I need input for improvement.
My debian repository holds the latest "stable" version. Update your /etc/apt/sources.list or put a cryptomys.list file into /etc/apt/sources.list.d:
deb http://cryptomys.de/experimental/ ./ deb-src http://cryptomys.de/experimental/ ./
After "apt-get update" get my keyring
apt-get install horo-keyring
Now you can install connie or get the source:
apt-get install connie apt-get source connie
The real Vox Continental
The Vox Continental creates the sound from twelve individual tunable LC oscillator boards with a six stage octave diver. The resulting 84 frequencies (RC filtered rectangular signals) are mixed with a four contacts at key press and summed for the four stops. The different voices (flute and reed) are created by summing the original mix and a two stage RC filtered signal. The fixed switchable vibrato signal (RC filtered rectangular) introduces a fm at the oscillator boards.
For the original connie program I looked at the schematics and wrote the software according to the signal flow with some tweaking of the voices.
VOX is a registered trademark of VOX AMPLIFICATION LTD.