Close

Macbook trackpad as controller for Ableton Live (with Max for Live) (Updated)

I was travelling in Colombia with just my laptop, and at some point I wanted to arrange some tracks in Live. I didn’t bring my Xio synth and didn’t have any control source around. I could use map the keys in my Macbook for triggering loops, but I also wanted to control continuous device parameters. Since I have a bluetooth mouse, I could use the trackpad of the Macbook to achieve it…

UPDATE: new version here.

The tools:

  • Tongseng: It’s a very simple and useful program which reads multiple touches (I believe glass trackpads in current Macbooks can track up to 11 fingers) and converts that into TUIO messages. You can select the destination address and port for the messages.
  • Max for Live
  • OSC patches for Max/MSP, from CNMAT, should be previously installed
  • Live (of course)

I programmed this Max for Live patch, which can be inserted in a MIDI channel. It listens to port 3333 for TUIO messages, and convert them into MIDI CC control data. It allows you to use the trackpad as either a group of 4 sliders (all of them can be used simultaneously), or 2 different x-y pads. The switch to select any of these functions can be assigned to a key, so it’s not necessary to use the mouse to do it. Max for Live always sends through MIDI channel 1, so I needed to use different continuous controllers, and to have some flexibility, I wanted to have 8 pages of controllers (first page uses MIDI CCs 1 to 4 for the faders, 5 and 6 for the first x-y pad and 7 and 8 for the second x-y pad; second page uses MIDI CCs 9 to 12 for the faders, 13 and 14 for the first x-y pad and 15 and 16 for the second x-y pad and so on). First, I wanted to use a max.tab to display the page, but this patch allows to map only one key to it. When you press the key it will switch to the next value. I wanted direct access to every page using keys 1-8, so I had to use max.button patches instead, and the max.tab for displaying. The trick is that first you should map the keys to the buttons…

… and then hide-on-lock the buttons (Command+K) and leave only the max.tab patch in the vissible area of the Max for Live plugin.

This way the interface works and looks pretty neat. Next step is to assign the MIDI controlls in the usual way. I included a “Send X” switch for every x-y pad in order to make the mapping easier, because sometimes is difficult to transmit only one CC if both x and y are active.

Don’t forget to deactivate the touchpad using the Universal Access preference pane, which can be found in the System Settings:

You might want to edit the patch to fit your needs (for example, to add more pages, change the controller number ranges, etc.). It would be nice if you share any cool modifications you make!

Update: A max for live patch sends MIDI data internally to Live, so I’m using the IAC driver to resend the data to Live. You have to activate at least one IAC port, and activate it as a remote control source in Preferencies/MIDI-Sync (if you are reading this I suppose you know how to it), and then route the output of the MIDI channel where you inserted the Max for Live patch:

That’s it.

Feel free to contact me or comment here if you have any questions.

Thanks for reading!

17 thoughts on “Macbook trackpad as controller for Ableton Live (with Max for Live) (Updated)

  1. Hi Mate,

    Great work, cant get it working yet but i will…

    Workround for the mapping issue you have with hide on lock…

    For the Live.Tab object right click it and send to back, you might want to select the option ignore on click as well….

    Then on the live.buttons enter the colour properties of all of them and move the fourth slider all the way to the left for each colour making them invisible, then you can size them and place them over the individual tabs and voila you have what seems to be an individually mappable live.tab

    Cheers
    D

    darrenecowley at sky dot com

  2. I’m dying to get this to work but i must be doing something wrong. tonseng is running but it doesn’t seem like i’m receiving midi from the touchpad. i have reaktor after the patch in the chain with skrewell ensemble and xy variables in cc 5 and 6. i selected the first layer so that the 1st xypad corresponds to those cc’s but nada. couldnt get the send x to work either, guess I must be missing something obvious. any suggestions?

  3. JP,

    I have followed the directions as closely as I can, but I can’t get Ableton to recognize any MIDI input. Do you have a step by step process to get this to work correctly? I have activated IAC bus on my Mac, but I’m not exactly sure what to do in Ableton to get it to work correctly. I can provide you with screenshots if you want. My email address is zacingraham@gmail.com – I would really love to get this working.

  4. Hi there JP I cant seem to figure this onw out 🙁 I have already downloaded the CNMAT pack ,Tongseng and create the IAC driver followed everything step by step and nothing
    🙁 I just cant seem to find the folder where M4L stores the Search Path ? Im trying to add the CNMAT package but I simply cant do it 🙁 any help would be appreciate it 😉

  5. sometimes, udpreceive + udpsend native objects are very enough.
    I tested that in some cases, cnmat stuff is requires, in other cases not!

    did you try without TUIO interface and directly with an hi object?

    all the best,
    julien

    1. You are right about updsend/receive. I’ll tweak the next version of the controller to just use those. I don’t think (or have not yet found) a HID driver for touchpads which supports multitouch. That’s why I decided to use Tongseng. Besides that, Tongseng is free and open source, and doesn’t use much system resources.

      Thanks for commenting!

      JP

    1. Not really. It might work with the magic trackpad, but I haven’t tested it yet. However there is another solution you might use. Check out Osculator (www.osculator.net). It supports several devices, including some Wacom tablets.
      I hope this helps!

      JP

Leave a Reply

Your email address will not be published. Required fields are marked *