Pulling LED out information into BMT from Rekordbox

Hi, I am not sure if this is possible or not, I am a beginner.

I wish to pull the MIDI out data which Rekordbox is sending for controlling LEDs to BMT and then reinterpret that into my Launch Control XL. I would like to pull the data so that button state in the software is synced with the MIDI controller regardless of if I am pressing anything or not on the MIDI controller (direct sync behavior). Additionally I would like to change the color of the LEDs by adjusting the MIDI out value from 0-127.

Can this be done and how?

Thanks!

Hi and welcome to the Bome community!

We would need to see what data is coming out of Rekordbox. Set it’s MIDI output to BMT 1 and then in MT Pro set the input to Bome MIDI Translator 1 Virtual IN.

Then open the log window and check MIDI IN. You should be able to see what Rekordbox is sending in the log window. Then annotate a message as to what you were doing and then let me know what LED to light up and at what color. Then I can send an example that you can copy for other Rekordbox output activities. This assumes, of course, the Rekordbox is sending MIDI data.

Steve Caldwell
Bome Customer Care


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

I managed to connect Rekordbox to BMT, it does output LED data to the controller now regardless of if the buttons are pressed or not. The log says:

103: MIDI IN [Bome MIDI Translator 1 Virtual In]: B1 29 00
104: MIDI IN [Bome MIDI Translator 1 Virtual In]: B1 29 7F

This is for the Play/Pause button, Rekordbox is sending flashes when a song is paused, these two states repeat during a consistent interval. The current color is set to full bright yellow, which as far as I know, equivalent to MIDI OUT 127, on the other hand 79 is responsible for red, maybe we can make it red for now?

Also, I’d like to make 3 groups of 2 buttons; LEDs permanently lit up, one green, the other red. When one of these buttons is pressed, two things should happen, the other button in the group’s LED should turn off, while the LED of the pressed button should increase in brightness. I know Launch Control XL can do this, I’ve done it in Traktor, brightness is also defined by 0-127 values of MIDI Out, I just don’t know which numbers by heart.

Hopefully after this I can figure out shift/matrix behavior by myself, I would appreciate any documentation/tutorials for this.

Thank you for your blazing fast reply!

The attached file will send red to button one top row when play/pause is pressed. The controller needs to be in factory 1 mode. The velocity is 15 not 79.

The LaunchControl XL programmers guide describes the velocity color setting. I extracted text from there into the rules of the Group translators.

//The following tables of pre-calculated velocity values for normal use may also be helpful:
//Hex Decimal Colour Brightness
//0Ch 12 Off Off
//0Dh 13 Red Low
//0Fh 15 Red Full
//1Dh 29 Amber Low
//3Fh 63 Amber Full
//3Eh 62 Yellow Full
//1Ch 28 Green Low
//3Ch 60 Green Full
//The following tables of pre-calculated velocity values for normal use may also be helpful:
//Hex Decimal Colour Brightness
//0Ch 12 Off Off
//0Dh 13 Red Low
//0Fh 15 Red Full
//1Dh 29 Amber Low
//3Fh 63 Amber Full
//3Eh 62 Yellow Full
//1Ch 28 Green Low
//3Ch 60 Green Full
qq=15
rr=0

Also there is an Init preset that sets the bottom row of buttons to dim red and dim green in groups. This fires when the project starts up or when you hit the designated keystroke.

Finally I created 2 group buttons for the first group and set the colors as you described. You should be able to look at those translator as a model and create additional translators from there for your other groups. To find the note number you press the LC XL button and see what note number to send which is in hex. The second number is the note number. For instance 98 4c 7f is note on note 0x4c velocity 7f.

Note that Preset 1 is set to read from Rekordbox (BMT 1) and send to your Launch Control XL. Preset 2 is set to read form Launch Control XL and send to Launch Control XL. I did not set up anything to send to Rekordbox.

For more information about device selection, see this tutorial.

I set up my alias as follows.

image

You can learn more about aliases from this tutorial.

Rekordbox-LaunchControl-XL.bmtp (4.4 KB)

Good luck!

Steve Caldwell
Bome Customer Care


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

Okay, something is definitely happening with that preset, but it’s not acting the way I want, probably because of a mistake I made somewhere. Perhaps my routing is wrong?

LEDs in the bottom row are working as intended, but the Play/Pause button is not changing color, I cannot even map it unless I stop the ‘learn’ function while the button is pressed down.

Also, can I achieve all of this, but with a user preset? I want to be able to change potentiometer LED colors etc. which is only possible in Novation Components, an app designed for exactly that.

The translator Preset is set to receive from the Alias RecordBox. Please make sure you assign the alias ports so that it is receiving from the right port.

