LAST UPDATES: November 22 2013 / Here for reference only
If you want to learn and master Ableton Live 9, you can check my french ableton live 9 courses
I can also explain how remote-scripts work, and more too. Here is a small summary of what you’ll find on that page:
I decided to use Max6 directly in order to investigate the PUSH controller.
Naturally, I connected it to USB and, as usual considering the USB standards and that specific hardware, it has been detected as a MIDI capable device.
In Max (and in Live and whatever program listing MIDI devices), PUSH can be visible as:
– Ableton Push Live Port
– Ableton Push User Port Both sends and responds to MIDI messages.
AFAIK today (25/02/2013), the Ableton Push Live Port is used directly by some python scripts inside Live folders hierarchy.
You can find a lot of resources about Python Remote Scripts there
Basically, there are scripts related to each control surface (=controller) and that we can choose in Live preferences.
Let’s check at first these folders and scripts:
In Live preferences, we can see those control surfaces available:
That is strangely similar to folders isn’t it ? Of course.
Basically, these scripts (coded in Python language) configure our remote control surfaces directly with Live.
It provides a way to avoid any configuration steps and especially, provides nice way to control Live and get feedback from it on a VERY efficient way.
For instance, the clip grid can be observed permanently, and as soon as you add a clip, the Python script detects that and fire a message.
That message can be anything, even OSC messages, sysex or whatever else (LiveOSC python hacks still work…).
This was/is a nice way provided to constructors of MIDI controller for making their own code to directly connect the gear and have ALL configured without doing anything. Python source codes aren’t available (officially). We only have those .pyc which are bytecode.
This is a “kind of” binary pre-compiled (this is not a compilation actually, I know that, mate)
You write a python code, you run it, he bytecode is created and run.
We would have to decompyle those .pyc in order to modify … for instance the step sequencer of the Push, or the way the piano roll grid works etc.
YES: Those python scripts ARE the brain.
The device is amazingly genius, cute etc.. but the smart part is those scripts.
I already wrote about that concept of interaction design in my free ebook named The 6 rules to design the best user interfaces and available here
That means if you followed me correctly that we could create many other kind of features using those scripts and play with the PUSH in MANY other ways.
I have no information about Ableton delivering that officially.
But, as Robert Henke said to me one day (the only one) I met him: “we know that you know those scripts are available, use them”
In the mean time, I decompyled everything for you
PUSH PYTHON REMOTE SCRIPTS & HACKS
PLEASE BE CAREFUL, NOTHING HERE ARE OFFICIAL AND THIS ISN’T SUPPORTED BY ABLETON, BUT THEY KEEP US PLAYING WITH THAT
This is totally unofficial, but I have all push’ python remote scripts source.
I didn’t have any help from Ableton here, and I didn’t ask help, by the way. I decompiled them, unmarshalling some part of codes etc.
I’ll modify them quite soon in order to improve and change some PUSH behaviors in next days/weeks. The first idea is : find the way that fits my needs the MOST!
Here they are: AbletonLive9 Remote Scripts Sources Please check the How Tos below in order to understand how to use a custom script file.
NICE PARTs TO MODIFY
Check this nice How to if you feel a bit dry on that… – modify default LEDs colors: https://github.com/gluon/AbletonLive9_RemoteScripts/blob/master/Push/SkinDefault.py – TouchStrip mode: https://github.com/gluon/AbletonLive9_RemoteScripts/blob/master/Push/TouchStripElement.py – Add/Modify/Remove scales: https://github.com/gluon/AbletonLive9_RemoteScripts/blob/master/Push/consts.py
So, let’s come back to our MIDI devices generated by the PUSH: Ableton Push User Mode and Ableton Push Live Mode.
I found there are quite similar
The Live Mode seems to answer/respond to sysex. I don’t know but I think User Mode too.
Indeed, while playing with Push and Live, we can have some MIDI messages popped out/in the controller, but some actions AREN’T made by MIDI messages.
I mean, not triggered by MIDI messages visible within Live… sysex are involved for sure.
The first patch I made was SO simple. This is the one that helps me to make the MIDI map below.
The patch is that one:
----------begin_max5_patcher---------- 1151.3oc6ZsrjZiCEcM7UnxqILV1xx1YWpNaxhjzaxpoRkxFDf5Bjn7iLjIU 92GIYCXZvVBOD0cYRuvzVVXetm6CcOB+ywibR46H4Nf2B9avnQ+b7nQpgjCL p97QNaR1MacRtZZNy3a1PXENSptVAYWgZ7GVw44Dv6RWSJ3Lvik4q.eImjAd jmcX1okohqKmOrdjsIEyVQYK+VFYVQENfwASgXLN.OAfwScm.7PH0GdScAes 9KtHaYpb9thqTMBctBH7zmdCZ+CbAmUvR1PpfHuLiRx1eMV4FJSf17l3QLHu rX+ntMtM4z+sB4BTHG8WiGKOLwPdiQ9GAxNi1VySlmlvV5zNef7kFOzs5X0G QMXhF1czMxtgsX20CWMyherkTgPGkE.95siV1PmSorE7NnkPIQ3qBLBBTgGv KSJ3KRJuKilr9hThm4The6TR+niRQtUoNitJo.Fh5xpC0a0aSxDiWPx9FgkT mW5ZdPh+UxHTYUCAwLQQN6QbAYSc8GmBN3iI6.P4LlHOTOfW+3x1pT8wO79O .lsJg0AOiCBmFbnvSn6YLcmke7h0S9R3LiulmU8.cmF3BiwvIW7+Z9j6aYK+ dU1pMRbKcVwJPJgMuCVLHnY46PuqjECG7rXxBQ1GnfWNaUWK.f9eQi3AOM93 xMfGDIzKIcvh993o9h+f9GnxH7URkACdp7AwsNiuVOc54gOzkVMcBcu1PSzv Ozju9GfGyH44kYcQmP3YzYL75Xyg+hNehWP.el8WedwhtV6tQwxnqbkan6fg Daoy5R1SbJSG8ACUcZhvc0hIDdkcVea5irQSj8gVJ2jdTKTqgOtpvG+nNseu e68X60udr6udrzxBg7csziWkhK28GuH832CEm2Rok57zUBqMyUiFdtZs7CLv +3ZRFwRA2irTyUtMhkvCPVpmK1zj7LaMmvg3ZNd3qMSK5NLS6DIGFwRw+IS6 RjmQYZdtCwLM4t.n1.8X0FG62IC.uC6uqlfLpCOOuW3N7Z+GOP3WxIZU4fTQ A3v3NCC7uIIBg8MQXxA294e7aRBD17jDj68nHHr4IIH3qbYP06RuYd66QIu6 +YLLxa+BK5Uqwr+GSvHiA8ZWAO5JBcCtCCcOQbpQt7vW4wumHBvHKJ5UaSJF rOrPUjcXPWu0GvWn25iyZ.QANm0T1yekhTlmb7S4obADms+tUaIfil3bRdAk kTPEADGmircrFSZEc9bBqYh5bZtL2UwOWdiyMFNlfG4t.aS7.0gGj8vimI7i E8WXCvirBmsvSnI9q.6hGs9Kr8vSrI9qHqgG4Vdn2eYY7n0eEaO7XT8Y6UO7 YKEzB+.sKdzF+DZW73oye4ZW73qCOV1eg0U+wx7SfN7X47KjN7Xu0uPlTODY u3GjI8+frW+OOyUzBdrW+glzNl8pFZTyXZPiP01VtP2Ss9l3526sJ4YAxWYX 0IGeJ2LzGY.WhOwBMmKqzskrc62IY402REPDJYep58bBOQcJkUcpRpnSF46z 8yW8LbRxDxXKDZXkusaRUn6hvNikOmeM9+beFGtE -----------end_max5_patcher-----------
All these informations are unofficial. I discovered and experiment empirically. Probably, Ableton will give us everything with Live 9, but I still don’t know. So here are my experiments. At first, what push sends as MIDI stuff in user mode. I love midi notes sent by touch-sensitive encoders!
BE CAREFUL, I already read a lot of mistakes…
If you are using the Push controller in Normal Mode, you’d better to use it with the native python scripts provided by Ableton and not to try to assign buttons & knobs by yourself.
If you are using it in User Mode, you have to assign things by yourself BUT be careful to encoders and pitch bend ! Indeed, when you touch them, they act as buttons.
That means if you want to assign them you have to:
– select the parameter in Live
– touch your encoder (Live assigns the midi note with velocity 127 to the parameter)
– turn your encoder (Live assigns the CC to the parameter)
– get off your hand from the encoder (Live assigns the midi note with velocity 0 to the parameter)
– remove the midi note in the assignation list should I make a vid for that ?
Then, how to light on/off and dimming colors. (coming soon, all done, but preparing something else.. please be patient 🙂
All these How Tos work with Push in Live mode of course. Indeed, it involves Python Remote Scripts themselves involved in Live use.
How to modify & test & debug a script ?
– BACKUP the whole Push folder with all *.pyc files
On OSX, backup the whole folder “/Applications/Ableton Live 9 Beta.app/Contents/App-Resources/MIDI Remote Scripts/”
On Win, backup the whole folder “C:\Program Files\Ableton\Live x.x.x\Resources\MIDI Remote Scripts”
– Alter a file in the python sources provided on github
– Take that .py file and put it in he Push folder in your Live folders (check the correct folder above)
– Remove the corresponding .pyc in the Live folder and restart Live Then it should work. In order to debug, that’s not hard (I mean to check a debug log, not to debug actually)
On OSX, there is a file in /Users/<username>/Library/Preferences/Ableton/Live x.x.x/Log.txt
As soon as you start Live, it writes things there.
You can use in a terminal: tail -f /Users/<username>/Library/Preferences/Ableton/Live x.x.x/Log.txt
You’ll have a vision of that file content as soon as it will be modified.
Let a terminal opened, then make your modifications, restart Live and you’ll be able to see if there is a problem by checking lines beginning by RemoteScriptErrors:
How to change the skin colors ?
All colors aliases are defined in consts.py
If you open SkinDefault.py, you can see all the colors configuration for each element of your Push.
You “just” have to alter this file in order to use Push with new colors 🙂
In Skin.py, there is a way to use “kind of” templates system. I’ll dig that later.
Scales are defined in consts.py MUSICAL_MODES = [‘Major’, [0,2,4,5,7,9,11], ‘Minor’, [0,2,3,5,7,8,10], ‘Dorian’, [0,2,3,5,7,9,10], ‘Mixolydian’, [0,2,4,5,7,9,10], ‘Lydian’, [0,2,4,6,7,9,11], ‘Phrygian’, [0,1,3,5,7,8,10], ‘Locrian’, [0,1,3,4,7,8,10], ‘Diminished’, [0,1,3,4,6,7,9,10], ‘Whole-half’, [0,2,3,5,6,8,9,11], ‘Whole Tone’, [0,2,4,6,8,10], ‘Minor Blues’, [0,3,5,6,7,10], ‘Minor Pentatonic’, [0,3,5,7,10], ‘Major Pentatonic’, [0,2,4,7,9], ‘Harmonic Minor’, [0,2,3,5,7,8,11], ‘Melodic Minor’, [0,2,3,5,7,9,11], ‘Super Locrian’, [0,1,3,4,6,8,10], ‘Bhairav’, [0,1,4,5,7,8,11], ‘Hungarian Minor’, [0,2,3,6,7,8,11], ‘Minor Gypsy’, [0,1,4,5,7,8,10], ‘Hirojoshi’, [0,2,3,7,8], ‘In-Sen’, [0,1,5,7,10], ‘Iwato’, [0,1,5,6,10], ‘Kumoi’, [0,2,3,7,9], ‘Pelog’, [0,1,3,4,7,8], ‘Spanish’, [0,1,3,4,5,6,8,10]]
Basically, you can add scales and use them with Push 😀
You add a structure by copying one, alerting it.
You switch on/off the Push and it should display the new scales 🙂
Send me more scales… PLEASE !
You will be able to download the latest version here very soon. It includes the pushOSC abstraction and a patch showing how to use it.
It basically converts MIDI messages from the pads matrix into OSC message transmitted over UDP easily usable in your patch (Max and Max for Live) It also takes and understands some OSC based commands to light leds of the pads matrix.