Finally diving into BMTP - is my first preset "optimal?"

I got time today to really get into the configuration/routing and make a working preset. My setup is a big "overwhelming" in terms of the amount of controllers I'm using, so it just had me a bit reluctant til now as it seemed always to end in frustration getting things to work.


Anyway, my setup consists of 6-8 Behringer CMD module midi controllers, depending on my configs/preference any given day. The specific unit I am using in my example is the CMD MM-1, which I've configured using Midi-OX to send midi messages through channel 2.

The software targets are; one instance of Traktor Pro 2, and one instance of Reaper 5.93 (DAW), which I've already configured to send/receive audio channels via asio routing and KA6. All controllers/midi are routed exclusively to Traktor with the exception of Channel 4 midi - which is my "blank" channel for Bome routing. Hopefully that makes sense enough.


The ONLY midi controller I want to be used in my DAW, in this example and for simplicity sake, is controller CC#64 of the MM-1, which as I stated resides on channel 2. CC#64 is the cross-fader of the MM-1, as with Traktor's audio being mixed "externally" (inside Reaper), I realized the need to implement a cross-fader inside of my DAW if I wanted the same type of behavior as you'd expect when mixing between decks. (perhaps this is a bit overboard in terms of explaining my setup but hey - i'm kind of proud to have made it this far 😀 )


So, my intent in making this preset was to simply tell the MM-1 to act "as normal" for all of it's CC's and note-on/off's, EXCEPT for CC#64 - which, when manipulated, should have it's own exclusive path (channel #4) and make its way to Reaper's midi input.


To acheive this, I made a single preset with 5 translators, and I'm mainly wondering if this is at all an optimal/efficient way of doing things or if some of you more experienced BMTP'ers here could chime in and steer me towards a better way of doing this. I'll attach the project file, but to sumarize briefly as to what I've done; 1 translator is set up to take any value from channel 2 / CC#64 and output such to channel 4 / CC#64. Then I made one each for midi note-ons / offs, and one for all CC's that do not equal CC#64, to be sent on channel 2 as is (this is mostly where I think maybe I could be doing something different as it seemed redundant but was, in the end, the only way I was able to figure out to get Traktor to see MM-1 on channel 2).


Odd, It seems like often times when saving a project, or even just changing views from routing to properties, little details change themselves(?)… like, if i have note: any note set to variable pp both checked, i come back later on and find it now is note: (specific note #) checked. Am I hallucinating?
The file posted seems to behave slightly different than as described; cc#64 sends midi to both channels 2 and 4 as opposed to only channel 4. Hmm…


Just glancing at your project file and the text you posted. I see you have one input from your MM1 and 2 outputs. One to BMT 1 and the other to BMT2. I assume BMT1 goes to Reaper. You want everything on coming in on Channel 2 from your MM1 to go to Traktor except for CC64 which you want to go to both Traktor and Reaper? Is that correct?

What about other channels from MM1? If you want all channels from MM1 to go to Traktor, you can just set up default MIDI routes from MM1 to Traktor by drawing lines between them. Then if you want CC64 on channel 2 handled differently, you can just set up one translator to send to both Traktor and Reaper and set Swallow on that translator. Doing this means that as long as the translator generates output, it will only go to the routes as defined in the translator and will not pass through to the default routes. Doing things this way reduces the number of translators required. You only need translators to handle the exceptions.


As far as you project file changing, if you can tell me the version of MT Pro you are running, I can see if that could be problematic. The only think I experienced similar, was when I was running a Beta version.

I’ve modified your project file and attached it.

I disabled 3 of your translators.

I set default routing from MM1 to Traktor (set Alias to BMT2)

I changed the remaining enabled translator CH 64 CC to go to Channel 4 and send to Reaper (alias to BMT1) and Traktor on Channel 4.

If you want to go to Traktor and Reaper but on different channels, you could either add another translator or modify the MIDI output to MIDI raw Message that could send to both (B1 40 vv B3 40 vv).

I hope this helps!

Steve Caldwell
Bome Q and A Moderator and
Independent Bome Consultant/Specialist




Hey Steve, thank you for the prompt reply! Very informative and helpful just reading your insight, and i’ll be importing the edited project file to test shortly and will follow up afterwards.

To clarify/answer your qs;
“other to BMT2. I assume BMT1 goes to Reaper. You want everything on coming in on Channel 2 from your MM1 to go to Traktor except for CC64 which you want to go to both Traktor and Reaper?”

I want to send everything from ch02 to Traktor, yes, but CC64 (and; CC48-51, too) should be sent only to Reaper (ideally).

“What about other channels from MM1?”

Ah, this one tends to confuse me; I know in Reaper each Midi device shows 16 individual channels which data can be sent on, but this is different than the main “Midi channels” 1-16, yes? Basically I ask because as far as the latter “port” channels, my devices use all but 2 channels in my current setup. So I just need some clarification I think here as I was using channel 2 thinking that was the “port” channel my MM-1 is using. I think I understand better now, based on what you’re saying, why the channel number only gets displayed in the log when i’ve specifically defined it thru variables/rules.

If I’m understanding better now, I would think what you described would be ideal; have all channels going to traktor except for (channel “x” this is just an arbitrary number I think, right? As in, it does not correlate to “Midi channel #2 / 16” on which the physical devices currently resides?

Also, since I prefer that CC64, 48-51 do NOT talk to traktor (only Reaper), does this change anything? I figure we do the same, sending 15 channels to Traktor and 1 channel to Reaper? Worth noting ALL controls excepts those CC’s listed above should only speak to Traktor..

“tell me the version of MT Pro you are running”

MIDI Translator Pro 1.8.3 build 892

Thanks a ton!

Quick update: uploading my edited version of your edit. So far it’s working as intended.

Regarding the odd behavior with translator settings changing – as I was just working inside Bome tweaking that file, I think I found my issue; if I forget to uncheck “Capture MIDI” in in or out sections, everything goes wonky 😛 (as expected). I will have to train myself to stop doing that, but maybe a feature request/ idea in future development: would it be possible to implement some sort of feature where, once we click outside of either of the capture areas the capture box gets un-ticked (or something along those lines – even just something more “eye catching” that reminds the user that capture is running?).


Fyi added cc1, 48-51 to my CC assignments.


Thanks again


Glad to see I could help. Another thing to suggest is that you could use a single translator for any of the CC’s you want to send to Reaper with the below rules

On incoming you allow for any CC and then set a local variable (say pp). Then you do something like this.

if pp==1 then skip next rule
if pp < 48 then exit rules, skip outgoing action if pp == 64 the skip next rule if pp >51 then exit rules, skip outgoing action

As long as your MM1 does not transmit on any other channels, you should have nothing to worry about with the default routing. If it does, and you don’t want the default routing to happen, you will need translators to override this routing.

Note that Swallow works ONLY if the outgoing action happens so the rules above will not filter out the MIDI through routing.


Awesome – this is exactly what I was trying to implement last night, but was getting lost in the rules coding. Testing this now, thanks Steve.