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:
- with CollaB3, tapping (fully pressing, and then immediately releasing) the sustain pedal would toggle the rotary speed between slow and fast
- 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”
ga=1
xx=127
exit rules, execute Outgoing Action
Label “RotarySlow”
ga=0
xx=63