Update Ring LEDs by switching preset



I wanted to update my LED from rings, after switching a preset. (Akai Apc40 MK II)

When I`m using a timer this don`t wanna run correctly. I wanted to update my LED rings to my takeover values from the knobs together.

For Example, if I`ll go to Channel 1 preset, my Knobs should be stay on this last saved point together with the ring LEDs. If I switch to Channel 2 preset, my Knobs should be switch to this last saved point together with ring LEDs.

I`ve tried to put a timer updater on preset activation with different global variables in the rules. But I can`t figure it out to activate my LEDs on it.

What did I forget to do?


kindest regards



If you post your project file I will take a look. As you switch presets, you will need to send the new values to the APC40 MKII LEDs as CC messages. If you are already doing this, make sure you have your APC40 MKII in the right mode. If I remember, the default Mode is 0 which does not allow remote update of LED rings. I think Mode 1 and 2 both allow for remote LED ring update but Mode 1 allows for both local and remote update. I may be wrong so check the manual.

When you start your project, have it send the following raw message to your APC40 MK2 depending on the mode you want


F0 47 7f 29 60 00 04 pp 09 07 01 f7


Where pp = 40 for mode 0 (the default) 41 for mode 1 and 42 for mode 2.


Steve Caldwell
Bome Customer Care

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




Hey Steve,


we took this controller to the Mode 2, after start the project by press ESC. So the value is on pp=42

If you take a look to this project, maybe you can remember some parts of it. 

I have changed only the ---LED to the new CC message, where I wanted to update the rings from the knobs. 

---right are here unedited, so maybe you can better understand, what`s going on here. 

You will see, that I`ve changed the CC=51 to CC=101, because I wanted to make my Nudge- and Nudge+ for changing channels of the knobs and update LED rings together, to use them like in the past CC=51 from 1 to 8 with different local variables.


It would be amazing, if the led rings could be updated together with the takeover of my channel knobs.


kindest regards




Well I'm not sure why you are updating the rings gy times where gw is the channel number. I think it should always be 8 times for 8 knobs.

Also, it looks like you have the counter for updating the rings wrong as you are not sending the right cc messages for the knobs in question which is probably why the LED's are not being updated.

So when you switch a channel, you need to

  1. Enable the appropriate preset
  2. On activate of the preset, put all of LED rings for that preset into temporary global variable space.
  3. Use timer to update the LED rings based on the temporary global variables

When changing the encoders in each channel/preset, you update the permanent global variable and also send back to the LED the same value of the knob you are turning.

Steve Caldwell
Bome Customer Care

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


Thank you for taking your time :slight_smile:

Normally I only should change the outgoing message in point 2-0. This is the efficient difference of all. I have for all temporary knobs and LEDs another global variable. You can see in the line 3-0 (Channel Change)

I can´t understand, why I get LED feedback from the CC=51 in Raw message from point 5-0 with 8 different local variables, but can`t get the feedback, when I wanna change the channel.
Should it be for each knob a seperate timer “on activation” with timer update which brings me the right variable?
So if I have 16 knobs would I need another preset with 16 on activation timer updates which gets the right value from each knob?

It would be nice to get a small example, where I could understand how it works with timers. I`ve tried similar things, this was the last try from all and is only a part of the whole project.

kindest regards

Hi Mike,


If I find a file that is similar, I will provide, however something of this complexity for new development is beyond the scope of free Bome support.  Also it is 10x more difficult to analyse someone else's project file then to use your own.  I found several flaws but obviously not all.   In general, I usually use the timer's counter global variable and then rules to determine which CC that I need to update on each iteration. I usually start with the highest and work my way down but that is really a matter of preference as long as all of the CC's are correct and each one is updated. The project file looks like something that I definiately was involved with initially, so if I can find what I started. I can certainly send to you again.


Steve Caldwell
Bome Customer Care

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



Hey Steve, thats sounds great! :) Yeah. You made an example for 2 knobs on 2 channels and I could continue for all 8 channels. It works awesome and everything is nice to use. But for now, I have tried out ableton with the APC40 MKII and have to say, its a very powerfull controller with Ableton.
But in User mode I have only 8 knobs as CC in channel 3 is to less for me. So I wanted to expand the knobs to 7 more channels. it would be change in Usermode with Nudge- and Nudge+ different channels with the help of BOME and getting this solved perfect. But the LED updater don`t wanna run as was before for the other project we did.

