Keeping track of where I am in my Ableton set from m4l (with markers?)
Hello, m4l'ers!
I have an Ableton set in "Arrangement View" and I'd like my m4l patch to "know where I am" in this set. I'd like fairly fine-grained control - I have a lot of lighting cues and I might easily have as many as 100 location points in the show.
The first thing that comes to mind is Ableton's markers. What I'd really like is a message with the name of a marker right as I pass it. Unfortunately, I haven't figured out how to do that... it seems that I have to subscribe to each marker individually, but even then, it seems that I only get changes to the marker, I don't get an event when the sequence passes over the marker.
I'm absolutely not fixed on the marker idea. Another idea I had was to add another track with just empty MIDI clips, and get the name of those clips in my m4l patch. If someone has done this, I'd love to see your code!
It seems you are right about the cue points : you can observe it but the live.observer just spits out a list of cue points ids. Would this work for you ?
For the midi clip solution, would you work in session or arrangement ?
You could use [timepoint].
You could also do this (although this seems simpler, have a look at the live.property abstraction). Just discovered this one today so thank you !
I'm doing everything in Arrangement View.
But I'd really rather avoid having to do this reverse lookup from time to marker. It just seems prone to error, particularly since my process won't necessary see the exact time that the marker appears. And what happens when I jump?
I'm still thinking of getting the names of the clips playing in a track in Arrangement Mode, a track devoted just to that. Guess I'll have to re-re-figure out that ol' LOM again... I'll post a link to the code when I'm doing.
(If I have a hundred or more cue points which I'm editing, [timepoint] isn't going to work.)
Well, I had no trouble getting the current clip name in Session View - listening to this_device canonical_parent playing_slot_index
. I already did this before...
But how to get it to see the clip playing in Arrangement View? Not a clue. :-(
I guess I'll fire up my LOMwriter and dump the entire LOM state, but it isn't looking super-promising as of right now.
No luck. There really doesn't seem to be any way to find out what clip is currently playing in Arrangement View, at least that LOM.Navigator can find. Nor is there anything in the documentation.
I did some experimenting with the markers/cuepoints solution - and it's very painful. :-(
1. You have to do some moderately serious programming. That I can do - but...
2. Markers are bogus UI elements. You cannot cut and paste them. You cannot select more than one of them. You cannot select a marker and other elements like clips and drag them around.
This second part means that even simple editing becomes both very painful and prone to error.
I'm now thinking of clips containing MIDI notes 0 through 127.... :-D Of course, I still screw up if I don't start at the start of a clip, but I can live with that.
> (If I have a hundred or more cue points which I’m editing, [timepoint] isn’t going to work.)
I think you could use [poly~] to create any number of instances which are initialized and edited via [coll] containing all pairs.
Tom Swirley why can't you just get all the CuePoints' "time in beats" and then observe Song's current_song_time to see when it matches one of them? Is there something I'm missing here?
The above is what i do and then expose 5 (three behind and two in front) to MIDI mappable buttons that allow me to jump around the set...
Cheers
D
> Tom Swirley why can’t you just get all the CuePoints’ "time in beats" and then observe Song’s current_song_time to see when it matches one of them? Is there something I’m missing here?
I did comment on this in the very post you're replying to!
"Markers" are the name that Ableton Live gives to this concept; "CuePoints" is the name for exactly the same items in Max For Live, it seems from investigating the LOM.
As I said,
2. Markers are bogus UI elements. You cannot cut and paste them. You cannot select more than one of them. You cannot select a marker and other elements like clips and drag them around.
This second part means that even simple editing becomes both very painful and prone to error.
Let me fill this out a little. Let's suppose I've created a segment with a bunch of clips and four CuePoints/Markers. Now I want to do that four times in a row.
Duplicating the clips is super-easy - I just select and option drag once, then again. It'll take me perhaps 10 seconds, tops. And I can use quantization.
But what about the markers? I have to create each one individually - I have to compute each one's location, drag it to exactly the right spot, and then type in its name. 12 separate edits - 12 drags with no quantization or snap-to or cut and paste. 12 chances to make a mistake and several minutes just dragging things around, while doing time calculations in my head.
This isn't an acceptable workflow - not even close. Often I'll say, "Hmm, what does this look like if I do it four times in a row?" , quickly cut and paste, play and then say, "No." That's fine if that edit is 10 seconds, but not fine if that's 5 minutes of mouse dragging.
No, cueing has to be clips because clips edit with all your other material. The Markers workflow is intolerable.
And since Max For Live has seemingly no way of letting you detect what clips are playing in Arrangement View, the only possibility is changing the *contents* of the clip - e.g. the note number.
I don't see a way around my reasoning.
------
It makes me very sad that whenever I try to write Max For Live programs, I almost immediately want to do very reasonable things that are difficult or even impossible.
For example, I wanted to press the button on the Ableton looper from Max For Live - but the only way to do that is to send a MIDI note out the IAC bus, have it come back in to Live, and then use a MIDI note assignment to press that button.
I wanted to process more than one MIDI channel in a Max For Live patch. But all the channel information is thrown away before it gets to the m4l patch. My solution is to use a different input channel with a tiny m4l patch that uses a send to the main m4l patch. Of course, this doesn't scale well to lots of channels.
And now, I want to simply detect what clip is playing - and I can't. Something that was scheduled to take me an hour or two has stalled me for a couple of days - and it's not that I don't know how to write Max programs...
You would think that after almost six years Max For Live would be able to do the basics - press any button you see, work on more than one MIDI channel, tell you what's going on in your sequence!
Looking at the tremendous changes that Max has undergone in those last six years - and the lack of essential changes in Live during that time - I have my suspicions as to where the blame for this lies...
ok so the only reason you don't want to use the markers is because they're difficult to edit, got it..
why not just create a MIDI track then create clips in that track that each start with one note, an M4L device in that track could pick up the notes and depending on the note number or velocity send you a message with the clip number?
I see in the LOM that the clip object has the is_playing property, I somehow suspect that this is session view only though.
There is also a playing_position property, you could maybe send a bang when this != 0.
There is a way to keep track of where clips are in the arrangement view though, you could maybe automatically generate a list of their start times using the move_playing_pos function and getting the song current_song_time. I've made a M4L device that keeps track of clips in the arrangement view even when you copy/move/duplicate them, it's paid but if you're really looking for a good solution it might be worth checking out.
http://jgarcia.hungry.jp/project/alias-clips/
> why not just create a MIDI track then create clips in that track that each start with one note,
Too late, that's exactly what I'm doing! :-D That'll give me 128 possible cues to start with and if I run out I can start using some unused CC.
you could get as many values as you want out of the MIDI notes if you detect combinations of them