Bome's with Less than Cooperative Controller

Hi!

So Ive run into a bit of a conundrum. I am using the Akai MPD226 as a main controller for Ableton Live. That in itself is awesome. Great controller with the buttons/pads/knobs that I need. However, it doesn't accept MIDI to change the LED light behind the pads. The only way it will, is to preset the colors and behavior in the controller editor (Eg. Note on color - green, note off color - red, momentary, etc)

If I want the pad in the example above to light green, I then have to actually send a note on message to that pad from Bomes to light the pad. HOWEVER... the controllers internal also tracks the status and interferes. (Example: Pad one and two are set up on the controller in toggle mode - first press on, next press off, note off red, note on green. In Bomes, I have them set up on a mute group ...thank you steve. The idea here is to ensure that only one pad at a time is actually sending a note on message. So I play pad 1, and it toggles on, lighting green. Then I play pad 2 which toggles on, turns green, and through Bomes, sends a note off message to the controller, turning off pad 1 and lighting it red. All is good. Until.... When I go to play pad 1 again, the controllers computer thinks that the pad needs to be struck again to turn it off. So I actually have to hit it twice to turn it on. Once to satisfy the controller computer with a note off message, once to actually turn it back on. I hope that makes sense.)

To get around that, I changed the pads on the controller to momentary, and altered the mute group coding. So now, when I press a pad, it sends the note off messages to all the other pads in the mute group, and on a 35ms delay, sends a note on message back to the controller.

Sometimes my work around solution works, but if I hold the pad for a fraction of a second too long, the controllers computer will send a note off message after Bomes sends the note on message. Turning off my LED feedback.

HERE IS THE ACTUAL QUESTION.... sorry for all the back story.

How can I effectively work with a controller that has its own absolute computer, and make it function like I want it to? (help specifically in the above example would be awesome, and any general feedback would also be great.)

 

So sorry for the long post, Im just at a loss of what to do 🙂 Thanks for any help you may be able to provide!

 

PS - I have attached the Bomes Project File. The preset in question is KEYS MUTE GROUP.


Attachments:
1499440945554_switcher.bmtp

Hi,

I think I can help. The solution would involve the use of a timer and a set of global variables. You could have the timer run at continuous intervals, and update the LED’s based on the value of your global variables. The controller still might send note off and turn off the pad, however your timer would fix it at the next iteration.

The trick would be how you want to balance out the use of your timer (what interval). Too fast and you consume more computer horsepower. Too slow and the light update gets delayed. On projects I have, I like to set it up for 1 second intervals. I can live with an inaccurate LED state for one second.

Another idea is instead of a continuous timer, just have a timer that updates on every incoming messages. That way the note off message would trigger the timer and the timer would fix it immediately.

Steve

 

bome@sniz.biz

 

Independent Bome Programming Specialist

 

Bome Q&A moderator

 

Hmmmmm, I like the incoming message update idea…. how would one go about setting that up?

Here is an example I created with 2 buttons that are mutually exclusively lit (I use Lauchpad Mk 2)

You will note that neither update LED directly. They set global variables g1 and g2 only

Then the timer gets kicked off with the 3rd translator (any key press note on message on channel 1)

Led Update updates the light status (you will need to change this to LED status for your controller, on Launchpad MK2 5=red and 0 is off.

I also created a test button to set all global variable to zero thereby when the timer fires, both LED’s are turned off.

 


Attachments:
1499443766725_LED-Timer-Example-2017-07-07.bmtp

That’s amazing! Ok one last question on this topic…. and thank you so much for your help! Is it possible to set a timer like you set above, but have it canceled when another note plays?

Any time you start the same timer, it resets at that point. For instance if you set timer 1 for 10 seconds with 1 translator, and 5 seconds later you set the same timer, it will go off at 15 seconds (the 5 of the first time and 10 for the second). With that said, once a timer is set, I don’t believe you can entirely kill it until the next iteration, however I might be wrong on that point as I have never tested that.

I’ll give that a test and let you know what I find out.

Steve

Yeah! That would be incredible! I’ll try and test it too… but you’ll probably have better luck. I’m just thinking of putting that timer into the same mute group as the the notes, because when I change notes there’s no need for that timer anymore…

OK, here is what I found out.
If you delay the outgoing action of the timer, it cannot be killed until the outgoing action delay because the timer
does not yet exist.

However if you delay the incoming action, you can kill or reset the timer any time you want with another translator

So here are a few scenarios

1) On keystroke X Start 1 second one shot timer with 0ms delay. Have the timer increment ga by 1000
2) On same keystroke X above start 500ms one shot timer with 0ms delay. Have timer increment ga by 500
3) Have Timer increment ga by 1000
Result = 2000 (1000 from first rule, 500 from the second rule and 1000 from the timer itself.

3850420 – IN 1.0 Physical Keys: Up
3850420 – RULE 1.0:1 assignment: (ga=1000) = 1000
3850420 – OUT 1.0 One-shot timer “1 Second”: 1000 ms delay
3850420 – IN 1.1 Physical Keys: Up
3850420 – RULE 1.1:1 expression: (ga=ga+500) = 1500
3850420 – OUT 1.1 One-shot timer “1 Second”: 0 ms delay
3850420 – IN 1.3 On timer “1 Second”
3850420 – RULE 1.3:1 expression: (ga=ga+1000) = 2500

Time to execute is immediate since second timer overrides first one

————–
If I turn delay Item 2 above by 500ms

 

3787225 – IN 1.0 Physical Keys: Up
3787225 – RULE 1.0:1 assignment: (ga=1000) = 1000
3787225 – OUT 1.0 One-shot timer “1 Second”: 1000 ms delay
3787225 – IN 1.1 Physical Keys: Up
3787225 – RULE 1.1:1 expression: (ga=ga+500) = 1500
3787225 – OUT 1.1 One-shot timer “1 Second”: 500 ms delay
3787725 – IN 1.3 On timer “1 Second”
3787725 – RULE 1.3:1 expression: (ga=ga+1000) = 2500

Time time to execute is 500ms but same total value

————
If instead of delay, I kill after 500ms and increment ga by 500 then value is 1500 (translator 1 and kill value), timer never fires

3737114 – IN 1.0 Physical Keys: Up
3737114 – RULE 1.0:1 assignment: (ga=1000) = 1000
3737114 – OUT 1.0 One-shot timer “1 Second”: 1000 ms delay
3737114 – IN 1.2 Physical Keys: Up
3737114 – RULE 1.2:1 expression: (ga=ga+500) = 1500
Time to Execute is 500ms

——

In the above examples
Rule 1.0 is 1 second timer start
Rule 1.1 is 1/2 second restart (either no delay or 500ms delay)
Rule 1.2 is 1/2 second timer kill
Rule 1.3 is 1 Second timer itself

Here is the test file I ran


Attachments:
1499480596315_Timer-Behavior-Test-2017-0.bmtp

Yes if you have any note start a 1 shot LED status timer that should work. Then have the status timer set the LED state of all of the notes.