Home // Blog // Ableton Push Development Kit

Ableton Push Development Kit

Overview

This document describes the process of developing Max For Live devices for Ableton Push. It explains how to connect with Push and how to create a custom interface. It also describes how Push works in general.

Ableton Push

Ableton Push is a midi controller that has been specifically built for Ableton Live. Therefore it has an interface that represents many of Live's functions. However it can also be used with other daw's and software.

image

Midi Connections

Ableton Push receives and sends midi note, control change (cc), pitch bend and sysex values. It has two independent midi in- and outputs that send their values via an USB connection.

Python scripts

All the functions of Push (like the step sequencer, note mode, etc.) aren't saved inside Push. The device has no knowledge of Live and its functions.

These functions are represented in python scripts that come with the installation of Ableton Live. They are located inside the Live application. As soon as you connect Push with Ableton Live, the scripts automatically sends values over the Live Ports to the push. They also interpret values from the Live Port.

These scripts can be modified to change or add functions. To do so, you need to decrypt them. Though it isn't recommended.

On Mac OS X they are saved under "Ableton Live (Suite) 9.app/Contents/App-Resources/Midi Remote Scripts/Push"

Decrypted scripts can be found here.

Max For Live Objects

There are 11 m4l objects included in the development kit. They make it much easier to write your own m4l devices.

image

For example I ported the m4l Monome version of Polygomè in about 15 minutes. I only needed to include these few objects (no other changes were needed):

image image

I strongly recommend to use them, as they make programming much easier. They also provide a uniform interface for the users of your m4l device for interacting with Push. This is especially important, as there are so many possibilities in presenting your interface, that it could get confusing for the user.

Thanks to the "Grab/Release" objects, the integration with Push feels much more native and not like a hack. They aren't breaking the user experience of Push, which is really important on a device like the Push.

The objects are written for the default Ableton Live mode. They aren't working in User Mode.

There are two kinds of Push m4l objects:

As we are going to talk a lot more about grabbing and releasing: What does "to grab" and "to release" a Push control element mean?

If you grab a Push element (like the 8x8 grid or the encoders) you release it from its original functionality and grab it. It allows you to interact with it, because it won't be used by Live anymore. If you release it, it will get its original functionality back and you can't talk to it anymore.

Be aware

There are currently two bugs that are really annoying and that you need to be aware of. You can't have two m4l Push devices on one track. You also always need to deactivate the m4l device or Push control, if you want to delete the device from the track. Else the control element is still grabbed and you can't use your Push until you turn it on/off or another m4l device grabs/releases it. I try as hard as possible to find solutions for the problems.

"Start/stop grabbing" objects

"Device/Track selected" object

image

This objects outputs a 1, when the m4l device or the track that includes the m4l device is selected (depending on the selection). It should be used most of the time, as it gives the best user experience for a Push m4l device.

The selectable options:

Connections

You should always include the object in the interface of your m4l device. It is also recommended to add the control at the eight position on the Push. This allows the user to easily change the settings.

image

To place it at the eight position, right click on the object and select object->new view of < none >. On the the new patcher window select the live.menu, go to the inspector and change the auto mapping index to 8. From thereon all your other live.dials, menus, etc. also need to get an auto mapping index or else they won't be shown on Push.

image image

"Push M4L device entered" object

image

The object sends a 1, if the m4l device is entered with the "In Button" above the mute button on Push. Normally Push would then show more parameters for the selected device, but with this object you can also use it to show your custom Push interface.

image

A m4l device with this object should always have at least one interface element (knob, menu, etc.), otherwise the "In button" isn't lit

Sometimes it gets confused with its state, so I wouldn't use them. I really recommend to use the "Device/track selected" object.

Connections

"Push Controls" objects

Each control element objects saves its states/values when it gets released. It even remembers new values. If you regrab it, it shows the saved values (like the led colors).

Push Grid

image

The most important object. It allows you to grab the 8x8 grid. The left inlet lets you draw on the grid/change led colors and the middle inlet is for activating a color press feedback.

Connections

To change/activate a color of the 8x8 there are several methods that you can set to the color input.

Drawing Method
one button set x y color
row row x y color x_start
column col x y color y_start
all all color
rectangle rect x y color x_lenght y_lenght
unfilled rect u_rect x y color x_lenght y_lenght
rect without edges rect_w/o_e x y color x_lenght y_lenght
unfilled rect without edges u_rect_w/o_e x y color x_lenght y_lenght

x0 y0 is top left, x7 y7 bottem right.

image

Color is a value from 0-127. To find the color you want, use the color finder object. 0 as color value is always turning off the led color. You can also input a rgb color value to the first input of the color finder to find the right Push color value.

image

Push Touchstrip

image

If you grab the touchstrip, you can choose a touchstrip mode and monitor the current value.

Connections

Input:

Output:

Modes

1: Default pitch wheel mode. 2: a normal fader. 3: up/down fader. 4: point mode.

image

Push Scene Buttons

image

If you grab the scene buttons, you can change the led colors. It also outputs button pushes.

Connections

Input:

Output:

Led Color methods for Scene Buttons:

Colors:

Blinking:

Push display

image

If you grab the display, you can input a text.

Connections Input:

Input methods:

Set replaces the previous text with the new one. Place places only the new text at the position x, without replacing the rest of the display line.

Push Select & State buttons

image

If you grab the two button rows below the display, you can change the color and monitor button presses.

Connections

Input:

Output:

Led Color methods for Select/state Buttons:

Colors:

Push Encoders

image

If you grab the encoders, you can monitor encoder touches and movement

Input: - Intensity (left): Change the intensity when a knob should report a movement. The smaller the number the faster the report. - Connection (right): Activate/deactivate connection

Output: - Touched encoder (left) - Moved encoder (right)

Depending on the intensity setting, the left outlet outputs a 1 for clockwise movement and -1 for anti clockwise. Default is 5.

Download

Developers should always upgrade there Push m4l devices with the newest objects.

Version 0.8.1

Download

Version 0.8

Download

Known Issues/Bugs

Please report any bug or problem that you can find! If you find a solution, I would be extremly grateful, if you send it to me. Email

General Bugs:

"This_device entered" object:

"Push_display" object:

Thanks

Thanks to everyone who helped me! Without the people from the cycling74 forum, this wouldn't be possible. A week ago, I had absolutely no idea of ​​Max/Msp and visual programming.

A huge thanks also to synthfan.info. His blog posts gave me a great and important overview over the live object model.

And of course Adrian :) Thanks Adrian!

Disclaimer

The development kit wasn't developed by Ableton AG.

License

All the devices and documentation here are published under a Creative Commons CC BY-NC 3.0 licence. Feel free to modify the objects and use them in your own projects.

Support

If you need support, you can always contact me. Email

And if you want to support me in what I do, it is also possible to send me a small donation. Maybe someday I can buy Max 6. :) Or live a more relaxed student Life. :D

Paypal: Link or florianzand@me.com

Flattr: Link

Thanks!