From bbb20272d5b954e288c1dd47ab5f9848ab991c8a Mon Sep 17 00:00:00 2001 From: Michiel de Roo Date: Thu, 15 Sep 2016 19:05:18 +0200 Subject: OSC added plugin activate/deactivate --- libs/surfaces/osc/osc.cc | 70 ++++++++++++++++++++++++++++++++++++++++++++++++ libs/surfaces/osc/osc.h | 4 +++ 2 files changed, 74 insertions(+) (limited to 'libs') diff --git a/libs/surfaces/osc/osc.cc b/libs/surfaces/osc/osc.cc index fd0c9c93e5..1ce3568a44 100644 --- a/libs/surfaces/osc/osc.cc +++ b/libs/surfaces/osc/osc.cc @@ -593,6 +593,8 @@ OSC::register_callbacks() REGISTER_CALLBACK (serv, "/strip/plugin/parameter", "iiif", route_plugin_parameter); // prints to cerr only REGISTER_CALLBACK (serv, "/strip/plugin/parameter/print", "iii", route_plugin_parameter_print); + REGISTER_CALLBACK (serv, "/strip/plugin/activate", "ii", route_plugin_activate); + REGISTER_CALLBACK (serv, "/strip/plugin/deactivate", "ii", route_plugin_deactivate); REGISTER_CALLBACK (serv, "/strip/send/gain", "iif", route_set_send_gain_dB); REGISTER_CALLBACK (serv, "/strip/send/fader", "iif", route_set_send_fader); REGISTER_CALLBACK (serv, "/strip/send/enable", "iif", route_set_send_enable); @@ -2722,6 +2724,74 @@ OSC::route_plugin_parameter_print (int ssid, int piid, int par, lo_message msg) return 0; } +int +OSC::route_plugin_activate (int ssid, int piid, lo_message msg) +{ + if (!session) + return -1; + boost::shared_ptr s = get_strip (ssid, lo_message_get_source (msg)); + + boost::shared_ptr r = boost::dynamic_pointer_cast (s); + + if (!r) { + PBD::error << "OSC: Invalid Remote Control ID '" << ssid << "'" << endmsg; + return -1; + } + + boost::shared_ptr redi=r->nth_plugin (piid); + + if (!redi) { + PBD::error << "OSC: cannot find plugin # " << piid << " for RID '" << ssid << "'" << endmsg; + return -1; + } + + boost::shared_ptr pi; + + if (!(pi = boost::dynamic_pointer_cast(redi))) { + PBD::error << "OSC: given processor # " << piid << " on RID '" << ssid << "' is not a Plugin." << endmsg; + return -1; + } + + boost::shared_ptr pip = pi->plugin(); + pi->activate(); + + return 0; +} + +int +OSC::route_plugin_deactivate (int ssid, int piid, lo_message msg) +{ + if (!session) + return -1; + boost::shared_ptr s = get_strip (ssid, lo_message_get_source (msg)); + + boost::shared_ptr r = boost::dynamic_pointer_cast (s); + + if (!r) { + PBD::error << "OSC: Invalid Remote Control ID '" << ssid << "'" << endmsg; + return -1; + } + + boost::shared_ptr redi=r->nth_plugin (piid); + + if (!redi) { + PBD::error << "OSC: cannot find plugin # " << piid << " for RID '" << ssid << "'" << endmsg; + return -1; + } + + boost::shared_ptr pi; + + if (!(pi = boost::dynamic_pointer_cast(redi))) { + PBD::error << "OSC: given processor # " << piid << " on RID '" << ssid << "' is not a Plugin." << endmsg; + return -1; + } + + boost::shared_ptr pip = pi->plugin(); + pi->deactivate(); + + return 0; +} + // select int diff --git a/libs/surfaces/osc/osc.h b/libs/surfaces/osc/osc.h index d7dec3c39b..e15eb9a454 100644 --- a/libs/surfaces/osc/osc.h +++ b/libs/surfaces/osc/osc.h @@ -454,6 +454,8 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI PATH_CALLBACK3(route_set_send_enable,i,i,f); PATH_CALLBACK4(route_plugin_parameter,i,i,i,f); PATH_CALLBACK3(route_plugin_parameter_print,i,i,i); + PATH_CALLBACK2_MSG(route_plugin_activate,i,i); + PATH_CALLBACK2_MSG(route_plugin_deactivate,i,i); int route_mute (int rid, int yn, lo_message msg); int route_solo (int rid, int yn, lo_message msg); @@ -479,6 +481,8 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI int route_set_send_enable (int rid, int sid, float val, lo_message msg); int route_plugin_parameter (int rid, int piid,int par, float val, lo_message msg); int route_plugin_parameter_print (int rid, int piid,int par, lo_message msg); + int route_plugin_activate (int rid, int piid, lo_message msg); + int route_plugin_deactivate (int rid, int piid, lo_message msg); //banking functions int set_bank (uint32_t bank_start, lo_message msg); -- cgit v1.2.3