Setting (and getting) the selected_track from LiveAPI.


    Jul 10 2011 | 6:16 pm
    Hello, javascripting Maxers.
    I make pretty heavy use of Max For Live, but I do as much of my processing as possible in Javascript, not just because manipulating lists is so much easier in Javascript, but because I can easily "virtualize" my commands - store them as a chunk of data in a list somewhere so I can attach "any" Max For Live command to "any" trigger.
    So far so good, but this week I'm trying to set the selected_track and failing. Here's my attempts!
    function setValue(path, name, value) {
      post(path, ',', name, ',', value, 'n');
      var api = new LiveAPI(this.patcher);
      api.path = path;
      api.set(name, value);
    };
    
    // There is definitely a track id 6 in this project, as I can see by instrumenting
    // M4L.api.SetSelectedTrackIndex.  In my production code, I compute this id,
    // it isn't hard-coded.
    
    function takeFocus() {
      setValue('live_set view', 'selected_track', 'id 6');
      setValue('live_set view', 'selected_track', '6');
      setValue('live_set view', 'selected_track', 6);
      setValue('live_set view', 'selected_track', ['id', '6']);
      setValue('live_set view', 'selected_track', ['id', 6]);
      setValue('live_set view', 'selected_track id', '6');
      setValue('live_set view selected_track', 'id', '6');
    };
    
    // RESULTS:
    //   js: live_set view  ,  selected_track  ,  id 6
    //   jsliveapi: set: no valid object id
    //   js: live_set view  ,  selected_track  ,  6
    //   jsliveapi: set: no valid object id
    //   js: live_set view  ,  selected_track  ,  6
    //   jsliveapi: set: no valid object id
    //   js: live_set view  ,  selected_track  ,  id  6
    //   jsliveapi: set: no valid object id
    //   js: live_set view  ,  selected_track  ,  id  6
    //   jsliveapi: set: no valid object id
    //   js: live_set view  ,  selected_track id  ,  6
    //   jsliveapi: Invalid syntax
    //   js: live_set view selected_track  ,  id  ,  6
    //   jsliveapi: Invalid syntax
    As I mention in the comments, a track with id 6 definitely exist, and if I do the same thing in pure Max using live.path and live.object, it works fine...

    • Jul 10 2011 | 7:34 pm
      Apparently LiveAPI.set is less tolerant of list vs. string input than LiveAPI.path, but I worked it all out!
      My goal was to select the Ableton Live track containing the Max For Live patch device!
      and when I got rid of all my testing code it becomes simply
      var api = new LiveAPI(this.patcher);
      api.path = 'this_device canonical_parent';
      var id = api.id;
      api.path = ['live_set', 'view'];
      api.set('selected_track', 'id', id);
      You can find a function to do this in my code repository here.