Is this possible in Midi Translator Pro? Controlling from a Stream Deck Plus


I have two MIDI keyboards at my desk and I’m looking for an easy way to quickly transpose both of them in semitones (from -11 to +11). I’ve already found this, but instead of having 22 presets for each semitone that I have to toggle on and off with the mouse, I would rather control the whole thing with a knob on my Stream Deck Plus, like so:

The Stream Deck is capable of sending out MIDI data, so my idea would be to send out some MIDI to MTP, which then switches between presets accordingly. Is that possible? Any easier way to achieve this?

Thanks! :slight_smile:

Hi and welcome to the Bome community!

Indeed, this is quite simple. I’ve included a sample below.

In this case, I’m using a Streamdeck 15 and have programmed 2 buttons, ‘Next’(which is set for note 60) and ‘Previous’ which is set for note 61. I send to the MIDI port called StreamDeck15 which is the input port for my Bome MIDI Translator Pro project.

In my example, I have 6 presets. Preset 0 is the controlling preset and I keep it always active.

The rules are to increment or decrement the value of the global variable ‘ga’ and then enable the preset by number. I put rules in there to make it cycle around if it goes beyond or before the value of the other 5 presets I have established.


Here is the project file:

Streamdeck-Preset-Example.bmtp (1.4 KB)

EDIT: I’m assuming the Stream Deck Plus has similar or better features. Since I don’t have one, I used what I have.

Steve Caldwell
Bome Customer Care

Also available for paid consulting services:
1 Like

Thank you so much for the detailed answer, Steve! This gave me the perfect starting point to wrap my head around Midi Translator Pro and to do what I had in mind.

I changed things up a bit in the end to keep everything in one preset. In case anyone ever stumbles upon this thread to do something similar, here’s what I did (project attached below):

  • In the Stream Deck software, I created a knob that sends CC15 from values 1 to 23 to the BOME Virtual In.
  • In Bome, I created a rule that changes a global variable (‘za’) to values between -11 to -11, depending on the CC value. This global variable is then used to offset the Note On and Note Off values, similarly to the video I linked above.

That’s it really. Seems to work great so far!

MIDI-Transpose.bmtp (1.8 KB)

Thanks again, Steve, will be purchasing MTP right away…

This is an excellent start! I have a few tips for you.

  1. Use aliases for your devices when possible. That way if you change devices it is easier to change 1 alias than to go through multiple preset or translators to send from or receive from the changed device.

I have mine set as follows since I don’t have your devices.


You can learn more about aliases from this tutorial.

  1. I then changed your MIDI Thru routing to the aliases instead of the physical ports.
    I didn’t assign aliases for your physical devices, you might want to call them My88 and MyMicroKey or such. Or maybe just MyKeyboard1 and MyKeyboard2 to make them completely generic in case you change keyboards in the future.


For optimal device selection, please set your devices (usually) at the preset level.

For more information about device selection, see this tutorial.

  1. Now I changed your setter translator as well. Look at translator 0.1. With it, I can use an input encoder with default of 0-127 and scale it to -11 to + 11. So you would need to change Streamdeck to send the full range of values. I’m not sure how difficult or easy this is but it works well for encoders where you cannot change the scaling of the input.

Here are the rules. I also used the ‘Log’ rule so you could watch it in action in the Bome MIDI Translator Log Window.

// scale it from 128 to 23
// output range
// input range
// offset
Log "Log values is %ss%"

See this tutorial about scaling.

Here is the project file I created.

MIDI-Transpose-sjc.bmtp (2.6 KB)

Steve Caldwell
Bome Customer Care

Also available for paid consulting services:
1 Like

Fantastic, thank you Steve! I’ll try implementing this asap.