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…