I cant understand how the timer works, so I cant configure it to this point. I`ve tried to seperate all points to find out, how I would get the ring LEDs to the different presets, but I think, this is more deeper than I can understand. Because we made in past the LED update for the 8 channel changer Note: CC51 which are the 8 bright buttons on the MKII.

I wanted to convert the command from this to the Nudge or better to the different presets.
Normally it should run, if I give for my different global variables on the knobs similar to the LEDs from the rings.

Example would be:
If my knob CC16 would have g0 on channel 1 and g1 on channel 2, temporary variable is gz.

So the LED ring would have for example for the same knob h0 on channel 1 and h1 on channel 2 temporary variable is hz.

g0=h0 on channel 1
g1=h1 on channel 2

So the timer would know, that it would update the ring on the same value as the knob value. But I can`t figure this out.

Thank you, for your explanation and I hope we could find a small solution for it :slight_smile:

The timer is a powerful feature on BOME so far as I can see, but I don`t understand the work from it.

kindest regards

Hi Mike,


Try the attached. I have it set up for 8 channels with 16 knobs. (128 global variables for knobs)

I use nudge+ and nudge- to change presets. Only one of the channel presets is active at a given time. At activation the temporary variables are updated with the permanent ones and the LED's are updated. Turning the knobs on a given preset (channel) updates the permanent values for the knob.

I use the global variable gc for the encoder timer counter.

I use numerical presets that all need to be put together for it to work. I set the variable gd to offset the first 2 presets which are note channel presets.

I deactivate all presets at startup using a preset timer global variable ge.

Then activate only the channel 1 preset.

The "Update Encoders" timer has rules to determine based on the iteration number, which encoder to update (pp) and the current value from temporary variable (qq).

I do the normal setting to Mode 2 upon Init.

Hopefully this will be enough to keep you moving along.

As usual all of my global variables used are in the Init Preset in the rules under "Initialize Globals" translator.

The Channel Change timer, enables the appropriate preset which in turn sets the temporary variables and then does the encoder LED update.

Have fun!

Steve Caldwell
Bome Customer Care

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


Hey Steve,

this updater is amazing! I know my problem now. Ive tried to do it with the CC Notes not with the RAW capture of the knobs. Of course all knobs have the first same hexa, with 2 other parts which change. So this was the result to could make it happen. I dont think so, if theres an other way to run the timer in CC right? If I take a deeper look I think, it was easy to do for the first part, but without your help I couldnt solve this in this one.

The new way to change presets is amazing. Dont know about thats give an easier way to do it =)
So if I see right, I can use global variables to send them to the presets? How the translator know, that the beginning is on 2? I would think, we need a rule for pp=2 for example and then get it from this point increment and decrement. But never thought that this runs automatic with only two global variables.

Okey, with the global variable to the encoder timer Im out. This I cant understand for what it is. But the other things seems to be a logical process, after spending some hours with BOME and your help to get deeper view of functionallity of it, I can understand it more and more.

I appreciate it very much that you take your time and your help with all the questions I had. I think, all the amazing stuff you can do with it. It must be a big fun place to make awesome things with different controllers =)

I think with this project I can combine it with my other project (of course with different global variables) to get it run.
I will give an update when I`m ready with it =)

One thing I´ve found in your attached file, if you will using this project for future: On 0-5 = Update encoders in line “if 00==7 then qq=z5” there should be changed to “if oo==6 then qq=z5” then all rings update perfectly :slight_smile:

kindest regards

Yeah there may be a typo or two so look it over and test it closely. I just did a quick run through test but did not test extensively.


Steve Caldwell
Bome Customer Care

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


Last thing. If I wanna change the channel, the last used knob goes within to the last saved point of next channel.

So if I use Knob 48 on channel 1, switch to channel 2 the knob value from knob 48 on channel 1 goes to the value from knob 48 on channel 2. If I go to channel 3 the other 2 knobs play around the values.
Did you know, what`s happen here?

I`ve could found out, that it could be something with 0-5-update encoders. I think something with the first 2 lines?
Because the timer makes an update from the last knobs I´ve used.

Hope you understand what I mean.

kindest regards


Maybe put a bit more of a delay on the update timer. It is possible the global variable update is not complete in time enough and the last value is updated before the update is complete. If not, just double check my math to make sure I'm updating the right variable in the update timer.


The error is in the rules of 0.5 "Update Encoders". Corrected rules are below:



// Which encoder

if oo==16 then pp=23

if oo==15 then pp=22

if oo==14 then pp=21

if oo==13 then pp=20

if oo==12 then pp=19

if oo==11 then pp=18

if oo==10 then pp=17

if oo==9 then pp=16

if oo==8 then pp=55

if oo==7 then pp=54

if oo==6 then pp=53

if oo==5 then pp=52

if oo==4 then pp=51

if oo==3 then pp=50

if oo==2 then pp=49

if oo==1 then pp=48

// which value

if oo==16 then qq=zf

if oo==15 then qq=ze

if oo==14 then qq=zd

if oo==13 then qq=zc

if oo==12 then qq=zb

if oo==11 then qq=za

if oo==10 then qq=z9

if oo==9 then qq=z8

if oo==8 then qq=z7

if oo==7 then qq=z6

if oo==6 then qq=z5

if oo==5 then qq=z4

if oo==4 then qq=z3

if oo==3 then qq=z2

if oo==2 then qq=z1

if oo==1 then qq=z0


Hey Steve, Ive tested the delay it seems, that this isnt it. Now it needs more time to change automatic the value of the linked controller. Did I need one more rule for the encoder updater maybe, who lets stay the current value from the knob and dont go with the next channel value?
The rules are exactly the same as before, or I can`t see the difference…

There was one rule that wasn\'t updating encoder #6 on the top correctly. I think you found this already. I tested everything else and it looks like it is working for me.

Which encoder is not updating correctly for you? I guess I don\'t understand the issue you are having.

When switching channels, all encoders will switch channels at the same time. The way it is written you cannot use encoder 1 on channel 1 then encoder 2 on channel 2. You would rather switch everything to channel 2, update encoder 2, then switch back to channel 1 if you want to update a channel 1 encoder again.


Hey Steve,


I could only do one screen capture at time, so what you see is, when the knobs go hard down or up, it runs after switching channel with nudge. If I click to the different channels, it happens the same. So it must be an update problem I think or could it give a rule, which holds on the right knob on the position after switching channel? Maybe a temporary problem?


LED rings updating perfect, but when I add translator with outgoing knob messages to link controller. After linking the controller happening this what you see.

I`ve used the takeover rules from the other project to see what happen. And it`s the same, the hard up and downs, after switching channels are exist again.

That`s why I think, that one rule more needs maybe on the updater?


I hope you can understand what I try to say =)

kindest reagards



What I didn't do is

  1. Send outgoing CC messages to the application. Right now all I do is update the CC value (and the LED's to those values when switching channels)
  2. Use the application to update the CC values if changing with the application. You will need to add translators to do this.


So I can understand why it is not working with your DAW.

I looked at your video and it seems that your issues are not with the LED ring update but with writing translators to and from your DAW to update the CC values and the LED's while you are on a given channel.

If you need this, let me know via email and I will provide you a quotation to make this happen.


Steve Caldwell
Bome Customer Care

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

Hey Steve, so normally I should only use the takeover rules from the MIDImix project and add a new translator, where we did it, but only have to clean up with the correct global variables or isn`t it?

If I can`t figure this out, of course I would write you an email. But I think, all the rules are on my hand, I only need to convert them to the right place.
You know, I only need a small example with 2 knobs and 2 channels, the rest I can figure out alone. Only so I can learn more about using BOME.

Its more tricky with LEDs as without LEDs. Theres the last step to get this thing to run.

kindest regards

Mike, make sure your MIDI mix uses different global variables


I'll set up a few translators when I get back to my computer



Hi Mike,

This version has a few translator set up for you that not only updates the global variables, but also does the conversion for you. Translators 2.2 and 2.3 for channel 1 and 3.2 and 3.3 for channel 2.

2.2 translates from MK2 to Application same MIDI message same channel

2.3 translates from Applicatino to MK2 same MIDI message same channel

3.2 translates from MK2 MIDI CH 1 to Application MIDI CH 2

3.3 translates from Application MIDI CH 2 to MK2 MDI CH 1

For the remaining, you need to

  1. Define the appropriate input and output for each translator
  2. For MK2 to Application, make it MIDI CH 1 to MIDI CH x
  3. For Applicatino to MK2, make it MIDI CH x to MIDI CH 1.


Steve Caldwell
Bome Customer Care

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