Setting up a shift up keystroke if an action is stopped or if no incoming action

Hi There,

I am using an NI controller for controlling my software.
I have set up a relative encoder on my controller software .
I am not using values since I can see in the Midi In Log window that when I turn left controller output B4 15 7F and if I turn right it outputs B4 15 01
I set up 2 translators for each direction just so it translates to shift down + left or right arrow.
It works and allow me to perform the corresponding keyboard action in my sofware, though when I stop, the shift action remains down.
How can I program a shift up action for when any left or right action is stopped ?

Thank you

The following example should work.

The first translator handles sending Shift(Right)
The second one handles Shift(Left)
The third one sets a 1 second (1000ms timer any time CC21 MIDI CH 5 is moved. The timer will not trip until you stop sending CC21 for 1 second as it keeps setting as you move it.
The forth translator sends the Up Keystroke for Shift when the timer trips, although I would not know why the shift was stuck down as the other translators handle both up and down keystrokes.

Relative-CC-to-Keystroke-with-Shift-up-Watchdog.bmtp (1.4 KB)

I hope this helps!

Steve Caldwell
Bome Customer Care

Also available for paid consulting services:

Thanks Steve, I was looking on the web and went through different scenarios and saw about the Watchdog term , though looking at the setup in the project I must understand is all it does is shift up action after 1000ms for any value given from the set CC number, in this case 21. So should i understand that this performs only when controller stops moving ? I am testing and it works but I thought using something so simple after all the complicated versions I’ve seen would not work and I would think that this would interfere with the ongoing action.
Great news for me though as it is a long time I want to implement this in my workflow and focus mire on my controller for audio editing and muscle memory

Thanks a lot Steve !

Glad to help! It is still a bit of a mystery to me why your project does not send shift up. Maybe you have it set up as key down instead of keystroke or text instead of keystroke for your output key strokes.


at first I tried your strategy and it didn’t work so I had to set up 2 translators 1 for shit using down selection which was probably my mistake, though I did started as you did in the project , it also works without the timer so I don’t understand what happened there. The main thing is that it works somehow which is why I purchased your amazing software. Thanks again for your help !

I understand.

Some multiple keystroke messages may happen too fast for the host operation system or application. In this case you need multiple translators with delays for each keystroke. This is usually the only place where a watchdog timer would need to be used to ensure the corresponding up keystroke.

I’ve found that in most cases a simple two keystroke combination does not require multiple translators.

I believe in version 1.9 there is a checkbox to emulate keystrokes slowly eliminating the need for multiple translators on long keystroke operations.

Look in outgoing actions and see if you have this as an option on your version of MT Pro.
See the section Emulate keystrokes slowly.


Steve Caldwell
Bome Customer Care

Also available for paid consulting services:
1 Like

Yes I have it and tried it but didn’t give any result, I will keep try things around and find a workaround at best I guess.
In the mean time of talking of combining keystrokes, is there a way to combine a shift action with a mousewheel movement ? has it been tested and is known as possible ?

Yes but you need different translators for the keystrokes and the mouse actions and you still need to be careful to add your “up” keystrokes so that keys don’t get stuck down.

Steve Caldwell
Bome Customer Care

Also available for paid consulting services: