Turning a MIDI Controller into a 'Stream Deck' using Bome MIDI Translator

Hi - attempting to create a Stream Deck equivalent using Bome.

Wondering if its possible to make pad LEDs ‘Always-On’ so they backlight any labels stuck on them.

Besides that I wonder if anyone has any suggestions for this. I will be using the new Perform function surely


Hi and welcome back!

Since this question was not directly related to APC-MINI MK2, I split it into a new topic.

Well yes, you can control LEDs on MIDI controllers with MT Pro if the controller supports it. This can get you similar partial support of what Stream Deck can do.
Of course there are no API’s or ICON updates that Stream Deck handles.

On the forum there are several samples of how to manipulate LED’s. Also there is this tutorial which give an example of LED feedback.

Of course with the new Perform capability, you could set Perform parameters to an action that sends MIDI out back to your controller.

Let me know more specifically what you want to do and with what controller type and perhaps I can give you a good example using Perform.

The answer I gave to the original topic you posted might also help but it looks much more complex than what you are trying to do.

Steve Caldwell
Bome Customer Care

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

Hi Steve :wave:

I’d like to turn an APC40mk2’s pads into a makeshift Stream Deck, primarily for ‘one-click’ adding of plug-ins in Ableton.

This is done with a sequence of keyboard shortcuts:

‘”Plugin name”’

Of course, a delay before the first Enter is preferable/necessary.

Less important: I’m hoping to make the LEDs Always-On, various colors for color-coding (Blue = compressor presets, Green = EQ presets, etc)

(I’ve made some nice labels in the past with an HP Sprocket printer… maybe I can find some small alphabet stickers, that would backlight nicely.)

Well keystrokes are a bit difficult in MT Pro, however it is possible. You just have to assign a note number for every possible outgoing keystroke. In this case I assigned them loosely based on their ascii codes that would be used for serial data.

For this exersize, I called the plugin name ‘Hi’ so I only defined 4 keystroke translators

  • Cmd(F) - Control F on my Windows machine
  • H
  • i
  • Return

If you want more keystrokes, you will have to add similar translators for each keystroke desired.

The perform action takes two incoming parameters. The first is the ascii key code and the second is the amount of delay you want before you send the keystroke. The delay is in milliseconds.

So this is how it works

Translator 0.0 takes a note on note 0 value 127 for a trigger input.
The outgoing action is Perform ‘Button1’ with a value of 0 (which is the sequence number.
Translator 0.1 looks at the sequence number and decided which character to send and what delay to add.

One of the rules is to trigger a Perform ‘Keystroke’ action with the character number and the delay

Then the outgoing action triggers itself again after incrementing the sequence number

IMPORTANT - There is a rule to make sure after all characters are sent, no more Perform actions are triggered.

The application must have focus because it will send to the currently focused application. You could first add another translator to focus the application if you want, then put a delay on the other translators that are already written.

Here are the rules of incoming Perform ‘Button1’. You could do similar translators for other desired sequences.

// pp is the sequence number

// default delay in ms

// What sequence number are we on
// rr will hold the ascii character number
// and ss the outgoing delay

if pp==0 then rr=6
// additional delay for cmd f
if pp==0 then ss=20
if pp==1 then rr=72
if pp==2 then rr=105
// additional delay for the first return
if pp==3 then ss=20
if pp==3 then rr=13
if pp==4 then rr=13
// No more characters in this sequences so quit
if pp>4 then exit rules, skip Outgoing Action

// Increment the sequence number
Log "Button One Pressed"
// rr is the key id and ss is the delay
Perform "Keystroke", rr,ss

// outgoing action here - pp is the sequence number
// we are calling ourself

This requires MT Pro 1.9.1 or greater to work as ‘Perform’ is a new feature that just released last month. Note, there is no need for any global variables using this technique which shows the true power of ‘Perform’ and parameter passing.

Perform-Key-Sequence.bmtp (3.4 KB)

Steve Caldwell
Bome Customer Care

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

Oh and lighting LED’s on your controller is pretty simple but probably requires a different thread.

Steve Caldwell
Bome Customer Care

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

Ok, Thank you!

I didn’t realize keystrokes were that cumbersome.

Maybe it is best to use Bome to output a simple key combo, and let that trigger a macro app like Keysmith (AutoHotKey for windows) for the more complex keypress sequence.

Yes, for Mac I usually use Keyboard Maestro and send MIDI to that and have Keyboard Maestro do the text (macro) generation. On Windows, I use AutoHotkey. I just wanted to illustrate that it is possible using Bome MIDI Translator alone.

Note, that for AutoHotkey, you either need to find or write a script to convert MIDI to keystrokes. There may be another application out there for Windows more suitable for macro substitution.

Steve Caldwell
Bome Customer Care

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

Gotcha - I will check out Keyboard Maestro for the MIDI input, surely Keysmith can’t do that.

Maybe I’ll resolve to buying a Stream Deck during the inevitable upcoming #blackfriday/#cybermonday sales. Those buttons do look pretty :wink: