Making a 7bit knob send out smoothed 14 bit messages?

Hi everyone. So I would like to be able to control my parameters within my DAW more smoothly with my controller. I have an Icon P1-M and I am using Cubase 12.

Based on a veeery old post which I found when I googled, I assume this is doable by this software? Could you guys confirm or deny if this is true or not?
Link to the post

If this would be possible, could anyone guide me through how I would do this?

We can send out smoothed message but the resolution would not change, they would still be only 128 total values in the end. However if you use an endless relative encoders, we could create as many steps as we want.

Steve Caldwell
Bome Customer Care

Also available for paid consulting services:

Hi Steve!
My Icon P1-M has endless relative encoders, so how do I actually do this?

This would mean ‘more fine control’ right?

Yes 7 bits has 128 steps and 14 bit has 16384.


Do you know how I manage to do this? Is it difficult?

It depends on the capabilities of your controller. If you want, you can download the free trial copy of Bome MIDI Translator Pro (MT Pro). It is fully functional but times out every 20 minutes.

Then you can select your controller as input and open the log window. Check MIDI IN and then move your control on your MIDI controller.

Then copy and paste what you see. Turn the knob in one direction until the messages stop or are the same. Then turn it in the other direction.

Now even with that, it depends on how the application handles incoming MIDI messages so it would be helpful to know the application you are using. Also, I might be familiar with your controller so you you could tell me that as well, I might be able to assist better.

Steve Caldwell
Bome Customer Care

Also available for paid consulting services:

Hi Steve. Thank you for putting in this effort.

1: MIDI IN [P1-M V1.05 Port 2]: B0 10 01
Counter clockwise
2: MIDI IN [P1-M V1.05 Port 2]: B0 10 41

If I turn the encoder quickly the last two numbers numbers changes sometimes. Do I need to paste this as well?

My Controller is Icon P1-M that has it’s own software ‘iMAP’ that allows me to remap buttons.
My daw is Cubase 12

Well I’m not sure if this would work with Cubase but I have attached a file which will convert 7 bit relative encoder (V-POT Type VPOT 1) to a 14 bit absolute encoder.

In the rules I’ve removed all acceleration (values greater than 1 in either direction). I use the global variable ‘ga’ to store the current absolute value of the simulated 14 bit CC.

Here are the rules:

// No accelleration in these rules
if qq>64 then tt=-1
if qq<64 then tt=1
// Add the new incoming value to ga
// Don't let it go out of bounds
if ga<0 then ga=0
if ga>16384 then ga=16384

And the project file.

Mackie-VPot-to-14BitCC.bmtp (1.2 KB)

Again, if Cubase does not support 14 bit CC, we may need to try another method.

Steve Caldwell
Bome Customer Care

Also available for paid consulting services:

Before we continue I just want to applaud your service. Compared to other supports I’ve encountered, this is the best. Great, great job

So I think you did it? I have managed to detect it in Cubase and it takes for ever for a plugin to move - but that is because you’ve successfully created more values right?

And since you said you removed the acceleration, this also makes sense to me that it takes forever.

Is there a way to implement some acceleration or will this be impractical? I experimented with lowering the max value, and this is better. However, is there a limit for how low I can go? When entering 1000 as max value nothing happens within Cubase

Ignore this for know, now it works lowering the max value

Hi, thanks for the compliment.

This version adds a few techniques.

I added this in rules to allow a multiplier as you move the knob (acceleration) in this case 2x.


I added the following at the end for scaling.

// Lets apply scaling Make it 0-1000
// enter the max value you want here
// Scale it

See this tutorial on scaling.

Mackie-VPot-to-14BitCC-w-scaling.bmtp (1.4 KB)

Is the grey text where I am supposed to change? I am kinda lost here.

I think you are saying that this version is not scaled, but you have implemented a rule which allow me to scale it and how it scales is depending on what I fill in where the grey text is?

Sorry if the answer is just in front of me…

Anything starting with ‘//’ is a comment. Then changes need to be in the lines below. In the example I posted I added acceleration of 2x and applied scaling to 0-1000 already.

EDIT: Sorry, my scaling was 12x not 2X. I had a typo in the rule.

Steve Caldwell
Bome Customer Care

Also available for paid consulting services:

Okey. So I have the posibility to change max value inside Cubase - is this something I should or should not do, when you implemented the max value in BOME already?

Not sure, you will need to experiment. My guess is you would set the max to 1000 in Cubase and leave the Bome Project file scaled at 1000 as well.

Steve Caldwell
Bome Customer Care

Also available for paid consulting services:


So currently I do not think It scales. When doing a half rotation very slowly versus very quickly results in no bigger changes, which it should by this time right?

I’ve not done anything to your project file, and in Cubase I have put the max to 1000

I may have read your instructions too quickly. Will re-read

Well it is not really acceleration. It is just multiplying the turn time a given value. If you want to keep acceleration, I can make another change and use the native acceleration of your controller.

I would heavily appreciate to the acceleration I originally had!
Many thanks!

This version retains the original acceleration of the incoming encoder. I took the scaling out and then just set the max output value to 1000.

I left the multiplier at 1 (no multiplication of incoming value).

Here are the rules:

// Set the negative value if > 0x40
// Subtract 0x40
if qq>64 then tt=qq-64
// Make it negative
if qq>64 then tt=tt*-1
// Positive
if qq<64 then tt=qq
// Show incoming value in log window
Log "Log incoming value is %tt%"
// Apply a multiplier (optional)
// Add the new incoming value to ga
// Don't let it go out of bounds
// Set max value here
// Don't go out of bounds
if ga<0 then ga=0
if ga>ss then ga=ss
// Show message in log window
Log "Log outgoing value is %ga%"

I also added a preset (Init) to set the global value of ga to 0 at project opened or keystroke of ctrl(up). You can use translator 0.2 to handle other housekeeping rules if you would like as well or add translators with incoming Perform ‘Init’ to execute other actions.

Edit: Original upload had an error. Use this one instead:

Mackie-VPot-to-14BitCC-w-scaling-acc-a.bmtp (2.5 KB)

Steve Caldwell
Bome Customer Care

Also available for paid consulting services: