Velocity Behavioural Change

Hi. I spent the whole day wracking my brain trying to write the proper rules for this but no success.


Basically I have a Novation Launchkey 61 Mk3.. it has keys, pads, knobs and faders... and some buttons. But the keys velocity feels quiet bizzare. It's not as responsive as it should be even after change their velocity curve. And the keys don't send NoteOff on release, they only turn the velocity to 0. Weird behaviour..

What I'm trying to achieve is:

1) NoteOff on key release.

2) Some sort of factory velocity change. By this i mean, I want the keys to output a velocity of like 70 when the response I get from playing a note is 40.. I compared it to another midi keyboard I have and the difference was clear.

I want the velocity change to only affect the keys and nothing else.

Please help. Thanks


To convert from velocity of 40 to 70 you can use a simple rule

Translator : Note On Velocity Adjust
Incoming: Note-On MIDI CH1 any note set to pp any velocity set to qq

//change from 40 to 70

if qq>=40 then qq=70

// Add more rules if you want to set different velocity outputs at different ranges

// End of Rules
Outgoing: Note-On MIDI CH 1 Note pp velocity qq
Options: Swallow


This should also solve your note-off issue as note-off can either be Note-On with velocity 0 9x nn 00 or Note-Off when any velocity 8x nn vv. If you don't like the first form you can write the following translator.

Translator : Change Note-On velocity 0 to Note-Off
Incoming: Note On MIDI CH 1 set to pp any velocity set to qq
if qq!=0 then exit rules, skip outgoing action
// End of Rules
Outgoing: Note-Off MIDI CH1 velocity 0
Options: Swallow


Steve Caldwell
Bome Customer Care

Also available for paid consulting services:

Hi Steve. Thanks for the quick reply.

I realize that my explanation was a bit all over the place. Plus the whole 40 and 70 didn't help.

Okay, this is the behavior I'm aiming for:

When I press a key (say A), the CC is Note-On and the Velocity is pp. Now, I want the Outgoing Velocity (say qq) to be pp+30 (or any other increment).

After that, when I release the key, I would like the CC message to be Note-Off with a Vel of 0 instead of a Note-On with Vel of 0. I know you said that Note-On with zero velocity is the same as Note-Off but I prefer a Note-Off message, less confusing.

Thanks again


The below should work.

In this case I'm doing everything with 1 translator and rules

Incoming is any 3 byte MIDI message oo pp qq.

I first look at the first byte to determine if it is note off (0x9n) or note off (0x8n) where n is the MIDI channel number.  If it is neither, then no output.

Then I look if the velocity is greater than 0 (which means note on) and adjust it upward. However I don't let it exceed the maximum allowable MIDI value of 127 (0x7f)

For note off I'm going to need to convert the first byte (oo) to a note off command with the correct same MIDI channel.

First I extract the channel (low nibble) into local variable rr

Then I OR 0x80 (note off) to it. Now the note off will be at the same incoming MIDI channel for output

Then if incoming velocity was 0, I change the output message from calculated rr

Now the output message

oo pp qq

will includ the new note message (on or off in oo), the original incoming note number in pp, and the adjusted velocity in qq


This is all done with local variables.


I hope this helps!

Steve Caldwell
Bome Customer Care

Also available for paid consulting services:


Hi Steve. Thanks again. And thank you for the max 127 specification, I kept forgetting to write about it when I explained.

The project file worked exactly as intented for the keys velocity and note On/Off, thank you. BUT, now Only the keys work. The controller (Novation Launchkey 61 MK3) is not sending any other signal. Be Pads, Knobs, Or Faders movement.. Even pitchbend, modwheel and sustain are not working.

I wanted it to not affect the rest of the controller. But now, any signal other than key presses is exited out in the rules. Maybe I need more than 1 translator??



There are two possibilities for your controller.

  1. It is sending keys on a different MIDI port than pads
  2. It is sending keys on different MIDI channel but same port as pads

In either case, you can simply draw a MIDI thru path between the incoming port out outgoing destination in the MIDI router. If they are on the same port, you will may need to change the velocity translator to only target the MIDI channel that the pads are targeting.

Any activity that does not execute on the translator will pass through any default MIDI thru paths.

Steve Caldwell
Bome Customer Care

Also available for paid consulting services:



From the Launchkey MK3 Programmers Reference Manual :


The Launchkey MK3 has two MIDI interfaces providing two pairs of MIDI inputs and outputs over USB. They are as follows: - LKMK3 MIDI In / Out (or first interface on Windows): This interface is used to receive MIDI from performing (keys, wheels, pad, pot, and fader Custom Modes); and is used to provide external MIDI input. - LKMK3 DAW In / Out (or second interface on Windows): This interface is used by DAWs and similar software to interact with the Launchkey MK3. 

Hi Steve.

Thank you for your help. Yes, I am aware of the 2 MIDI interfaces, I use the 2nd one with Pro Tools for HUI. We were dealing with the first one.

I think I'm gonna continue to tinker with it for a lil bit because I still haven't quite gotten the desired results. With the MIDI Thru connexion, you get everything back working, but everything as in it reverts back to the low velocity output.

Anyway, I also realized that the 90 (Note-On) and 80 (Note-Off) were really Hexadecimal values, with the 0 referring to Channel 1.. I guess I need to better understand how to manipulate those first 2 Hex characters with conditions and expressions in the rules. An example of it would be, with a incoming message like 92 4D 3C, check if the first character is a 9 (regardless of the channel). If it's a 9, then add 20 or 30 to the Velocity without affecting anything else, with everything else like sustail and other CC running normally. After that, when I release a key. since this particular keyboard doesn't send a noteOff, it just gives the same message but with velocity 0 (i.e 92 4D 00). Now, have a rule to turn that 9 into a 8 for a noteOff outgoing message.

I'll keep trying. Thanks

Yes, you can learn a lot about tinkering.

A little hint on swallow and through paths.

Swallow only works is:

  1. The translator executes the outgoing action or
  2. The outgoing action is none

Otherwise the message will go continue to the through path.

If you have a rule like.

Exit rules, skip outgoing action.

It will NOT swallow unless there is another translator somewhere that meet the above criteria.

Here is Binary Hex basics

0001 = 1, 0010 = 2 , 0011=3, 0100=4, 0101=5, 0110=6 0111=7 1000 =8, 1001 = 9 1010 = A

1011 = B , 1100= C, 1101=D, 1110=E, 1111=F

So 90 hex is 1001 0000 . Each binary number to the left has a value of 2x

so 80 is hex is 128 decimal. I use the Windows Programmers calculator quite a bit when doing MIDI calculations.

Also if you enter 0x80 in rules and come back later MT Pro will change it to 128. So I often just enter rules in MT Pro in hex as it is easier to remember MIDI wise.

Steve Caldwell
Bome Customer Care

Also available for paid consulting services: