In my youth, I used to play the pipe organ in the village where I grew up. Nowadays I have less time to play my instruments, and if I have, I’m most often playing synthesizers (or even guitars) instead of walking to a church and get access to a real pipe organ.
However there’s Aeolus ( (c) by Fons Adriaensen), a software synthesizer emulating a pipe organ. Unlike its competitors (like Hauptwerk) it computes the sounds instead of using samples of real world instruments.
People who use MIDI equipment (or want to build a console around a computer running Aeolus) may want to switch the stops on and off using some MIDI commands. Since release 0.8.2, Aeolus is capable of doing so. The following technical details are for people who need to design some firmware or software which transforms stop movements into controller change MIDI messages.
Before Aeolus will respond to MIDI controller changes to switch stops, you need to set the control channel in the MIDI setup window of Aeolus. Aeolus will from now on respond to CC #98 (which can be changed in the source code if necessary).
A controller change message consists of three bytes:
- The first byte indicates that a controller change will follow and will also specify the MIDI channel (this is done using nybbles).
- The second byte will specify the controller number.
- The third byte will specify the value of the controller.
For the latter two, only 7 bits of each are available, so there’s a maximum of 128 controller numbers with a maximum value amount of 128 each.
To send on MIDI channel 1 the controller number 98 with a value of 128, use the following three bytes (notation is in hex):
b0 62 7f
For MIDI channels 2 through 16, just increase the first byte. To change the controller number, increase the second. All the magic stuff about Aeolus is done by modifying the third byte.
The third byte fulfils two purposes. It is used to change the state of the specified “row of ranks”, and it is used to actually switch stops (Note: As the 1st bit always is 0 it cannot be used to encode data):
- If the 2nd bit is set, the 3rd and 4th bits are used to set the state:
- 00 means a reset
- 01 means switch on
- 10 means switch off
- 11 means toggle
- The last four bits are used to specify the “row of stops” you want to modify.
- If the 2nd bit is unset, the remaining 6 bits specify the button to switch.
The mode is remembered by Aeolus. If you want to switch multiple stops within a “row of ranks”, you only need to send the mode command once. Then send up to 64 stop change commands.
Examples (all values are in hex notation, and only MIDI channel one gets used):
b0 62 40 will reset all stops of the 1st “row of ranks” (III)
b0 62 41 will reset all stops of the 2nd “row of ranks” (II)
b0 62 42 will reset all stops of the 3rd “row of ranks” (I)
b0 62 43 will reset all stops of the 4th “row of ranks” (P)
b0 62 70 will set the 1st “row of stops” to “toggle” mode (III).
b0 62 71 will set the 2nd “row of stops” to “toggle” mode (II).
b0 62 72 will set the 3rd “row of stops” to “toggle” mode (I).
b0 62 73 will set the 4th “row of stops” to “toggle” mode (P).
If one of the four aforementioned commands has been sent, the following commands will switch the corresponding stops:
b0 62 00 will switch the 1st stop
b0 62 01 will switch the 2nd stop
…
b0 62 3f will switch the 64th stop
This means you can control 8 “rows of ranks” with an amount of up to 64 stops each.
