Mapping Joystick to Screen with Custom MIDI Controls

I need to map this joystick to a specific section of the screen as mouse positioning. I’ve watched some videos on YouTube, but I need to divide half of the X-axis into 127 MIDI values and the other half into another 127 MIDI values on a different CC. Similarly, I need to do the same for the Y-axis.

Additionally, I need the mapping to cover only a specific portion of the screen for maximum precision, with the center point at coordinates that I define. I also need two centers that I can switch between, as shown in the image.

For example: CC1 with 127 MIDI values spread across 300px from pixel X300 Y115 to pixel X300 Y415. Anything that helps me achieve this would be greatly appreciated. Thank you for your help!


Is the joystick sending any MIDI? Bome MIDI Translator Pro cannot map gaming joystick to MIDI. If it is currently sending MIDI, then what values does it send in each direction?

Steve Caldwell
Bome Customer Care


Also available for paid consulting services: bome@sniz.biz

Sure, it sends MIDI. Currently, I have it set up so that each axis is divided into 127 values. However, I’d like to have each axis divided into 127 values and then another 127 values on a different note (Together 254) starting from the center. I’ll explain this further with pictures.

I already mapped it based on this video: https://youtu.be/A2DJuv1zh-U?si=r778-itC0WCWUseQ, but instead of knobs, I used this joystick. The issue is that it’s not precise because the 127 MIDI velocity values are spread across the entire axis. (Picture 1, 2)

I’d like it to be more accurate, and there’s a setting where you can divide one axis into two sets of 127 MIDI values on two different CC notes. (Picture 3) I want to map this to a smaller portion of the screen for higher precision. (Picture 4)

Additionally, if possible, I’d like to be able to move the center or set it to a custom location rather than the middle of the screen. I hope we’re on the same page.




You may try this. You may need to modify rules based on polarity of your CC numbers and whether you want to reverse up/down or left/right directions.

Translator 1.0 looks at 4 CC’s and does the screen calculations from there.

if pp<3 then exit rules, skip Outgoing Action
if pp>6 then exit rules, skip Outgoing Action

if pp==3 then Goto "up"
if pp==4 then Goto "down"
if pp==5 then Goto "left"
if pp==6 then Goto "right"
exit rules, skip Outgoing Action

Label "up"
//Log "Log input qq=%qq%"
tt=qq-ga
tt=tt*-1
//Log "Log tt=%tt%"
ga=qq
gy=gy+tt
if ga>127 then ga=127
if ga<0 then ga=0
Goto "Done"

Label "down"
//Log "Log input qq=%qq%"
tt=qq-gb
tt=tt*-1
//Log "Log tt=%tt%"
gb=qq
gy=gy-tt
if gb>127 then gb=127
if gb<0 then gb=0
Goto "Done"

Label "left"
//Log "Log input qq=%qq%"
tt=qq-gc
tt=tt*-1
//Log "Log tt=%tt%"
gc=qq
gx=gx+tt
if gc>127 then gc=127
if gc==0 then gc=0
Goto "Done"

Label "right"
//Log "Log input qq=%qq%"
tt=qq-gd
tt=tt*-1
//Log "Log tt=%tt%"
gd=qq
gx=gx-tt
if gd>127 then gd=127
if gd==0 then gd=0


Label "Done"


Log "X=%gx% Y %gy% pp=%pp%"
//exit rules, skip outgoing action

Translator 0.2 sets (and documents global variables used)

// Initialize and document global variables used here
// Center Location on Screen
// x max
hx=1920
// y max
hy=1080
// x
gx=hx/2
// y
gy=hy/2
//cc 3 last known value
ga=0
//cc4 last known value
gb=0
//cc5 last known value
gc=0
//cc6 last known value
gd=0

Translator 0.3 sets the pointer to center position at startup based in the defined values of gx and gy in translator 0.2

Pointer-XY-Example-2024-12-12.bmtp (3.0 KB)

I’m also assuming center is with all 4 CC’s at 0.

Steve Caldwell
Bome Customer Care


Also available for paid consulting services: bome@sniz.biz

Thank you so much, everything works. I truly appreciate your help.