OK - having been waylaid a little by other less important matters (work…), I dove deeper into the API than originally intended and I have a first pass that should show you my vision while keeping you frustrated that it’s still all ever so slightly out of reach of being exactly what you want. I’d appreciate some feedback, though, to make sure I’m on the right track.
VERY IMPORTANT!!! The first thing the script does is dump a new mapping into your Keylab’s working memory, overwriting anything you have in your working memory. It doesn’t write anything to the preset locations, so if you have any custom mapping that you have performed on the keyboard itself or via MIDI Control Center, make sure to either store it as a preset or back it up in some other way (e.g. via MIDI Control Center). I’d feel a little bad if you lose settings that you have spent hours crafting, but there isn’t going to be anything I can do about it if you don’t take this precaution prior to importing the script.
A couple of additional notes:
- The duration switch operation mode on switches 1-10 are turned off. This is because of Cubase’s behavior when it receives two MIDI messages with the exact same timestamp, as the Keylab sends on short presses. I may take this up with Steinberg at some point, but for right now we have bigger fish to fry.
- I’ve mapped the Bank 1 and Bank 2 buttons to cycle through the defined mapping pages BUT the Keylab switches between the two banks. When you’re on the Mixer mapping page, then, the encoders, faders and volume knob won’t work if Bank 2 is lit. I’ll tackle this at some point.
- I have mapped switches 1-8 to mute channels 1-8 in the currently selected mixer bank.
- Use switches 9 & 10 to select previous and next mixer bank, respectively.
- I haven’t done anything with the pads yet.
- The pitchwheel isn’t hooked up.
- The Program and Category push encoders support both twisting and prodding, transmitting different control codes for each mode of interaction. Consequently, my earlier initial pass of adding a button under the knob is no longer needed. I don’t have these configured to my taste at the moment, though, so they’re simply indicating “left” and “right” rather than an absolute value (I’m not at by board right now to check, but from memory I suspect they’re operating in relative mode).
Now, some points of particular interest:
- You can use the MIDI Controller editor to map controls that I haven’t mapped yet. Right click the control and select Pick for MIDI Remote Mapping.
- You can even re-map buttons those that I have mapped by default!
- Enjoy the transport and how the LEDs stay in sync, even when you change state via the UI or some other means!
- Marvel at how the colors of the encoders and faders sync with the selected mixer bank!
- Be amazed that the mute switch LEDs change to show the current state of the associated track mute buttons!
- Coo over the automatic labeling of mapped controls!
- Chuckle at the behavior of the encoders and faders operating in pickup mode!
OK - so with the exception of the control of the LEDs, all the groovy stuff comes without any (or much) effort courtesy of the API, so as you can see I’ve had a lot of fun discovering what can be done beyond the drag-and-drop mapping that you and I both started out with.
The code is a bit ugly at the moment and I’ll probably look to tidy it up, but functionality comes first. As I noted above, there are some quirks that definitely need attention and I’ll get around to that at some point. When I do I’ll probably formalize it by creating a fork in GitHub, but until then I’d warn you (and anyone else) to treat this as demo-ware. You may find it serves a purpose and thus fills a gap, any by all means be happy with it as it is, but do expect that there will be quirks that may annoy. I will update it over time.
Let me know how you get on, and have fun!
Arturia_KeyLab 88_mk_i.midiremote (32.2 KB)