How to route Virtual Translator for further message filtering?

I think I’m neglecting to use this product properly because I can’t figure out how to translate messages, then translate those translated messages again.

What I want to do is take controller messages then translate them to go out of BMT1, for example, then take the messages going out of BMT1 and translate them again with different specific rules.

So for example it could be used this way:
MIDI Controller → Preset that transposes a perfect fifth up and sends out of BMT1 → Preset that takes BMT1’s input and transposes them up a perfect fourth to go out of BMT2

I tried using the router to route BMT1 to BMT2 but these messages don’t seem to be getting captured when I’m writing a preset. I also tried to have the preset default input set to accept BMT1 but that doesn’t seem to get any messages through it with that method. Only my controller’s messages are being captured. Am I neglecting to have a setting set correctly? Can anyone please set this up on their end and tell me how they accomplished what I’ve outlined above?

Hi and welcome to the Bome community!

Bome MIDI Translator Virtual Ports require that one end be MT Pro and the other end be anything other than MT Pro, so you cannot route a Bome Virtual port out to a Bome Virtual Port in.

For your requirement, I’ve created 4 translators. The first two are note-on and note-off for the Perfect 5th (7 semitone).

The second two take the same input and add an additional 5 semitones (11 total) to get you the perfect 4th for the first (so it ends up being a 7th.

If you want the original note to also come through you can remove the option “Swallow” from the translators and then add a MIDI through path in the Router. I’ve have also done this for you in anticipation that you will also want the root note.


If you don’t want this, simply remove the line from the MIDI router.


7th-Chord-No Third.bmtp (2.1 KB)

Steve Caldwell
Bome Customer Care

Also available for paid consulting services:
1 Like

Hi Steve,

Thanks so much for taking the time to respond, welcome me to the forum, and write that .bmtp file showing that the transposition to play a chord is still possible without routing in the way that I originally desired.
This preset teaches me a lot about how to write my own presets more concisely so that was awesome.

It may be due to convuluted methodology that I want BMTP to be able to route to itself in the first place. Although the reason I wanted to do so was not exactly transposing in the way that I outlined, but was similar. I appreciate you clearing up my confusion as to whether or not BMTP → BMTP was possible. I’ll take what I can get, and BMTP is powerful enough as is! There may even be a good reason I’m not thinking of to design it how it is.

optional reading in quote text:

The reason I wanted to route transposition within BMTP was because I weirdly prefer to have my controller send notes starting from 0 rather than middle C. So I have a preset that transposes all sent notes down a few octaves before they go to the DAW. At the same time, I like to write presets that take MIDI data sent from the DAW and translate them to control CCs, for one example. If I’m not mistaken and not convoluting things, when writing presets to translate from my controller I have to use a transposition rule (qq=zz-24 for example) instead of just writing that the incoming trigger note is the note that I, and the DAW, think in. So if I want my DAW to send values 0-127 for a CC based on playing MIDI data, I need to use a different preset than when I’m using my controller to modulate that CC in the same fashion because the controller would be sending notes up a few octaves. But this is extraneous information that I’m unnecessarily laboring you with.
I think I may just need to think harder about how to write my rules and presets in general to achieve more streamlined and concise files because it’s often the case that I neglect something obvious.

Thanks again for the information and help!

If you have time to respond again, I was also wondering how “quick” rules are in comparison to not using a rule. Does it take a translator longer to execute a message if it has a rule vs if there is no rule? Because one could get a transposition using it or not and I wanted to know if one way was any worse than the other latency and/or CPU wise.

This version I added an Init Preset.

  • The first translator will call a timer called “Init” which will initialize the global varable ga to a value of 36.
    I will use this as the base note offset for all rules.
  • The second translator allows you to press ALT-F1 to trigger the same timer.
  • The third translator is the timer and will do the actual setting of ga.

I removed the MIDI thru route and added a pair of translators for the base note. All translators have rules that offset both the base note and thin incoming note. This should give you the desired note.

Rules are very quick and I highly doubt that there will be any noticeable delay (latency). The timestamp does not show any so it is sub-millisecond which is not measurable by MT Pro internal clock.

7th-Chord-No Third-Base-Note-Offset.bmtp (3.5 KB)

Steve Caldwell
Bome Customer Care

Also available for paid consulting services:
1 Like

Thanks again, Steve. It’s cool that you updated it! I was previously putting the exact offset number in every translator’s rules instead of setting a variable to initialize upon the project opening. This led to a lot of laborious copy and pasting… I’ll set things up like you’ve done in your example from now on.

And okay, i’ll just use rules since they’re quick enough and don’t introduce any measurable latency.