# Convert Absolute 1–127 Knob to Relative ±2-Step CC

**URL:** <https://forum.bome.com/t/convert-absolute-1-127-knob-to-relative-2-step-cc/7711>\
**Category:** Bome Products\
**Created:** [January 2, 2026, 1:33pm UTC](https://forum.bome.com/t/convert-absolute-1-127-knob-to-relative-2-step-cc/7711 "2026-01-02T13:33:47Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![bensmir.hbs](https://forum.bome.com/letter_avatar_proxy/v4/letter/b/c37758/32.png) [@bensmir.hbs](https://forum.bome.com/u/bensmir.hbs)\
**Post date:** [January 2, 2026, 1:33pm UTC](https://forum.bome.com/t/convert-absolute-1-127-knob-to-relative-2-step-cc/7711/1 "2026-01-02T13:33:47Z")

</div>

Hello, I have a SL73 mk2 keyboard, I would like to create a hack to remap the knob A which send CC7 on chan1 value 0-12a7 to sending relative CC value to cubase. In cubase the knob need to be set to Relative Twos Complement in order to do what I want.

The issue is when reaching 127, I can still physically move the knob and it keeps sending 127 and same thing when it reach 0. Is there a crazy workaround I can do ?

My second question is can I remap in the same way the main encoder of my keyboard, which only send CC100 on chan1 but when the keyboard reach program100, It doesn’t send anything (I assume the answer for this is no)

---

<div class="post-metadata">

**Author:** ![SteveC](https://forum.bome.com/user_avatar/forum.bome.com/stevec/32/8250_2.png) [@SteveC](https://forum.bome.com/u/SteveC)\
**Post date:** [January 2, 2026, 2:20pm UTC](https://forum.bome.com/t/convert-absolute-1-127-knob-to-relative-2-step-cc/7711/2 "2026-01-02T14:20:18Z")

</div>

Hi,

Please find the attached.

Translator 0.0 handles the conversion by comparing the last known absolute value of your encoder (in global variable “ga”) to the new value and will send either 127 for left movement)or 1 for right movement. When it reaches each end it continues to send 1 for right movement or 127 for left movement.

Translator 0.1 does the same but if the values are equal, it sends nothing. I used CC8 in this example. I use the global variable gc for the last known value.

In addition, I added translator 0.2 which simply toggles the value of global variable “gb”. If translator sees this value of other than 0, then it allows your to recenter your fader without sending anything. I use note 8 to toggle the value of gb.

[Absolute-to-Relative-01-7F-2026-01-02.bmtp](https://forum.bome.com/uploads/short-url/pVslBDUH234gBMa1ISaq5WPDct9.bmtp) (2.8 KB)

Steve Caldwell  
Bome Customer Care

* * *
_Also available for paid consulting services: bome@sniz.biz_

---

<div class="post-metadata">

**Author:** ![bensmir.hbs](https://forum.bome.com/letter_avatar_proxy/v4/letter/b/c37758/32.png) [@bensmir.hbs](https://forum.bome.com/u/bensmir.hbs)\
**Post date:** [January 3, 2026, 2:14am UTC](https://forum.bome.com/t/convert-absolute-1-127-knob-to-relative-2-step-cc/7711/3 "2026-01-03T02:14:59Z")

</div>

Hello, I tried to refine your translator to make it work, I arrived at this (yours was working only when my knob sent 60 to 65 approx)

> // qq = incoming absolute value  
> // ta = last absolute value
> 
> rr=qq-ta
> 
> // ignore no movement  
> if rr==0 then exit rules, skip Outgoing Action
> 
> // keep direction only  
> if rr\>0 then rr=1  
> if rr\<0 then rr=-1
> 
> // invert if needed  
> rr=rr\*-1
> 
> // rate limit: one step per message  
> ts=64+rr
> 
> ta=qq
> 
> Log ‘dir=%rr% out=%ts%’

I replaced all “g” in the global variables by “t”

So I could make it work but my only issue is that the values in cubase moves from minimum to maximum ultra fast when moving the knob + they seems to be moving by burst instead of linearly but that’s hard to say since it’s so fast

the knob in cubase is set to Relative Two Complement because I want the knob to move the pre-gain filter volume knob from whatever position it is

This is what my midi monitor register being sent to cubase (this log is only clockwise movement)

# MIDI Log

_Generated at 3 Jan 2026 at 03:13:30_

| Time | Device | Type | Channel | Data | Info |
| --- | --- | --- | --- | --- | --- |
| 03:13:11.795 | Bome MIDI Translator 1 | Control | Ch 1 | 7, 63 | CC 7 = 63 |
| 03:13:11.855 | Bome MIDI Translator 1 | Control | Ch 1 | 7, 63 | CC 7 = 63 |
| 03:13:11.935 | Bome MIDI Translator 1 | Control | Ch 1 | 7, 63 | CC 7 = 63 |
| 03:13:12.015 | Bome MIDI Translator 1 | Control | Ch 1 | 7, 63 | CC 7 = 63 |
| 03:13:12.095 | Bome MIDI Translator 1 | Control | Ch 1 | 7, 63 | CC 7 = 63 |
| 03:13:12.195 | Bome MIDI Translator 1 | Control | Ch 1 | 7, 63 | CC 7 = 63 |
| 03:13:12.275 | Bome MIDI Translator 1 | Control | Ch 1 | 7, 63 | CC 7 = 63 |
| 03:13:12.375 | Bome MIDI Translator 1 | Control | Ch 1 | 7, 63 | CC 7 = 63 |
| 03:13:12.435 | Bome MIDI Translator 1 | Control | Ch 1 | 7, 63 | CC 7 = 63 |
| 03:13:12.495 | Bome MIDI Translator 1 | Control | Ch 1 | 7, 63 | CC 7 = 63 |
| 03:13:12.575 | Bome MIDI Translator 1 | Control | Ch 1 | 7, 63 | CC 7 = 63 |
| 03:13:13.135 | Bome MIDI Translator 1 | Control | Ch 1 | 7, 63 | CC 7 = 63 |
| 03:13:13.202 | Bome MIDI Translator 1 | Control | Ch 1 | 7, 63 | CC 7 = 63 |
| 03:13:13.275 | Bome MIDI Translator 1 | Control | Ch 1 | 7, 63 | CC 7 = 63 |
| 03:13:13.355 | Bome MIDI Translator 1 | Control | Ch 1 | 7, 63 | CC 7 = 63 |
| 03:13:13.435 | Bome MIDI Translator 1 | Control | Ch 1 | 7, 63 | CC 7 = 63 |
| 03:13:13.495 | Bome MIDI Translator 1 | Control | Ch 1 | 7, 63 | CC 7 = 63 |
| 03:13:13.575 | Bome MIDI Translator 1 | Control | Ch 1 | 7, 63 | CC 7 = 63 |
| 03:13:13.635 | Bome MIDI Translator 1 | Control | Ch 1 | 7, 63 | CC 7 = 63 |
| 03:13:13.715 | Bome MIDI Translator 1 | Control | Ch 1 | 7, 63 | CC 7 = 63 |
| 03:13:13.791 | Bome MIDI Translator 1 | Control | Ch 1 | 7, 63 | CC 7 = 63 |
| 03:13:13.855 | Bome MIDI Translator 1 | Control | Ch 1 | 7, 63 | CC 7 = 63 |

| | | |

---

<div class="post-metadata">

**Author:** ![SteveC](https://forum.bome.com/user_avatar/forum.bome.com/stevec/32/8250_2.png) [@SteveC](https://forum.bome.com/u/SteveC)\
**Post date:** [January 3, 2026, 3:35am UTC](https://forum.bome.com/t/convert-absolute-1-127-knob-to-relative-2-step-cc/7711/4 "2026-01-03T03:35:17Z")

</div>

Please open the log window within Bome MIDI Translator Pro and check the boxes, Incoming, Outgoing, MIDI IN and MIDI out and move your CC1 knob right and then left. Then paste the results in a posting so I can take a look.

You could also look at [this tutorial.](https://youtu.be/VCvxPZawJyE)

Steve Caldwell  
Bome Customer Care

* * *
_Also available for paid consulting services: bome@sniz.biz_

---

<div class="post-metadata">

**Author:** ![bensmir.hbs](https://forum.bome.com/letter_avatar_proxy/v4/letter/b/c37758/32.png) [@bensmir.hbs](https://forum.bome.com/u/bensmir.hbs)\
**Post date:** [January 3, 2026, 11:50am UTC](https://forum.bome.com/t/convert-absolute-1-127-knob-to-relative-2-step-cc/7711/5 "2026-01-03T11:50:24Z")

</div>

> 1: MIDI INPUT “SL CTRL” now successfully opened.  
> 2: MIDI IN [SL CTRL]: B0 07 65  
> 3: IN 0.0 Control Change on ch. 1 with CC#:7 (0x07) and any value set “qq” to value=101  
> 4: 0.0:21 dir=-1 out=63  
> 5: MIDI OUT [Bome MIDI Translator 1 Virtual Out]: B0 07 3F  
> 6: OUT 0.0 Control Change on ch. 1 with CC#:7 (0x07) and value:ts=63  
> 7: MIDI IN [SL CTRL]: B0 07 65  
> 8: IN 0.0 Control Change on ch. 1 with CC#:7 (0x07) and any value set “qq” to value=101  
> 9: MIDI IN [SL CTRL]: B0 07 66  
> 10: IN 0.0 Control Change on ch. 1 with CC#:7 (0x07) and any value set “qq” to value=102  
> 11: 0.0:21 dir=-1 out=63  
> 12: MIDI OUT [Bome MIDI Translator 1 Virtual Out]: B0 07 3F  
> 13: OUT 0.0 Control Change on ch. 1 with CC#:7 (0x07) and value:ts=63  
> 14: MIDI IN [SL CTRL]: B0 07 66  
> 15: IN 0.0 Control Change on ch. 1 with CC#:7 (0x07) and any value set “qq” to value=102  
> 16: MIDI IN [SL CTRL]: B0 07 67  
> 17: IN 0.0 Control Change on ch. 1 with CC#:7 (0x07) and any value set “qq” to value=103  
> 18: 0.0:21 dir=-1 out=63  
> 19: MIDI OUT [Bome MIDI Translator 1 Virtual Out]: B0 07 3F  
> 20: OUT 0.0 Control Change on ch. 1 with CC#:7 (0x07) and value:ts=63  
> 21: MIDI IN [SL CTRL]: B0 07 67  
> 22: IN 0.0 Control Change on ch. 1 with CC#:7 (0x07) and any value set “qq” to value=103  
> 23: MIDI IN [SL CTRL]: B0 07 68  
> 24: IN 0.0 Control Change on ch. 1 with CC#:7 (0x07) and any value set “qq” to value=104  
> 25: 0.0:21 dir=-1 out=63  
> 26: MIDI OUT [Bome MIDI Translator 1 Virtual Out]: B0 07 3F  
> 27: OUT 0.0 Control Change on ch. 1 with CC#:7 (0x07) and value:ts=63  
> 28: MIDI IN [SL CTRL]: B0 07 68  
> 29: IN 0.0 Control Change on ch. 1 with CC#:7 (0x07) and any value set “qq” to value=104  
> 30: MIDI IN [SL CTRL]: B0 07 69  
> 31: IN 0.0 Control Change on ch. 1 with CC#:7 (0x07) and any value set “qq” to value=105  
> 32: 0.0:21 dir=-1 out=63  
> 33: MIDI OUT [Bome MIDI Translator 1 Virtual Out]: B0 07 3F  
> 34: OUT 0.0 Control Change on ch. 1 with CC#:7 (0x07) and value:ts=63  
> 35: MIDI IN [SL CTRL]: B0 07 69  
> 36: IN 0.0 Control Change on ch. 1 with CC#:7 (0x07) and any value set “qq” to value=105  
> 37: MIDI IN [SL CTRL]: B0 07 6A  
> 38: IN 0.0 Control Change on ch. 1 with CC#:7 (0x07) and any value set “qq” to value=106  
> 39: 0.0:21 dir=-1 out=63  
> 40: MIDI OUT [Bome MIDI Translator 1 Virtual Out]: B0 07 3F  
> 41: OUT 0.0 Control Change on ch. 1 with CC#:7 (0x07) and value:ts=63  
> 42: MIDI IN [SL CTRL]: B0 07 6A  
> 43: IN 0.0 Control Change on ch. 1 with CC#:7 (0x07) and any value set “qq” to value=106  
> 44: MIDI IN [SL CTRL]: B0 07 69  
> 45: IN 0.0 Control Change on ch. 1 with CC#:7 (0x07) and any value set “qq” to value=105  
> 46: 0.0:21 dir=1 out=65  
> 47: MIDI OUT [Bome MIDI Translator 1 Virtual Out]: B0 07 41  
> 48: OUT 0.0 Control Change on ch. 1 with CC#:7 (0x07) and value:ts=65  
> 49: MIDI IN [SL CTRL]: B0 07 69  
> 50: IN 0.0 Control Change on ch. 1 with CC#:7 (0x07) and any value set “qq” to value=105  
> 51: MIDI IN [SL CTRL]: B0 07 68  
> 52: IN 0.0 Control Change on ch. 1 with CC#:7 (0x07) and any value set “qq” to value=104  
> 53: 0.0:21 dir=1 out=65  
> 54: MIDI OUT [Bome MIDI Translator 1 Virtual Out]: B0 07 41  
> 55: OUT 0.0 Control Change on ch. 1 with CC#:7 (0x07) and value:ts=65  
> 56: MIDI IN [SL CTRL]: B0 07 68  
> 57: IN 0.0 Control Change on ch. 1 with CC#:7 (0x07) and any value set “qq” to value=104  
> 58: MIDI IN [SL CTRL]: B0 07 67  
> 59: IN 0.0 Control Change on ch. 1 with CC#:7 (0x07) and any value set “qq” to value=103  
> 60: 0.0:21 dir=1 out=65  
> 61: MIDI OUT [Bome MIDI Translator 1 Virtual Out]: B0 07 41  
> 62: OUT 0.0 Control Change on ch. 1 with CC#:7 (0x07) and value:ts=65  
> 63: MIDI IN [SL CTRL]: B0 07 67  
> 64: IN 0.0 Control Change on ch. 1 with CC#:7 (0x07) and any value set “qq” to value=103  
> 65: MIDI IN [SL CTRL]: B0 07 66  
> 66: IN 0.0 Control Change on ch. 1 with CC#:7 (0x07) and any value set “qq” to value=102  
> 67: 0.0:21 dir=1 out=65  
> 68: MIDI OUT [Bome MIDI Translator 1 Virtual Out]: B0 07 41  
> 69: OUT 0.0 Control Change on ch. 1 with CC#:7 (0x07) and value:ts=65  
> 70: MIDI IN [SL CTRL]: B0 07 66  
> 71: IN 0.0 Control Change on ch. 1 with CC#:7 (0x07) and any value set “qq” to value=102  
> 72: MIDI IN [SL CTRL]: B0 07 65  
> 73: IN 0.0 Control Change on ch. 1 with CC#:7 (0x07) and any value set “qq” to value=101  
> 74: 0.0:21 dir=1 out=65  
> 75: MIDI OUT [Bome MIDI Translator 1 Virtual Out]: B0 07 41  
> 76: OUT 0.0 Control Change on ch. 1 with CC#:7 (0x07) and value:ts=65  
> 77: MIDI IN [SL CTRL]: B0 07 65  
> 78: IN 0.0 Control Change on ch. 1 with CC#:7 (0x07) and any value set “qq” to value=101  
> 79: MIDI IN [SL CTRL]: B0 07 64  
> 80: IN 0.0 Control Change on ch. 1 with CC#:7 (0x07) and any value set “qq” to value=100  
> 81: 0.0:21 dir=1 out=65  
> 82: MIDI OUT [Bome MIDI Translator 1 Virtual Out]: B0 07 41  
> 83: OUT 0.0 Control Change on ch. 1 with CC#:7 (0x07) and value:ts=65  
> 84: MIDI IN [SL CTRL]: B0 07 64  
> 85: IN 0.0 Control Change on ch. 1 with CC#:7 (0x07) and any value set “qq” to value=100

this is the current translator 1

> this is the current translator 1  
> // qq = incoming absolute value  
> // ta = last absolute value
> 
> rr=qq-ta
> 
> // ignore no movement  
> if rr==0 then exit rules, skip Outgoing Action
> 
> // keep direction only  
> if rr\>0 then rr=1  
> if rr\<0 then rr=-1
> 
> // invert if needed  
> rr=rr\*-1
> 
> // rate limit: one step per message  
> ts=64+rr
> 
> ta=qq
> 
> Log ‘dir=%rr% out=%ts%’

(output is ts)

---

<div class="post-metadata">

**Author:** ![bensmir.hbs](https://forum.bome.com/letter_avatar_proxy/v4/letter/b/c37758/32.png) [@bensmir.hbs](https://forum.bome.com/u/bensmir.hbs)\
**Post date:** [January 3, 2026, 12:07pm UTC](https://forum.bome.com/t/convert-absolute-1-127-knob-to-relative-2-step-cc/7711/6 "2026-01-03T12:07:48Z")

</div>

I have tested the tutorial project from the video you linked, in fact it works way better, but when my hardware knob reaches the minimum or the maximum, it keeps sending 0 or 127, and this is where the translator break. Since it’s not a fader but a knob, I cannot use the “center” feature, because I’d need to be turning the knob for 10 seconds before it goes back to the middle

1: MIDI IN [SL CTRL]: B0 07 00  
2: IN 0.1 Control Change on ch. 1 with CC#:7 (0x07) and any value set “pp” to value=0  
3: OUT 0.1 Timer qq times ‘Fader 1’: 0 ms (initial delay: 0 ms)  
4: MIDI IN [SL CTRL]: B0 07 00  
5: IN 0.1 Control Change on ch. 1 with CC#:7 (0x07) and any value set “pp” to value=0  
6: OUT 0.1 Timer qq times ‘Fader 1’: 0 ms (initial delay: 0 ms)  
7: MIDI IN [SL CTRL]: B0 07 00  
8: IN 0.1 Control Change on ch. 1 with CC#:7 (0x07) and any value set “pp” to value=0  
9: OUT 0.1 Timer qq times ‘Fader 1’: 0 ms (initial delay: 0 ms)  
10: MIDI IN [SL CTRL]: B0 07 00  
11: IN 0.1 Control Change on ch. 1 with CC#:7 (0x07) and any value set “pp” to value=0  
12: OUT 0.1 Timer qq times ‘Fader 1’: 0 ms (initial delay: 0 ms)  
13: MIDI IN [SL CTRL]: B0 07 00  
14: IN 0.1 Control Change on ch. 1 with CC#:7 (0x07) and any value set “pp” to value=0  
15: OUT 0.1 Timer qq times ‘Fader 1’: 0 ms (initial delay: 0 ms)  
16: MIDI IN [SL CTRL]: B0 07 00  
17: IN 0.1 Control Change on ch. 1 with CC#:7 (0x07) and any value set “pp” to value=0  
18: OUT 0.1 Timer qq times ‘Fader 1’: 0 ms (initial delay: 0 ms)  
19: MIDI IN [SL CTRL]: B0 07 00  
20: IN 0.1 Control Change on ch. 1 with CC#:7 (0x07) and any value set “pp” to value=0  
21: OUT 0.1 Timer qq times ‘Fader 1’: 0 ms (initial delay: 0 ms)  
22: MIDI IN [SL CTRL]: B0 07 00  
23: IN 0.1 Control Change on ch. 1 with CC#:7 (0x07) and any value set “pp” to value=0  
24: OUT 0.1 Timer qq times ‘Fader 1’: 0 ms (initial delay: 0 ms)

---

<div class="post-metadata">

**Author:** ![bensmir.hbs](https://forum.bome.com/letter_avatar_proxy/v4/letter/b/c37758/32.png) [@bensmir.hbs](https://forum.bome.com/u/bensmir.hbs)\
**Post date:** [January 3, 2026, 12:31pm UTC](https://forum.bome.com/t/convert-absolute-1-127-knob-to-relative-2-step-cc/7711/7 "2026-01-03T12:31:45Z")

</div>

OK I found a working solution, let me write it and you tell me if you think it’s optimized …. a few minutes

---

<div class="post-metadata">

**Author:** ![bensmir.hbs](https://forum.bome.com/letter_avatar_proxy/v4/letter/b/c37758/32.png) [@bensmir.hbs](https://forum.bome.com/u/bensmir.hbs)\
**Post date:** [January 3, 2026, 12:39pm UTC](https://forum.bome.com/t/convert-absolute-1-127-knob-to-relative-2-step-cc/7711/8 "2026-01-03T12:39:08Z")

</div>

Translator 1: Input movement  
incoming CC7, stored as pp  
rules :  
// Disable output so you can center encoder  
if gb==1 then exit rules, skip Outgoing Action  
// Determine Count

qq=pp-ga  
// Down  
if qq\<0 then gc=127  
// Up  
if qq\>0 then gc=1  
// Fix counter to positive  
if qq\<0 then qq=qq\*-1

outgoing : timer 1

—

Translator 2 : Output

Incoming : Timer Fader 1

rules :  
// Edge mode: do NOT move virtual position

if gd==1 then exit rules, execute Outgoing Action

// Normal mode  
if gc==127 then ga=ga-1  
if gc==1 then ga=ga+1

outgoing : CC7 gc

* * *

translator 3 : MINIMUM Edge Injector  
incoming CC7 = 0  
rules :

// Only if truly at minimum  
if ga!=0 then exit rules, skip Outgoing Action  
if gb==1 then exit rules, skip Outgoing Action

// Mark edge mode  
gd=1

// Force DOWN  
gc=127  
qq=1

Outgoing : Timer Fader 1

* * *

translator 4 : MINIMUM Clear Edge Injector variable to reset to normal behavior

incoming : CC7 pp

rules :

// Only when leaving minimum

if ga!=0 then exit rules, skip Outgoing Action

// Only if value is above minimum

if pp==0 then exit rules, skip Outgoing Action

// Clear edge mode  
gd=0

outgoing : nothing

and the same for the maximum edge

---

<div class="post-metadata">

**Author:** ![SteveC](https://forum.bome.com/user_avatar/forum.bome.com/stevec/32/8250_2.png) [@SteveC](https://forum.bome.com/u/SteveC)\
**Post date:** [January 3, 2026, 1:59pm UTC](https://forum.bome.com/t/convert-absolute-1-127-knob-to-relative-2-step-cc/7711/9 "2026-01-03T13:59:11Z")

</div>

If it works for you, then that is OK. I cannot really comment because the initial solution I gave should have worked if you described what you wanted correctly. You never posted the log as I suggested (only the end points).

I don’t think there is a need for a timer here although maybe I used one in the tutorial I pointed you to.

Steve Caldwell  
Bome Customer Care

* * *
_Also available for paid consulting services: bome@sniz.biz_
