osc: publish session-provided trigger functions: bang/unbang

This commit is contained in:
Ben Loftis 2022-10-01 07:57:47 -05:00
parent 7fe7adb83c
commit 42a4216f22
2 changed files with 67 additions and 0 deletions

View File

@ -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<Route> r = boost::dynamic_pointer_cast<Route> (*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)

View File

@ -632,6 +632,9 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI<OSCUIRequest>
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<OSCUIRequest>
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);