Rotary speaker toggle for the CollaB3 tonewheel organ using the sustain pedal

Sampleson’s CollaB3 is a nice (and free!) emulation of the Hammond B3. However, I had some trouble toggling the rotary speaker speed. I was able to fix this using the free version of Bome MIDI Translator, and was so impressed I purchased a license. I hope solution is useful to someone.

The rotary speaker switch in CollaB3 has 3 positions (off, slow, fast). By default it’s mapped to MIDI CC #64. Some experimentation revealed that:
MIDI CC #64 = 0 turns off rotation
MIDI CC #64 = 63 turns on SLOW rotation
MIDI CC #64 = 127 turns on FAST rotation

I could not find any documentation, and was too lazy to test it, but it seems likely that some range of values can enable these 3 positions - e.g. 0-42 for off, 43-85 for slow, 86-127 for fast).

Empirically, the behavior of my sustain pedal was as follows:

  • pressing the sustain pedal fully sends MIDI CC #64 = 127, and enables fast rotation - but only while the pedal is fully pressed.
  • releasing the sustain pedal sends out a series of MIDI CC #64 messages, until finally when the pedal is “up” MIDI CC #64 = 0 is sent - and speaker rotation stops.

The desired behavior was as follows:

  1. with CollaB3, tapping (fully pressing, and then immediately releasing) the sustain pedal would toggle the rotary speed between slow and fast
  2. but with Pianoteq(or other VST’s that use MIDI CC #64 for sustain), the sustain pedal would function as a normal sustain pedal

This meant that I needed to choose a different MIDI CC # for rotary speaker speed in CollaB3. I chose MIDI CC #3 because it has no defined purpose in the MIDI specification. You could use a different CC #.

It was easy to translate MIDI CC #64 = 127 (full pedal press) into either MIDI CC #3 = 127 or MIDI CC #3 = 63 (see below).

But the trick was that when using CollaB3’s “MIDI learn” feature I had to also - TEMPORARILY - swallow all the MIDI CC #64 messages. Otherwise, CollaB3 would first receive the “translated” message (i.e. MIDI CC #3 = 63 or 127), and then receive the untranslated MIDI CC #64 messages (as the pedal moved from pressed to released) - and it interpreted that to mean that it should be learning to use MIDI CC #64.

The solution was to use TWO translators:

#1 listen for MIDI CC #64 = 127, and then output either MIDI CC #3 = 127 or MIDI CC #3 = 63
#2 (temporary - only while teaching CollaB3 to listen for MIDI CC 3). listen for MIDI CC #64 = any value, and swallow it (no outgoing message). Once CollaB3 learned to listen for MIDI CC #3, I could then disable translator #2.

The rules for translator #1 are defined as follows (I found something similar in the bome forum, for a different problem). Note that:

  • ga is a global variable that keeps track of the current state of the rotary speed - i.e. whether the last press enabled fast rotation, vs. slow rotation)
  • xx is the value of CC #3 that is then sent out (as the value of MIDI CC #3) in the “Outgoing” section of the translator.

if ga==0 then Goto “RotaryFast”
if ga==1 then Goto “RotarySlow”
Label “RotaryFast”
exit rules, execute Outgoing Action
Label “RotarySlow”

Interesting solution!

Steve Caldwell
Bome Customer Care

Also available for paid consulting services: