Pipe organ emulator using additive synthesis as a VST, AU, or CLAP plugin (or a stand-alone executable).
Aeolus was originally developed by Fons Adriaensen and presented in 2004. The original implementation is Linux only and can be found here (or across Linux distribution packages). At present it looks like Aeolus development has been mostly abandoned (but Organnery picked up the original Aeolus project to make it run on a Raspberry Pi).
This project leverages the wavetable systhesis part of the original Aeolus, improves on it, and delivers it as a virtual instrument plugin using JUCE framework, so that it can be run in Windows/macOS/Linux VST3/AU/CLAP hosts.
This implementation contains additional improvements to the sound generation including
- pipes chiff noise on attack;
- new pipe models;
- convolutional reverb.
The original binary format for the pipe models and the organ configuration has been translated (partially) to JSON.
This project takes only addsynth
and rankwave
modules from the original implementation (the source's been modified though). These modules describe the 64-harmonics additive synth and organ pipes wavetables generation. Plus this repo includes the original ae0
files that contain the harmonics tables for various pipes in binary format (these are embedded into the plugin's resources). All the new pipe models are encoded in equivalent JSON format.
The rest and the most of the code (including voicing, spatialisation, reverb, etc.) is all new, and it is not based on the original Aeolus, so the sound this plugin produces is different.
The convolution reverb uses impulse responses from the Open AIR project database.
Sequencer steps are controlled via the program change messages sent on the control MIDI channel (program 0
corresponds to the first step of the sequencer, 1
- to the second and so on).
In a DAW you may use
Program
parameter to control the sequencer steps. Another way to control the sequencer is via key switches (MIDI notes). The default configuration uses keys22
and23
to control the sequencer. These can be changed via the organ configuration file (multiple keys can be assigned for forward and backward actions).
CC 1
modulation wheel enables/disables tremulantCC 7
controls the global volume (on the control MIDI channel) and the volume of each division which hasswell
config flag enabled (on the swell MIDI channel)CC 91
controls the reverb output levelCC 98
Stops control
👉 The stops control follows the original Aeolus convention. The control mode is set by the message
01mm0ggg
, wheremm
is the control mode, andggg
is the control group (division number, counter from the top starting from0
). Control modes are:
00
Disable the division (all stops are off)01
Set stop off10
Set stop on11
ToggleOnce the control message is received the value of the format
000bbbbb
will execute the selected control mode action on specified stop butonbbbbb
, counted from0
.
Custom organ configuration will be loaded by the plugin if found at Documents/Aeolus/organ_config.json
location.
👉 The
Documents
folder's exact location depends on the operating system and the user profile.
To create the organ_config.json
start with default one embedded into the plugin by copying it to Documents/Aeolus
folder and renaming to organ_config.json
.
It is also possible to use custom pipe configs in .ae0
or .json
format. These have to be placed to the Documents/Aeolus
folder for then can be referenced from the organ_config.json
(use pipe file name without the extension in the"pipe"
attribute of the organ_config.json
).
When compiled with the WITH_MULTIBUS_OUTPUT
CMake option enabled, the generated plugin will ouput to the 8
separate monofonic buses. Each bus corresponds to the pipes groups placement in space according to the internal horizontal arrangement of the pipes.
In multibus configuration there is no reverb applied, and there is no spatialization performed.
👉 The multibus mode is indended for the object based mixing, where you could place individual pipe groups in space yourself and apply a reverb of your preference.
Pipes are arranged starting from the lowest key from the sides (buses 0 and 7) to the center in the middle of the range (buses 3, 4), and then going back from the centre towards the sides. For the pedal pipes, they go from the outside towards the centre only.
Corresponding pipe position jumps between left and right following the keys (C will be on the left, C# on the right, D of the left, D# on the right and so on).
👉 This very same pipes spatial arrangement is used in the stereo version of the plugin to perform spatialized rendering followed by a stereo convolutional reverb.
CLAP plugn format currently uses the JUCE7 Unofficial CLAP Plugin Support.
When compiling, make sure to pull all the submodules recursively:
git submodule update --init --recursive