From 42a4216f222cca30222a94f26655a3e4e15baec6 Mon Sep 17 00:00:00 2001 From: Ben Loftis Date: Sat, 1 Oct 2022 07:57:47 -0500 Subject: [PATCH] osc: publish session-provided trigger functions: bang/unbang --- libs/surfaces/osc/osc.cc | 60 ++++++++++++++++++++++++++++++++++++++++ libs/surfaces/osc/osc.h | 7 +++++ 2 files changed, 67 insertions(+) diff --git a/libs/surfaces/osc/osc.cc b/libs/surfaces/osc/osc.cc index a287d7eea2..0b97266e6d 100644 --- a/libs/surfaces/osc/osc.cc +++ b/libs/surfaces/osc/osc.cc @@ -462,6 +462,10 @@ OSC::register_callbacks() REGISTER_CALLBACK (serv, X_("/trigger_cue_row"), "i", trigger_cue_row); REGISTER_CALLBACK (serv, X_("/trigger_stop_all"), "i", trigger_stop_all); + REGISTER_CALLBACK (serv, X_("/trigger_stop"), "ii", trigger_stop); //Route num (position on the Cue page), Stop now + REGISTER_CALLBACK (serv, X_("/trigger_bang"), "ii", trigger_bang); //Route num (position on the Cue page), Trigger index + REGISTER_CALLBACK (serv, X_("/trigger_unbang"), "ii", trigger_unbang); //Route num (position on the Cue page), Trigger index + REGISTER_CALLBACK (serv, X_("/save_state"), "", save_state); REGISTER_CALLBACK (serv, X_("/save_state"), "f", save_state); REGISTER_CALLBACK (serv, X_("/prev_marker"), "", prev_marker); @@ -5436,6 +5440,62 @@ OSC::route_plugin_parameter (int ssid, int piid, int par, float val, lo_message return 0; } +int +OSC::trigger_stop (int route_index, int now, lo_message msg) +{ + if (!session) { + return -1; + } + + /* this function doesn't refer to surface banking but instead directly controls routes in the order they appear on the trigger_page + */ + + int index = 0; + StripableList sl; + session->get_stripables (sl); + sl.sort (Stripable::Sorter ()); + for (StripableList::iterator s = sl.begin (); s != sl.end (); ++s) { + boost::shared_ptr r = boost::dynamic_pointer_cast (*s); + if (!r || !r->triggerbox ()) { + continue; + } + /* we're only interested in Trigger Tracks */ + if (!(r->presentation_info ().trigger_track ())) { + continue; + } + if (index == route_index) { + r->stop_triggers(now!=0); + break; + } + index++; + } + return 0; +} + +int +OSC::trigger_bang (int route_index, int row_index, lo_message msg) +{ + if (!session) { + return -1; + } + + bang_trigger_at(route_index, row_index); + + return 0; +} + +int +OSC::trigger_unbang (int route_index, int row_index, lo_message msg) +{ + if (!session) { + return -1; + } + + unbang_trigger_at(route_index, row_index); + + return 0; +} + //prints to cerr only int OSC::route_plugin_parameter_print (int ssid, int piid, int par, lo_message msg) diff --git a/libs/surfaces/osc/osc.h b/libs/surfaces/osc/osc.h index 5805c0d648..5f440fbd30 100644 --- a/libs/surfaces/osc/osc.h +++ b/libs/surfaces/osc/osc.h @@ -632,6 +632,9 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI PATH_CALLBACK1_MSG(route_plugin_list,i); PATH_CALLBACK2_MSG(route_plugin_descriptor,i,i); PATH_CALLBACK2_MSG(route_plugin_reset,i,i); + PATH_CALLBACK2_MSG(trigger_bang,i,i); + PATH_CALLBACK2_MSG(trigger_unbang,i,i); + PATH_CALLBACK2_MSG(trigger_stop,i,i); /* second arg is 'stop now' */ int strip_parse (const char *path, const char* types, lo_arg **argv, int argc, lo_message msg); int master_parse (const char *path, const char* types, lo_arg **argv, int argc, lo_message msg); @@ -655,6 +658,10 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI int route_plugin_descriptor(int ssid, int piid, lo_message msg); int route_plugin_reset(int ssid, int piid, lo_message msg); + int trigger_bang(int rid, int stop_now, lo_message msg); + int trigger_unbang(int rid, int stop_now, lo_message msg); + int trigger_stop(int rid, int row_id, lo_message msg); + //banking functions int set_bank (uint32_t bank_start, lo_message msg); int _set_bank (uint32_t bank_start, lo_address addr);