How to force the midi to travel from one translator to another in this order

Hello, I have several translators that set velocity to a fixed value

I have another set of translators that transpose some keys to other keys

I want to midi notes from my physical keyboard to go through the currently activated velocity modifier translator first then to the currently activated transposition translator (or vice versa)

And since it has to do with routing and given how bad I am when it comes to redirect routing (maybe some days I’ll finally visualize how the midi travels from in and out ports, I can’t seems to find a way

Do I need to create a virtual port with loopmidi, and redirect the midi notes from my keyboard to this port with the Bome midi router. Then use that newly created virtual midi port as input port for my first translator. And use a second virtual port as the out port of my first translator.
Then use that second virtual port as IN port for my transpositor translators ?


Hi, well that is one way of doing it but if you don’t want to create loopMIDI ports you can also use ‘Perform’ to do what you want.

The power of Perform is that you can send paramters.

In the attached example, the first translator takes input from your controller. I look for note-on or off so that no actions are taken for any other type of 3 byte MIDI message. It then passes the parameters to the second translator to handle velocity adjustment.

In the second translator, if the velocity is 0 we do not not adjust as it is a note off. Otherwise we increase the velocity by 3. We make sure it is not more than 127, then we pass the parameters to the 3rd translator for transposition.

// input paramters
// oo = Status byte
// pp = Note Number
// qq = velocity

// if velocity is 0 then it is a note-off, do not change
if qq==0 then skip next 2 rules
if qq>127 then qq=127

The third translator takes the paramters and then just adjusts the note number. Then the output goes to the define output device.

// oo is Status byte
// pp is note number
// qq is velocity

In this case, no global variables were needed but if you want, you could use them for your calculations. For instance, you could use a global variable to define the transposition for all notes and then use the global variable in the 3rd translator to add to the incoming variable pp.

Perform is new to version 1.9.1 so be sure you download that version if you want to use this technique.

Perform-Velocity-and-transpose.bmtp (1.7 KB)

Steve Caldwell
Bome Customer Care

Also available for paid consulting services:

Hello Steve, I am trying your preset, it’s working.

But the thing is, I currently have 7 different presets to set the velocity to a fix value (and another preset to disable all other). I trigger those preset with a midi CC on my physical device

I am building 7 other transposition presets so that the scale C major will be transposed to several other scale. So in each preset I’ll have for example a lot of translators that transpose all the sharp notes in each octave. So for example in F major, the B is flat. I’ll have a preset for each B (B0 = Bb0, B1 = Bb1, B2 = Bb2) etc.

Isn’t that easier to setup 7 velocity presets and 7 transposition presets, and only one of each can be activated at any given time ?

You can add another parameter and use that incoming parameter to tell if you want to have a perform action triggered or not.

For instance, use a forth parameter (rr) with value incoming value of 0-6 and then in your perform actions say something like the following in the rules of the perform translator.

if rr!=0 then exit rules, skip outgoing action

Of course if only one preset is set at a given time, you could also use the same perform triggers and only the translators with the presets enabled would trigger and outgoing action.

You would create another ‘always on’ preset to switch the other presets.

There are many ways to handle this type of scenario

Steve Caldwell
Bome Customer Care

Also available for paid consulting services:

Perform look very promising, I’ll dedicate time for it latter.

For now, I am doing this routing for my Velocity modifier preset. So in theory, if I use the port ‘Arturia Velocity’ as an INPUT port for my transposition preset, it should work. But it doesn’t.

In theory I expect my MIDI notes to travel like this :

MIDI notes from my physical arturia keyboard —> goes to the port ‘Arturia keylab Essential 61 1’ —> goes to ‘Arturia Velocity’ port with this velocity preset —> Goes to Bome Midi Virtual port 1 with my transposition preset

No matter how many videos I watch on MIDI or manual I read, I seems to get confused with MIDI in and out ports and the flow of the signal

the job of this transposition preset is to turn every C into C#. for now I am only testing with the octave 3 C.
But I noticed that the keyboard stop transmitting every other note this is the last issue I am facing, everything else is working

edit : you gave the answear in another thread. I need to create another translator to pass all other notes, put it after the specific transposition translators and check ‘stop processing’ for the latter :champagne: