More Ableton and MAX

I sat down to write this post awhile ago and life kind of happened so I am finishing it now.  A few months ago I sat down to finally write a MIDI mapper for my line6 FBV Shortboard Mk II so that I could control Ableton Live with a foot pedal and not have to worry about using my APC40 for live performance.  I wanted to do it because I’m not a DJ and rarely have my hands free when I am performing.  I’m usually playing bass or keys, and I need both hands.  Trying to work a device with my hands while I am using them to play a different instrument is a wicked pain in the ass. Ari also pointed out that my setup was kind of byzantine and simplifying it might be a good move.  I agree.  My solution was to take the FBV and write a tool in Max For Live that would take the CC messages that the FBV sends and turn them into midi note messages.  I initially wanted the bank buttons to set banks and then based on that number send different midi notes so that instead of being limited to 13 midi buttons I would have x banks of 9 buttons.

My initial implementation worked exactly as designed, but when I tried setting up all of my band’s songs in a single live set (so I could switch between songs seamlessly), I quickly realized that midi was not going to be the solution.  I had not way to track what state the tracks were in from the song before which meant that I had to put every song in the order that I intended to perform them beforehand.  That sucks because it doesn’t allow me to change the set list on a whim.  I also ran into a limitation of live where I can only assign one midi value to a parameter.  This meant that if button a was controlling parameter a of a plugin or whatever, button b could not control that parameter at all.  This meant that instead of being able to hit a button and have it do a few things, and then hit another button and have it do a few different things and undo one of the previous things was not going to work.  The whole thing felt very fragile.  I decided it was time to use Max For Live and it’s Ableton API to set parameters and just take as much midi out of it as I could.

My second implementation used a bunch of set commands to just force set parameters.  I used the param save function to save the settings for each button press into xml.  That worked really well but I later found out that the looper built into live basically requires midi to be used.  It doesn’t expose anything I need to the live API.  I also found out that if you use the set command to set a parameter, it does it as if you clicked the button yourself and there is a 10ms delay or so.  It also has the side effect of creating an undo event for every single thing the pedal does.  That probably isn’t a big deal but I found out that it isn’t really that hard to use the remote~ function to send messages to live and anything sent over a remote is realtime and and doesn’t create an undo event.  Basically the goal at the point was to use remote~ for everything I could and use regular set commands for everything else.  Below are some examples of some of the things I’ve written that are part of the entire tool that lets me basically DJ my own music with my feet while I play.

Here is an example of setting a return track volume with remote and with a set command.

 

 

 

 

 

 

 

<pre><code>———-begin_max5_patcher———-809.3ocwW97jZBCEG+L9WQFl83VKgeI1Y1CsS6sdpSusSGmH7TSKj3PhVa2Y6e6kj.JKhUTVrGTjGgju7488Ed9zHK647cfvF8NziHKqmFYYoCoBXUdtkcFYWbJQnGlMC9Ie92su2bIIrSpCKnK+SUvEblTP+Mnt.1crSYX1lLJKEj54AeHHeirYTZhdRKVn23EVeZYjL8zZ+9bJIs5JlYP9q0f4IQoFVwkQeqb.qIx3UT1xY4PrzLlPmBgglhCTG77Te6VDB8M0c77nQputueLIktEFmCYbIbQrwsU13zBalbd1b5Gce8iN1cxgm8x6QP1BIyJVghaYFQJyoy2HM1Dq8Hvxd1ZHWPERfEaddzw0r6RIXFHDjkvQHrP8qPJNNS.RjLmD+CA5NLJitCxmk.aow.R.rDAxo5lSoLHlugIqyxqm6s4IitBO4+zMhCz4jnI5CXiezyc.7iJh1+BUuighuy0.k6K+zA3TVqFDLD0pzEn6ntnGd.4fjq.VwYX6gv6fcd0MOl54IFJgclND7QhVfl2eeiaK9lqgGKR4Dox3LmvV1A3DgKgSz3fd.mFaS85ZLlLTap3a7GZeANZ.pavp5FrotwYbT.BREPwuFjFBvdCT8SjwhLL6uHQyQzAo94Z5ORW0TT8PUuj7rjIbpgLg8q3IlmkAEKXSz7U0a0QelyKZm.i9DiLOEd6GoB0w9SrVZaJH3pZaZh1XDZNfivG01jZ1VPp0KzEBnbRBkuLmuYckJ1Rx2KOcyOkT5KGMxKnVZcNTzwjjHobV8bcjw9WsKQ0dEGyOW+dUm45bhkntvdQwuDxpVipX6MC6IU5lp+HygYLw3hR1G+Uz1pREs1hPz0XOOQRIx6PRw276v1SJ3om1Ti9.OM4rN6xDiu+QKyQIlZXTOHcO2M9aj50QE+krUv2jGWYW12PT8bFHjT1905wC65WaPqnII.qN.ynIq4E6mUphSjp6pnTV7yqoFJenEUXGzTCgeKjD9bXZxKFzPKoFNk10j+sMyoWtNwoanlb5fl7ts4NutXw8tsbxqKaOog4sSSMrJmfS+G73mUSg8PSEm77n+huFKWB———–end_max5_patcher———–</code></pre>

Here is an example of setting tempo that takes 3 seconds (if you’re using a 44100 sample rate ) to get from where it is to where you want it (for smoother tempo transitions if you want to link songs together and have a drummer playing to the click track… which I do).

 

 

 

 

<pre><code>———-begin_max5_patcher———-548.3ocuUF0bhBCDG+Y7SQl7rmCATuZeq2Wia5vDgUM2QRXHKddWm1O6WR.rTEKZq0GHPV1jc++a2.OMJftTuCLTx8jeRBBdZTPf2jyPPy7.pjuKMma7tQUvezK+Ecb8qPXG5MijUjksVWoUnQ7Ov8FVzjvFypJoPkCneiXuZTWgsViZrJx76pMRei0cWUboeWoOTJ34suodCv+V.0JgtJWyQ5XBcIWslRdrwuBNltQnVmTBoXsqSmYSOx28ir42MY1XRT3jPxitU77nQtgweNzjK1BSJAoFgW5kPg8SnndIT3wDZ5rSiHxOz4YzgzO6NWNPlundhS+MKwv2BYI1nXWQBGwRwxJrtiIXOFBnIEPoQXPPkVqIucO+tlTzJfMD2SIF.IRtMfkIXIO82DoXm84LXqHEHFsUjHHKzs6StPAo5JE1krmSUn+9z3dpBwmYU3ntUWip+58ZTYKpqTwMsp9BVzhqaqZIWVXjZMt4EajhhCCatcI8sw8RL1wDKd9GkXFwZk83+vGraw0zNc1WObYSiK5DM6rIyrudxD5uEy9TfwqMZeZM7b0Zz7om9jwv5ndLZ+39UjpkRn97Nk1QZdG7eO3f+64Cgy9a0qQWUl1lPM+Ph7ZXx.CJTbTnUc7wU.63zFQVFn5hEoHqPKTXSNbB3eIoDafTx88oaXJ4KqCxI1MMm7HXPNM6MN8UmSGzobh1o42TNcP3dGN8QyI6jmG8ebm4y0N———–end_max5_patcher———–</code></pre>

Here’s a little event timing manager that lets me make my pedal presses take effect on the 1 via quantization:

<pre><code>———-begin_max5_patcher———-1951.3oc4b0zbaaCD8r7uBLZxsl3AeQBxNMGZu068VmLZnjfrYsDIKIThcxj+6EePJKKKIBIxEId53wlFTjhKd3sucAVH8salLcd4ixloneE82nIS91MSlXOk4DSZaOY5lrGWrNqwdYSKjeob9+L88tWRIeTYOc9Jz6xonO9QDFotWVnaQPx0MRT4VE0zp6VVUVnZx+pzbaD5s31SWrcSdwZox9TnOeR8se3YyWZejZy3Ch8eWKx1XeWm9604Yq6dE2af5oJoqaNc560+h9T6KWkoVbedwcypkKTtqfGosJDI1cHgXNPw2hQexbKe+laL+48dhW1N0zi0IwGsSRdcmL5jck7B0Y6ITrv1GX1tBc2e2cOKJ2rQV3FBmdE8tdYCjPxFHD.oCoNzCGOH5vFYSS1cxWgXU0kUxZ0Sn7lYUqydRaBCGhNBWJ9ZPnyRwXFSpCjHDmOyUhNmfNsN+yxaKm2Hq+rrFDlCGBhSKzHbPiH8YhS68zj8Y4xY5mu9VlkoT04y2pbxwS1gPSlNSyLZxaTxhE1mM1ddKzNl.rtGbOx7eyZdVwxGTlbTTl8ZTldsnbeHMKZORXZ5f7POADoPyQyGNpbLUqq.UlmYzGZO5AGjXQFFePHSWvhCgl+597Fj8YKqQprGjMFQejN3j7N8YZz2CRUhxUnrhknkRs7Vio01BU9Z6kpeDJzFYVy1Zo8hnbcZD4KdnAMWtpTeR8kqeeVZtuaQn+Tgz5n52WMFs9Iz+tMS+ueU+byJdBo8gTkEnpZykzXt5U1GhpNawCZ8UTiprpRtz7dZFVruXqtroezXNSc416tW2EZT5250OcaWmdcdgbQ4VWHyjASGvulNv5mNbjwYijql56TewNsXwX6AjeBO.7.8.Xryn+h9ix0KOaFP93G3jFXNsXF61nwOJUUdk7RfGuiYyXjqEd7.SRr1GPXhQ0LGFNC8pAkNwy9xdtMsYA0BPQ3AAPmNwOYkVXSOso2Qfg8PDfvdZmejHB6.I2blFYzAqm.AUOLvSXLr.H7IFT7woFmxGD9Dd2KbJztWwVfIlMFdWmAeVAD9jLT7Y05xryiPbrkBEicJzz2XJzXAzTHpK1E3.DTbnX34Pznn8byhigAhVAFDc0Q4cPieXjiFEwaUjda4mQSRf1OqUHp6PJD.jcMCIneqaAjw1e5eQCGL7It5Hc8ttDsg3RcSHKlNnEG6T4HAb9QTQBH4G0IL0hQBHxOR9XUM5cqHneAwSvCm9bT3gCJ73BsIDPrtpFWtU64xYZrmC2Jnb3nf4v0hZQhVOtTHfMGqRqU8ADADNEgx.gSEue1R5vbPnFQ.RDR.Ih3NDQfPCx5jQ2yIyqRggGXAMnhXfipE.eLNFq8wFEcni4kQfYY05xlzcPvATBhZfmbfV2HLjhPsnSp.DQHNPHBEl0gsMsZ2xMFgAYkz1Uf4l76JxTaqkyVJKJ03PlprFFQ6zDHwK1K2mFwgtlyCVhNEtIdzAQt5cPo6Eq+MZsmwCr1yLLdPnceHdTx9jxTP1GDaKpLkvzNy3aAAknozAVIt1C8unKt3.71xGv.YeiTlszsDGCsNsGScies0s+rUMvgGTQap5fsUFb+LbRTzqQlzAurlm8nGvGyMEmHZJHoWrKV5hs00xB0rlRsUnx2.S8eoIvj2QGX4VZXBm+FMNZBCr3ncPTmiXz+6iiRS3fFGs00skTBSbzunmGNPKEez0BNq0jiKRhKskYByp3fHWXJFWP814.NuRtayZPvoCRLaD101L10uusamYCXaa6Qo6Ee8Y43TSckaCftmyflNrsgGSLs2sNk3R6A1KvtIBO3Ccg8YXN+K6VMkaqWzAq6RPGQ28fVJaTlovmWVr2UYWZKzyly84K0S1e+d5l7kUkZZXqYbBmDespCedG2prEyMfVkd.TKi0iMYFluDahRbkPOsUtw8YCXuFIt8hbD2bY1FiP2.26.dPQVq1VuFkHn1juVDIbnDwmgN69OKjicl00sWqxV+f.ZUNcsd8VOv1g1p3955ENRkYx08hS1jzCHNkF6CkxLM1PRo7YzKMN7.EqWVNN7FUeoTXWL+.ZT9vnBKI2mTbBrnoGRA7fpNQ7QbJvg6ndkZJ6xvINwleGO1s.EbwtVC1dw9fglZGEvwUW.k9C6vBqUcflz4vp.x3Hburp.GMLIxqjQ4AlW4UxnGX6vaUTurpvlL5gojehzQog1p7BqD7.OchTuFASBLuJwqXQze.VEwKqJfSdF6UtDhPmMAw6IOGRrJwKrJ4BywgZ+PEGGYKLHiX+30XaMJ1K1K6Eew4jE61Gmz3maMJZb86gDX0DA2K0jPu7RwPL1NJV0n6gLJQz6mWIBLV4UrSwOBqh3kUEv46RYd4CF3YffEPLBRIo6ouFmNVxqNyczGZoLlK7kaOFiIN6ULBgCR7dc8CXR.TeRX5vZRDFq5msZfbH0+TLtz.aU9HwcHhB+xY3S.c62QIAMzY5OgVk8KxFO7A4AtZsbuwpPZUdoLvD+7UznKDnHQ1PkT22AHb2dG4ksHs6HFaLJBdvgn7a+XvBbATHfrgLbfV6mwA2dv3EMF8MjgcqO0eziKDbcbj3D2WWaO25EFqtw2u4+.JDKslB———–end_max5_patcher———–</code></pre>

With all of this working I am able to control Ableton with my feet while playing piano or bass or whatever.  I never have to touch the computer which kicks ass.  So far I’ve not found anything I can’t do with this software.  It really is a pretty brilliant piece of kit.  The sad thing is that I think I like writing software more than I like writing music.  I’m certainly better at it.  Anyway…

 

Published by

jlegler

Geeky musician born and raised in Wyoming and currently living in Denver CO.

5 thoughts on “More Ableton and MAX”

  1. I like that you’re using Python’s if/then coding. A simple tool that when used correctly can make a powerful outcome…so it seems 😉

    And hush, your music is great! I love hearing the new ideas you come up with. There is always something different; each song sounds different from the next.

    Keep doing what you love man!

    xo

    -b

  2. dude this is awesome. i didn’t realize you were so into hands-free electronic triggering and stuff. i have an akai drum machine with a footpedal that i’ve been thinking of incorporating in lieu of having ableton on a laptop (i only have a desktop right now) but this seems so much more fluid. i love max/msp for what i’ve seen that it/they can do with sound, and that’s cool that you can use it as a utility and whatnot. that’s been my main issue with getting up on a laptop live with loops and stuff, don’t want to get stuck interacting with a computer in a monitor/keyboard sense…i’m also thinking of trying to find a used spd-s for triggering samples and stuff, but would probably put it in front of the drummer 🙂 anyway again super dope and kudos for the work at making it work….

    e

  3. It is much easier to control remote directly through the Python APIs. The visual programming of Max becomes restrictive and counter-productive when you reach even moderate levels of complexity. There is a reason why interactive flow-chart based programming interfaces are not used by programmers.

  4. That is a fact. Since I posted this that is exactly what I’ve done. It also makes the controller work by default instead of having to set up a track with a big Max/MSP patch every time I want to use the pedal. Max/MSP is great at bridging the gap between plugging wires into modules and actually writing software; however, the more I know about programming, the more I wish I could just write the whole thing in python or java or something.

  5. hi, great work man!!
    i’m switching from a fcb1010 to fbv shortboard mk2
    in the beginning of the article you write that you build a patch in which you translate the midi cc into midi notes and create banks.
    would you mind sharing with me the file. i’m trying to achieve the same result but i’m still not so good with Max.
    “My solution was to take the FBV and write a tool in Max For Live that would take the CC messages that the FBV sends and turn them into midi note messages. I initially wanted the bank buttons to set banks and then based on that number send different midi notes so that instead of being limited to 13 midi buttons I would have x banks of 9 buttons.”

    greets
    Davide

Leave a Reply

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