You can learn more about aliases from this tutorial.

User presets are customizable and so yes you can use them, however you need to use them with the Notes or CC’s that you program. You can send color information to the knob LEDs via a SysEx message as indicate on page 6 of the manual that I referenced earlier. In the example below I set the first knob color to green when sending CC64 to a value of anything other than 0. This is now translator 1.1

Rules

// set color
tt=60
if qq==0 then tt=0
// Set knob number
rr=0

Outgoing Raw MIDI

F0 00 20 29 02 11 78 08 rr tt F7

I also set this up to set your XL to Factory Mode1 on project start. See translator 0.2 and page 7 of the Launch Control XL Programmers Guide.

Rekordbox-LaunchControl-XL.bmtp (5.0 KB)

Steve Caldwell
Bome Customer Care


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

Thank you so much for setting me in the right direction, you are a blessing. I will take a break from asking questions and spend time figuring out everything myself from the materials you suggested.

Yeah, I’m just not smart enough for now I guess. I can’t figure out why the Play/Pause LED won’t change color. I can change the color in Traktor easily by changing MIDI out from 127 to 79, 79 is full bright red, 20 is green, 03 again is bright red etc.

It works normally, blinks when paused, stays on when a song is playing, but it won’t change color. What could be the cause?

EDIT:

I found through reverse engineering in Traktor that:

98 29 7F is Amber
98 29 4F is Red
98 29 20 is Green

There are multiple messages that send these colors, these are not the only ‘passwords’ for these colors

OK, try this. I noticed that you are sending on MIDI CH2 when my translator was set for MIDI CH1.

I created this mapping for the LCXL

if qq==127 then tt=63
if qq==79 then tt=15
if qq==32 then tt=60

Rekordbox-LaunchControl-XL.bmtp (5.1 KB)

Steve Caldwell
Bome Customer Care


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

LED changed color after I selected ‘Bome MIDI Translator 1 Virtual In’ as MIDI In and set the rule below. I think I am starting to get it now.

One more thing, if I want to turn off an LED if another LED is of specific value. Let’s say I want to turn off LED A when LED B reads ‘50’. How do I do that with conditional mapping?

  1. LED A ‘set variable to value’ e.g ‘fa’
  2. LED B ‘set variable to value’ e.g ‘pg’
  3. LED B rule: if fa==50 then pg=13 (in this case 13 is LED off state for Launch Control XL).

And then include that in MIDI out as a raw message?

Is my example correct?

You are close but you need to read the manual about variable naming conventions (Press F1 within MT Pro and you will see the PDF manual). fa is not a legal variable name.
But yes you read the value of one variable (button value) to determine the state of the other.

If you notice I set the state of 2 LED’s with translators 2.0 and 2.1. I this case I’m using local variables which are private to only the given incoming trigger of the translator. For sharing variables between translators, they need to be global variables. Again naming conventions for both global and local variables are in the manual.

98 49 qq 98 4A rr

By now, I have figured out most of the stuff that I need, but I haven’t been able to make a group of 3 buttons, where in any single moment, only one can be on. So, if Button 1 is on and I press Button 2, I want it to turn off Button 1, Button 3 to do the same etc, kind of like a switch.

Thank you again for your kind help!

OK, this gets a bit more complex. What you are talking about is radio buttons. Although this can be done with multiple global variables, it is a bit of a challenge to using Logic (if, or etc) to make it work. For this reason, I use the global variable ‘ga’ as a button map for buttons 2-4 on the top row. So if the value of ga to 1 then button 2 is lit, ga=2 then button 3 is lit and ga=4 then button 4 is lit.

Binary logic values are 1,2,4,8,16,32 etc. for bit positions 0,1,2,3,4,5 etc.

I initialize the button value the way I want in translator 0.4. Then I trigger a repeating timer 3 times (variable gb) called "Refresh Radio Group 1. This is done in translator 0.5. Then translator 0.6 does all the work of figuring out which bit is set and only lighting the bit that we want.

// decrement counter 
gb=gb-1
pp=gb
//Calculate which note
rr=pp+42
// get the bit value
tt=ga>>pp
// and with 1 to only get the bit
tt=tt&1
// and set the color
if tt==1 then qq=15

Then after initialization, you press buttons 2.4 on the top row and translator 2.2 kicks in. It looks to ensure the value is 42-44 and if it is outside the range it does nothing. Then it subtracts 42 to get the bit number and sets the value of ga based on which bit is set.

// Look for buttons 42-44 only
if pp<42 then exit rules, skip Outgoing Action
if pp>44 then exit rules, skip Outgoing Action
// subtract to get the bit position
tt=pp-42
// stuff the single bit into ga
ga=1<<tt
// set counter
gb=3

