summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
authorLen Ovens <len@ovenwerks.net>2016-07-08 11:54:37 -0700
committerLen Ovens <len@ovenwerks.net>2016-07-08 11:54:37 -0700
commit97b1725023fb58e9b26300d58a09eff5d6ce2084 (patch)
tree15c0f0e4e47acd1ec532da8f3d6b0bb1cfc52c9b /libs
parentf84a7605d8781df6f4d2214c636d9f438c93ae33 (diff)
OSC: Add well known controls for pan and compressor
Diffstat (limited to 'libs')
-rw-r--r--libs/surfaces/osc/osc.cc225
-rw-r--r--libs/surfaces/osc/osc.h19
2 files changed, 230 insertions, 14 deletions
diff --git a/libs/surfaces/osc/osc.cc b/libs/surfaces/osc/osc.cc
index f13ade8eb4..3f6656e835 100644
--- a/libs/surfaces/osc/osc.cc
+++ b/libs/surfaces/osc/osc.cc
@@ -549,6 +549,15 @@ OSC::register_callbacks()
REGISTER_CALLBACK (serv, "/select/send_fader", "if", sel_sendfader);
REGISTER_CALLBACK (serv, "/select/send_enable", "if", sel_sendenable);
REGISTER_CALLBACK (serv, "/select/expand", "i", sel_expand);
+ REGISTER_CALLBACK (serv, "/select/pan_elevation_position", "f", sel_pan_elevation);
+ REGISTER_CALLBACK (serv, "/select/pan_frontback_position", "f", sel_pan_frontback);
+ REGISTER_CALLBACK (serv, "/select/pan_lfe_position", "f", sel_pan_lfe);
+ REGISTER_CALLBACK (serv, "/select/comp_enable", "f", sel_comp_enable);
+ REGISTER_CALLBACK (serv, "/select/comp_threshold", "f", sel_comp_threshold);
+ REGISTER_CALLBACK (serv, "/select/comp_speed", "f", sel_comp_speed);
+ REGISTER_CALLBACK (serv, "/select/comp_mode", "f", sel_comp_mode);
+ REGISTER_CALLBACK (serv, "/select/comp_makeup", "f", sel_comp_makeup);
+ REGISTER_CALLBACK (serv, "/select/comp_redux", "f", sel_comp_redux);
/* These commands require the route index in addition to the arg; TouchOSC (et al) can't use these */
REGISTER_CALLBACK (serv, "/strip/mute", "ii", route_mute);
@@ -1686,7 +1695,7 @@ OSC::sel_mute (uint32_t yn, lo_message msg)
return 0;
}
}
- return route_send_fail ("mute", 0, 0, lo_message_get_source (msg));
+ return sel_fail ("mute", 0, lo_message_get_source (msg));
}
int
@@ -1753,7 +1762,7 @@ OSC::sel_solo (uint32_t yn, lo_message msg)
return 0;
}
}
- return route_send_fail ("solo", 0, 0, lo_message_get_source (msg));
+ return sel_fail ("solo", 0, lo_message_get_source (msg));
}
int
@@ -1772,7 +1781,7 @@ OSC::sel_solo_iso (uint32_t yn, lo_message msg)
return 0;
}
}
- return route_send_fail ("solo_iso", 0, 0, lo_message_get_source (msg));
+ return sel_fail ("solo_iso", 0, lo_message_get_source (msg));
}
int
@@ -1791,7 +1800,7 @@ OSC::sel_solo_safe (uint32_t yn, lo_message msg)
return 0;
}
}
- return route_send_fail ("solo_safe", 0, 0, lo_message_get_source (msg));
+ return sel_fail ("solo_safe", 0, lo_message_get_source (msg));
}
int
@@ -1810,7 +1819,7 @@ OSC::sel_recenable (uint32_t yn, lo_message msg)
return 0;
}
}
- return route_send_fail ("recenable", 0, 0, lo_message_get_source (msg));
+ return sel_fail ("recenable", 0, lo_message_get_source (msg));
}
int
@@ -1846,7 +1855,7 @@ OSC::sel_recsafe (uint32_t yn, lo_message msg)
return 0;
}
}
- return route_send_fail ("record_safe", 0, 0, lo_message_get_source (msg));
+ return sel_fail ("record_safe", 0, lo_message_get_source (msg));
}
int
@@ -1903,7 +1912,7 @@ OSC::sel_monitor_input (uint32_t yn, lo_message msg)
}
}
}
- return route_send_fail ("monitor_input", 0, 0, lo_message_get_source (msg));
+ return sel_fail ("monitor_input", 0, lo_message_get_source (msg));
}
int
@@ -1944,7 +1953,7 @@ OSC::sel_monitor_disk (uint32_t yn, lo_message msg)
}
}
}
- return route_send_fail ("monitor_disk", 0, 0, lo_message_get_source (msg));
+ return sel_fail ("monitor_disk", 0, lo_message_get_source (msg));
}
@@ -1980,7 +1989,7 @@ OSC::sel_phase (uint32_t yn, lo_message msg)
return 0;
}
}
- return route_send_fail ("polarity", 0, 0, lo_message_get_source (msg));
+ return sel_fail ("polarity", 0, lo_message_get_source (msg));
}
int
@@ -2169,7 +2178,7 @@ OSC::sel_gain (float val, lo_message msg)
return 0;
}
}
- return route_send_fail ("gain", 0, -193, lo_message_get_source (msg));
+ return sel_fail ("gain", -193, lo_message_get_source (msg));
}
int
@@ -2213,7 +2222,7 @@ OSC::sel_fader (float val, lo_message msg)
return 0;
}
}
- return route_send_fail ("fader", 0, 0, lo_message_get_source (msg));
+ return sel_fail ("fader", 0, lo_message_get_source (msg));
}
int
@@ -2261,7 +2270,7 @@ OSC::sel_trim (float val, lo_message msg)
return 0;
}
}
- return route_send_fail ("trimdB", 0, 0, lo_message_get_source (msg));
+ return sel_fail ("trimdB", 0, lo_message_get_source (msg));
}
int
@@ -2281,7 +2290,7 @@ OSC::sel_pan_position (float val, lo_message msg)
return 0;
}
}
- return route_send_fail ("pan_stereo_position", 0, 0.5, lo_message_get_source (msg));
+ return sel_fail ("pan_stereo_position", 0.5, lo_message_get_source (msg));
}
int
@@ -2300,7 +2309,7 @@ OSC::sel_pan_width (float val, lo_message msg)
return 0;
}
}
- return route_send_fail ("pan_stereo_width", 0, 1, lo_message_get_source (msg));
+ return sel_fail ("pan_stereo_width", 1, lo_message_get_source (msg));
}
int
@@ -2602,6 +2611,179 @@ OSC::route_plugin_parameter_print (int ssid, int piid, int par, lo_message msg)
return 0;
}
+// select
+
+int
+OSC::sel_pan_elevation (float val, lo_message msg)
+{
+ OSCSurface *sur = get_surface(lo_message_get_source (msg));
+ boost::shared_ptr<Stripable> s;
+ if (sur->expand_enable) {
+ s = get_strip (sur->expand, lo_message_get_source (msg));
+ } else {
+ s = _select;
+ }
+ if (s) {
+ if (s->pan_elevation_control()) {
+ s->pan_elevation_control()->set_value (val, PBD::Controllable::NoGroup);
+ return 0;
+ }
+ }
+ return sel_fail ("pan_elevation_position", 0.5, lo_message_get_source (msg));
+}
+
+int
+OSC::sel_pan_frontback (float val, lo_message msg)
+{
+ OSCSurface *sur = get_surface(lo_message_get_source (msg));
+ boost::shared_ptr<Stripable> s;
+ if (sur->expand_enable) {
+ s = get_strip (sur->expand, lo_message_get_source (msg));
+ } else {
+ s = _select;
+ }
+ if (s) {
+ if (s->pan_frontback_control()) {
+ s->pan_frontback_control()->set_value (val, PBD::Controllable::NoGroup);
+ return 0;
+ }
+ }
+ return sel_fail ("pan_frontback_position", 0.5, lo_message_get_source (msg));
+}
+
+int
+OSC::sel_pan_lfe (float val, lo_message msg)
+{
+ OSCSurface *sur = get_surface(lo_message_get_source (msg));
+ boost::shared_ptr<Stripable> s;
+ if (sur->expand_enable) {
+ s = get_strip (sur->expand, lo_message_get_source (msg));
+ } else {
+ s = _select;
+ }
+ if (s) {
+ if (s->pan_lfe_control()) {
+ s->pan_lfe_control()->set_value (val, PBD::Controllable::NoGroup);
+ return 0;
+ }
+ }
+ return sel_fail ("pan_lfe_position", 0, lo_message_get_source (msg));
+}
+
+int
+OSC::sel_comp_enable (float val, lo_message msg)
+{
+ OSCSurface *sur = get_surface(lo_message_get_source (msg));
+ boost::shared_ptr<Stripable> s;
+ if (sur->expand_enable) {
+ s = get_strip (sur->expand, lo_message_get_source (msg));
+ } else {
+ s = _select;
+ }
+ if (s) {
+ if (s->comp_enable_controllable()) {
+ s->comp_enable_controllable()->set_value (val, PBD::Controllable::NoGroup);
+ return 0;
+ }
+ }
+ return sel_fail ("comp_enable", 0, lo_message_get_source (msg));
+}
+
+int
+OSC::sel_comp_threshold (float val, lo_message msg)
+{
+ OSCSurface *sur = get_surface(lo_message_get_source (msg));
+ boost::shared_ptr<Stripable> s;
+ if (sur->expand_enable) {
+ s = get_strip (sur->expand, lo_message_get_source (msg));
+ } else {
+ s = _select;
+ }
+ if (s) {
+ if (s->comp_threshold_controllable()) {
+ s->comp_threshold_controllable()->set_value (val, PBD::Controllable::NoGroup);
+ return 0;
+ }
+ }
+ return sel_fail ("comp_threshold", 0, lo_message_get_source (msg));
+}
+
+int
+OSC::sel_comp_speed (float val, lo_message msg)
+{
+ OSCSurface *sur = get_surface(lo_message_get_source (msg));
+ boost::shared_ptr<Stripable> s;
+ if (sur->expand_enable) {
+ s = get_strip (sur->expand, lo_message_get_source (msg));
+ } else {
+ s = _select;
+ }
+ if (s) {
+ if (s->comp_speed_controllable()) {
+ s->comp_speed_controllable()->set_value (val, PBD::Controllable::NoGroup);
+ return 0;
+ }
+ }
+ return sel_fail ("comp_speed", 0, lo_message_get_source (msg));
+}
+
+int
+OSC::sel_comp_mode (float val, lo_message msg)
+{
+ OSCSurface *sur = get_surface(lo_message_get_source (msg));
+ boost::shared_ptr<Stripable> s;
+ if (sur->expand_enable) {
+ s = get_strip (sur->expand, lo_message_get_source (msg));
+ } else {
+ s = _select;
+ }
+ if (s) {
+ if (s->comp_mode_controllable()) {
+ s->comp_mode_controllable()->set_value (val, PBD::Controllable::NoGroup);
+ return 0;
+ }
+ }
+ return sel_fail ("comp_mode", 0, lo_message_get_source (msg));
+}
+
+int
+OSC::sel_comp_makeup (float val, lo_message msg)
+{
+ OSCSurface *sur = get_surface(lo_message_get_source (msg));
+ boost::shared_ptr<Stripable> s;
+ if (sur->expand_enable) {
+ s = get_strip (sur->expand, lo_message_get_source (msg));
+ } else {
+ s = _select;
+ }
+ if (s) {
+ if (s->comp_makeup_controllable()) {
+ s->comp_makeup_controllable()->set_value (val, PBD::Controllable::NoGroup);
+ return 0;
+ }
+ }
+ return sel_fail ("comp_makeup", 0, lo_message_get_source (msg));
+}
+
+int
+OSC::sel_comp_redux (float val, lo_message msg)
+{
+ OSCSurface *sur = get_surface(lo_message_get_source (msg));
+ boost::shared_ptr<Stripable> s;
+ if (sur->expand_enable) {
+ s = get_strip (sur->expand, lo_message_get_source (msg));
+ } else {
+ s = _select;
+ }
+ if (s) {
+ if (s->comp_redux_controllable()) {
+ s->comp_redux_controllable()->set_value (val, PBD::Controllable::NoGroup);
+ return 0;
+ }
+ }
+ return sel_fail ("comp_redux", 0, lo_message_get_source (msg));
+}
+
void
OSC::gui_selection_changed ()
{
@@ -2693,6 +2875,21 @@ OSC::route_send_fail (string path, uint32_t ssid, float val, lo_address addr)
}
int
+OSC::sel_fail (string path, float val, lo_address addr)
+{
+ ostringstream os;
+ os.str("");
+ os << "/select/" << path;
+ string sel_pth = os.str();
+ lo_message reply = lo_message_new ();
+ lo_message_add_float (reply, (float) val);
+ lo_send_message (addr, sel_pth.c_str(), reply);
+ lo_message_free (reply);
+
+ return 0;
+}
+
+int
OSC::sel_send_fail (string path, uint32_t id, float val, lo_address addr)
{
OSCSurface *sur = get_surface(addr);
diff --git a/libs/surfaces/osc/osc.h b/libs/surfaces/osc/osc.h
index 6a38d32a31..f133f5032f 100644
--- a/libs/surfaces/osc/osc.h
+++ b/libs/surfaces/osc/osc.h
@@ -338,6 +338,15 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI<OSCUIRequest>
PATH_CALLBACK1_MSG(sel_trim,f);
PATH_CALLBACK1_MSG(sel_pan_position,f);
PATH_CALLBACK1_MSG(sel_pan_width,f);
+ PATH_CALLBACK1_MSG(sel_pan_elevation,f);
+ PATH_CALLBACK1_MSG(sel_pan_frontback,f);
+ PATH_CALLBACK1_MSG(sel_pan_lfe,f);
+ PATH_CALLBACK1_MSG(sel_comp_enable,f);
+ PATH_CALLBACK1_MSG(sel_comp_threshold,f);
+ PATH_CALLBACK1_MSG(sel_comp_speed,f);
+ PATH_CALLBACK1_MSG(sel_comp_mode,f);
+ PATH_CALLBACK1_MSG(sel_comp_makeup,f);
+ PATH_CALLBACK1_MSG(sel_comp_redux,f);
PATH_CALLBACK1_MSG(sel_expand,i);
#define PATH_CALLBACK2(name,arg1type,arg2type) \
@@ -481,6 +490,15 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI<OSCUIRequest>
int sel_sendfader (int id, float pos, lo_message msg);
int sel_sendenable (int id, float pos, lo_message msg);
int sel_expand (uint32_t state, lo_message msg);
+ int sel_pan_elevation (float val, lo_message msg);
+ int sel_pan_frontback (float val, lo_message msg);
+ int sel_pan_lfe (float val, lo_message msg);
+ int sel_comp_enable (float val, lo_message msg);
+ int sel_comp_threshold (float val, lo_message msg);
+ int sel_comp_speed (float val, lo_message msg);
+ int sel_comp_mode (float val, lo_message msg);
+ int sel_comp_makeup (float val, lo_message msg);
+ int sel_comp_redux (float val, lo_message msg);
void listen_to_route (boost::shared_ptr<ARDOUR::Stripable>, lo_address);
void end_listen (boost::shared_ptr<ARDOUR::Stripable>, lo_address);
@@ -501,6 +519,7 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI<OSCUIRequest>
int route_send_fail (std::string path, uint32_t ssid, float val, lo_address addr);
int sel_send_fail (std::string path, uint32_t id, float val, lo_address addr);
+ int sel_fail (std::string path, float val, lo_address addr);
typedef std::list<OSCRouteObserver*> RouteObservers;