Hi,

I just discovered that ardour is controllable via OSC in pd!  In the past, I have used midi keys to sync my pd patches and ardour, but this was always a little painful.  So, as I hadn't seen any other reference of this, I thought I would post what commands are available here.

First, you have to turn on OSC within ardour (2.2 or up), which is in options->misc options.  Then, if this is your first time, a file will be written to .ardour2/osc_url that contains what udp port ardour communicates osc messages.  This is connectable in pd with, in my case:

| connect localhost 3819 (
|
[sendOSC]

Then you have these commands available within pd (this is taken directly out of ardour-2.4.1/src/libs/ardour/osc.cc).  The message you would type in pd would be something like "send /ardour/add_marker".  I haven't tried any of these but start and stop yet, but here they are:

REGISTER_CALLBACK (serv, "/ardour/add_marker", "", add_marker);
        REGISTER_CALLBACK (serv, "/ardour/loop_toggle", "", loop_toggle);
        REGISTER_CALLBACK (serv, "/ardour/goto_start", "", goto_start);
        REGISTER_CALLBACK (serv, "/ardour/goto_end", "", goto_end);
        REGISTER_CALLBACK (serv, "/ardour/rewind", "", rewind);
        REGISTER_CALLBACK (serv, "/ardour/ffwd", "", ffwd);
        REGISTER_CALLBACK (serv, "/ardour/transport_stop", "", transport_stop);
        REGISTER_CALLBACK (serv, "/ardour/transport_play", "", transport_play);
        REGISTER_CALLBACK (serv, "/ardour/set_transport_speed", "f", set_transport_speed);
        REGISTER_CALLBACK (serv, "/ardour/save_state", "", save_state);
        REGISTER_CALLBACK (serv, "/ardour/prev_marker", "", prev_marker);
        REGISTER_CALLBACK (serv, "/ardour/next_marker", "", next_marker);
        REGISTER_CALLBACK (serv, "/ardour/undo", "", undo);
        REGISTER_CALLBACK (serv, "/ardour/redo", "", redo);
        REGISTER_CALLBACK (serv, "/ardour/toggle_punch_in", "", toggle_punch_in);
        REGISTER_CALLBACK (serv, "/ardour/toggle_punch_out", "", toggle_punch_out);
        REGISTER_CALLBACK (serv, "/ardour/rec_enable_toggle", "", rec_enable_toggle);
        REGISTER_CALLBACK (serv, "/ardour/toggle_all_rec_enables", "", toggle_all_rec_enables);

#if 0
        REGISTER_CALLBACK (serv, "/ardour/*/#current_value", "", current_value);
        REGISTER_CALLBACK (serv, "/ardour/set", "", set);
#endif

#if 0
        // un/register_update args= s:ctrl s:returl s:retpath
        lo_server_add_method(serv, "/register_update", "sss", OSC::global_register_update_handler, this);
        lo_server_add_method(serv, "/unregister_update", "sss", OSC::global_unregister_update_handler, this);
        lo_server_add_method(serv, "/register_auto_update", "siss", OSC::global_register_auto_update_handler, this);
        lo_server_add_method(serv, "/unregister_auto_update", "sss", OSC::_global_unregister_auto_update_handler, this);


-rich