Finally it triggers the same repeating timer (translator 0.6) to iterate through the buttons again. Since we are only setting one bit in translator 2.2, this guarantees only one light is lit.

I’m sure there are other ways to do it. It is a bit difficult to set up but it is quite reliable once set up correctly. If you are using other buttons, of course you would need to change the note numbers to trigger the changes and change the calculations on the bit positions.

Rekordbox-LaunchControl-X-Radio-ButtonsL.bmtp (6.6 KB)

Steve Caldwell
Bome Customer Care


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

Video example

As the video above shows, this does work on paper, LEDs change colors and behave like radio buttons in Bome, but inside Rekordbox, the buttons stay on when another button from the group is pressed. I basically have 3 decks for DJing, therefore 3 headphone cues, I only want 1 to stay on at a single time.

Yet again, a huge thank you!

Well that makes sense since we are not sending any MIDI information to Rekordbox at this time. I would need to know what MIDI messages need to go to Rekordbox so that we can create a translator to send there.

Steve Caldwell
Bome Customer Care


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

I still haven’t been able to set up the radio buttons, I have given up. I am now trying to do something a bit simpler I think that only sounds complicated:

When a potentiometer is turned, I want its value to be stored in memory on every change but not output that value. Next, if a certain button is pressed, it should first recall the potentiometer’s last value stored in memory, second, output that to the same CC as the potentiometer, and third, it should allow the output of the potentiometer. All of that should happen at the same time (in practice at least, there can be a few ms delay between the first and the last action). When the button is pressed again (a toggle switch basically), it should again disable the output of the potentiometer and additionally output a value of 64 to potentiometer’s CC output which is mapped to the knob in the software, furthermore, if it’s pressed again, it should again recall the last position of the potentiometer whether the potentiometer has been moved or not.

To summarize, I am trying to emulate an ON/OFF switch, where only a knob exists, without the physical switch, I hope that makes sense. I guess some kind of timer and refresh script should be used?

Hi,

See the attached.
The first translator captures the value of cc3 into global variable ga. If gb==1 then it will also send out it’s value to cc3 otherwise it will not send anything

The second translator Note 3 On captures the value of ga. Then it toggles gb. If gb==0 it sends nothing but if gb==1 then it will send the value of ga and allow translator 1 to update values of cc3.

The third translator sends CC3 a value of 64 if gb=0.

Aliases are set up as follows. You will need to assign them based on your actual ports used.

image

You can learn more about aliases from this tutorial.

CC-Button.bmtp (1.9 KB)

Steve Caldwell
Bome Customer Care


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

I got it to work after removing

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

and replacing it with:

if gb==0 then qq=64

But the thing is, there is a 100ms or so delay after gb goes to 0. When I first press the button to turn it to 1, there are no issues, no delay. I have also noticed this delay when translating other functions like channels or other notes/ccs . Is there a way I can remove this delay?

EDIT: The delay disappeared for whatever reason, all is good for now. Thank you yet again, so much.

Yes, I’m not seeing any delays.

19409628 - IN   0.0 Control Change on ch. 1 with CC#:3 (0x03) and any value set 'qq' to value=61
19409628 - OUT  0.0 Control Change on ch. 1 with CC#:3 (0x03) and value:qq=61
19415240 - IN   0.1 Note On on ch. 1 with note:3 (0x03) and any velocity=127
19415240 - OUT  0.1 Control Change on ch. 1 with CC#:3 (0x03) and value:qq=64
19415240 - IN   0.2 Note On on ch. 1 with note:3 (0x03) and any velocity=127
19415240 - OUT  0.2 Control Change on ch. 1 with CC#:3 (0x03) and value:qq=64
19422571 - IN   0.0 Control Change on ch. 1 with CC#:3 (0x03) and any value set 'qq' to value=62
19423030 - IN   0.0 Control Change on ch. 1 with CC#:3 (0x03) and any value set 'qq' to value=63
19423320 - IN   0.0 Control Change on ch. 1 with CC#:3 (0x03) and any value set 'qq' to value=64
19426143 - IN   0.1 Note On on ch. 1 with note:3 (0x03) and any velocity=127
19426143 - OUT  0.1 Control Change on ch. 1 with CC#:3 (0x03) and value:qq=64
19426143 - IN   0.2 Note On on ch. 1 with note:3 (0x03) and any velocity=127
19430341 - IN   0.0 Control Change on ch. 1 with CC#:3 (0x03) and any value set 'qq' to value=63
19430341 - OUT  0.0 Control Change on ch. 1 with CC#:3 (0x03) and value:qq=63

Steve Caldwell
Bome Customer Care


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