MIDI Mapping data from Ableton
I'm trying to write a M4L patch that can automatically update all faders and buttons that I have set up in an app on my android tablet that I use to control Ableton parameters through midi mapping, like it does when I open a new set. To do this I originally tried to just bang all of my live set's devices' parameters so it would output the current state of each parameter to my app but it was too slow having to go through the hundreds of available parameters. What I want to try doing is just banging the parameters that are midi mapped but to do this I need to figure out how to query live for only the parameters that are midi mapped, I saw in the Live Object Model in the documentation that there's an object called MidiMap but I can't seem to access it, does anybody know anything about this?
I would also love to see more on the MidiMap in the Live Object Model. Mainly I would like to identify if it is active or not. Please Please Please
I don't know how useful it may be but I figured out that pressing ctrl+M, waiting a bit, then pressing it again causes live to send all the midimapped values out, I don't know how to do that with Max4live devices but it was useful enough for my purposes.
I'm not sure if MidiMapping will be faster, I'd think getting access to the parameters you need through M4L should be pretty fast.
Why don't you create a M4L device that only queries the parameters you currently have midimapped? that should reduce the data a bit.
That's what I was looking to do, can you suggest a way to figure out which parameters are midi mapped through M4L?
hmm no... I don't think you can.
There may be some manual work involved there - and I understand this was your original question.
pretty sure you can't do this in m4l - I *think* you get can access to this info in python, but that would require some python coding to get it to you (as I say, think - only just getting up to speed on python side of things)
I don't think you can get anything useful there, either....the whole thing is very opaque I'm afraid.
a
thought so... I guess the only work around would be to map M4L parameters that act as proxies controlling the Live parameters and create a function that tweaks them then returns them to their values, causing Live to output the changed parameters (I figured out a while ago that simply banging the proxies doesn't prompt live to output them since they don't change). Simple but potentially tedious depending on the size of your set.
I already have a similar device that I made for the purpose of sending LED data to my guitar-shaped controller, I'll remove the LED part of it and post it here for whoever may be interested.
edit: parentheses
Here's the device, press the round orange button a couple times, select the parameter you want to map then press the orange button again, press it a couple times to unmap.
Map the live.numbox with Ableton's ctrl+m midimap function. Use the big toggle to output the values from all the live.numbox in every instance of this device in your set. The toggle should stay lit until all numboxes are tweaked, then return to 0.
the textedit at the top is just so you can remember what parameter you're controlling
You could make an audio version of this device as well so it could sit next to your audio objects. I'd do it but as I said pressing ctrl+m a couple times works well enough for me, it's just that it would be unworkable in a live situation since it's slow and I could inadvertently map something.
If you are willing to invest the time, you could remove the midi mapping and control them through M4L instead. I built a modular system which scales nicely:
there's a M4L device, and a Max patcher - these two make communication from 'inside live' to 'outside live' possible.
The max patcher is just an IO module which listens for commands using a receive object, and sends status update from LIVE using a send object. I found max messages a great way to create a standard for communicating with LIVE (messages look like "SetControl Play" or "TrackControl Track 1 Volume 0.5")
After that I have a separate max patcher for each bit of hardware that I own: it converts the signals to and from the harware into the standard Max messages. It makes it very easy to replace hardware, or control parameters from different devices.
and updates are simple: if you bang an 'observe' object, it outputs the current state, so if you include that in the M4L device for each parameter you observe, you have an easy way of updating your hardware.
hope that makes sense...