creaktive / KeyLab_Essential_Hacks

Disgusting hack put together during a rainy weekend to enable Instant Mapping for Arturia KeyLab Essential MIDI controller in Ableton Live 10.
21 stars 2 forks source link

Sincere thanks / possibilities for further development #1

Closed cielcl closed 4 years ago

cielcl commented 4 years ago

Hey, just wanted to say thanks so, so much for making and uploading this. I've been frustrated by this for a long time, and finally decided to delve in to see how to fix it myself only to discover the miles of Python code behind this functionality. And I stumbled upon your repo by chance while googling all the terms in the all the Ableton control surface documentation and trying to understand the existing Keylab code. And I'm so so thankful I don't have to mess with that anymore. Seriously - do you have a way of accepting donations? Just want to express my sincere thanks for releasing this that's all.

Also, not to crap on your hard work or demand for even more (this was basically everything I wanted), but can I safely assume you use the same keyboard regularly? Just curious if you've noticed that the 9th encoder on the right is strangely left abandoned even in the default official Control Surface mapping. You can't even manual MIDI map it, because it doesn't even send any MIDI CC, at least in the DAW mapping.

I was looking through your code for this (which thankfully doesn't have to be decompiled again) to try and find if there was a way I could make this knob useful, but I'm still super lost at the moment. And then I realized there was a perfect use for it - scrolling through your current devices in the track, so that you can easily switch which one the other 8 knobs are controlling. Admittedly though I have not yet found the code required for this in the documentation, although I could've sworn I've seen my Novation SL MKII do that before.

Also, whether that function can auto select the scrolled device is another problem too, since on my Novation it was on a jogwheel with a click to select if I remember correctly. So maybe such a function would be better delegated to the Keylab's jogwheel instead. Speaking of which, I'm not sure if I'm just daft but I think your replacement code breaks it? Usually it automaps to scrolling up and down your clips. Not sure why it broke in the process though, I've been comparing the original keylab_essential.py to your edited copy to figure out why, but haven't had much luck even figuring out what your edited code changes are affecting.

Good news is that replacing this control surface with the original BACKUP one revives this functionality, while also still allowing the Essential2 control surface to work. Though I'm sure it's affecting some things in the background that I'm not aware of yet (otherwise there wouldn't be a need for an edited copy at all), but I don't know the code well enough to say.

Anyway, just wanted to thank you again for this code. If you didn't read through all that blabbering it's alright, but at least read this! Oh, and the part about donations too, just to say thanks.

creaktive commented 4 years ago

Oh hai! I'm really happy to hear that any of this is somehow useful to you! Really, that's much more rewarding to me than donations! Thanks for offering it, anyways :)

I've created this to illustrate better the changes I've made. The most important change is the one removing the pan_controls=self._encoders bit from _create_mixer. It pokes a "window" so that the knobs are assigned nowhere (and then the Essential2 thing automaps the knobs to device controls). Unfortunately, there's no reference to the 9th knob whatsoever (the 9th fader is mapped as Master_Fader, but no mention of the 9th encoder/knob). I also find it very strange, but it really looks like Arturia guys just forgot about it... I have no indication that it is connected, at all

A word about why I had to split the thing into Essential and Essential2 folders. The original script uses the "new" framework provided by Ableton Live in order to expose its functionality to Python. It is very flexible, but exposing the device controls is somewhat convoluted. On the other hand, Essential2 uses the "old" framework, which is very easy to use (also, the examples are more abundant on the Internet, since it's much older), but incompatible with the "new" one. I've did some tests with UserConfiguration.txt; turns out that can be used, too (it is a very simple thing, tons of examples, well documented... but the flexibility is the lowest).

Anyways... Check the _create_jogwheel_modes method. Perhaps you can add a mode for scrolling through current devices there, without sacrificing the other modes. And do send the Pull Request with your code :) Best regards!