summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLen Ovens <len@ovenwerks.net>2016-07-26 14:11:06 -0700
committerLen Ovens <len@ovenwerks.net>2016-07-26 14:11:06 -0700
commit69752813db02634037734851f38922ff023cfafd (patch)
tree0ca54f99d8059b7e350584cb671719208e464053
parent9079a6002c315fa7a1f03f773b691059bf15b45b (diff)
OSC: Make sends work for MB. Add pan to /path/strip
-rw-r--r--libs/surfaces/osc/osc.cc136
-rw-r--r--libs/surfaces/osc/osc.h13
-rw-r--r--libs/surfaces/osc/osc_global_observer.cc12
-rw-r--r--libs/surfaces/osc/osc_route_observer.cc11
-rw-r--r--libs/surfaces/osc/osc_select_observer.cc23
5 files changed, 95 insertions, 100 deletions
diff --git a/libs/surfaces/osc/osc.cc b/libs/surfaces/osc/osc.cc
index 71e0dd5538..a696ea884b 100644
--- a/libs/surfaces/osc/osc.cc
+++ b/libs/surfaces/osc/osc.cc
@@ -524,12 +524,12 @@ OSC::register_callbacks()
// controls for "special" strips
REGISTER_CALLBACK (serv, "/master/gain", "f", master_set_gain);
- REGISTER_CALLBACK (serv, "/master/fader", "i", master_set_fader);
+ REGISTER_CALLBACK (serv, "/master/fader", "f", master_set_fader);
REGISTER_CALLBACK (serv, "/master/mute", "i", master_set_mute);
REGISTER_CALLBACK (serv, "/master/trimdB", "f", master_set_trim);
REGISTER_CALLBACK (serv, "/master/pan_stereo_position", "f", master_set_pan_stereo_position);
REGISTER_CALLBACK (serv, "/monitor/gain", "f", monitor_set_gain);
- REGISTER_CALLBACK (serv, "/monitor/fader", "i", monitor_set_fader);
+ REGISTER_CALLBACK (serv, "/monitor/fader", "f", monitor_set_fader);
// Controls for the Selected strip
REGISTER_CALLBACK (serv, "/select/recenable", "i", sel_recenable);
@@ -585,7 +585,6 @@ 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/send/gainabs", "iif", route_set_send_gain_abs);
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);
@@ -895,6 +894,11 @@ OSC::catchall (const char *path, const char* types, lo_arg **argv, int argc, lo_
route_set_trim_dB (ssid, argv[0]->f, msg);
ret = 0;
}
+ else if (!strncmp (path, "/strip/pan_stereo_position/", 27) && strlen (path) > 27) {
+ int ssid = atoi (&path[27]);
+ route_set_pan_stereo_position (ssid, argv[0]->f, msg);
+ ret = 0;
+ }
else if (!strncmp (path, "/strip/mute/", 12) && strlen (path) > 12) {
int ssid = atoi (&path[12]);
route_mute (ssid, argv[0]->f == 1.0, msg);
@@ -937,12 +941,17 @@ OSC::catchall (const char *path, const char* types, lo_arg **argv, int argc, lo_
}
else if (!strncmp (path, "/select/send_gain/", 18) && strlen (path) > 18) {
int ssid = atoi (&path[18]);
- route_mute (ssid, argv[0]->f == 1.0, msg);
+ sel_sendgain (ssid, argv[0]->f, msg);
ret = 0;
}
else if (!strncmp (path, "/select/send_fader/", 19) && strlen (path) > 19) {
int ssid = atoi (&path[19]);
- route_solo (ssid, argv[0]->f == 1.0, msg);
+ sel_sendfader (ssid, argv[0]->f, msg);
+ ret = 0;
+ }
+ else if (!strncmp (path, "/select/send_enable/", 20) && strlen (path) > 20) {
+ int ssid = atoi (&path[20]);
+ sel_sendenable (ssid, argv[0]->f, msg);
ret = 0;
}
else if (!strncmp (path, "/select/eq_gain/", 16) && strlen (path) > 16) {
@@ -1324,14 +1333,14 @@ OSC::global_feedback (bitset<32> feedback, lo_address addr, uint32_t gainmode)
void
OSC::notify_routes_added (ARDOUR::RouteList &)
{
- // not sure if we need this
+ // not sure if we need this PI change seems to cover
//recalcbanks();
}
void
OSC::notify_vca_added (ARDOUR::VCAList &)
{
- // not sure if we need this
+ // not sure if we need this PI change seems to cover
//recalcbanks();
}
@@ -1594,16 +1603,12 @@ OSC::master_set_gain (float dB)
}
int
-OSC::master_set_fader (uint32_t position)
+OSC::master_set_fader (float position)
{
if (!session) return -1;
boost::shared_ptr<Stripable> s = session->master_out();
if (s) {
- if ((position > 799.5) && (position < 800.5)) {
- s->gain_control()->set_value (1.0, PBD::Controllable::NoGroup);
- } else {
- s->gain_control()->set_value (slider_position_to_gain_with_max (((float)position/1023), 2.0), PBD::Controllable::NoGroup);
- }
+ s->gain_control()->set_value (slider_position_to_gain_with_max (position, 2.0), PBD::Controllable::NoGroup);
}
return 0;
}
@@ -1679,16 +1684,12 @@ OSC::monitor_set_gain (float dB)
}
int
-OSC::monitor_set_fader (uint32_t position)
+OSC::monitor_set_fader (float position)
{
if (!session) return -1;
boost::shared_ptr<Stripable> s = session->monitor_out();
if (s) {
- if ((position > 799.5) && (position < 800.5)) {
- s->gain_control()->set_value (1.0, PBD::Controllable::NoGroup);
- } else {
- s->gain_control()->set_value (slider_position_to_gain_with_max (((float)position/1023), 2.0), PBD::Controllable::NoGroup);
- }
+ s->gain_control()->set_value (slider_position_to_gain_with_max (position, 2.0), PBD::Controllable::NoGroup);
}
return 0;
}
@@ -2220,11 +2221,7 @@ OSC::route_set_gain_fader (int ssid, float pos, lo_message msg)
return -1;
}
int ret;
- if ((pos > 799.5) && (pos < 800.5)) {
- ret = route_set_gain_abs (ssid, 1.0, msg);
- } else {
- ret = route_set_gain_abs (ssid, slider_position_to_gain_with_max ((pos/1023), 2.0), msg);
- }
+ ret = route_set_gain_abs (ssid, slider_position_to_gain_with_max (pos, 2.0), msg);
if (ret != 0) {
return route_send_fail ("fader", ssid, 0, lo_message_get_source (msg));
}
@@ -2243,11 +2240,7 @@ OSC::sel_fader (float val, lo_message msg)
}
if (s) {
float abs;
- if ((val > 799.5) && (val < 800.5)) {
- abs = 1.0;
- } else {
- abs = slider_position_to_gain_with_max ((val/1023), 2.0);
- }
+ abs = slider_position_to_gain_with_max (val, 2.0);
if (s->gain_control()) {
s->gain_control()->set_value (abs, PBD::Controllable::NoGroup);
return 0;
@@ -2376,48 +2369,59 @@ OSC::route_set_pan_stereo_width (int ssid, float pos, lo_message msg)
}
int
-OSC::route_set_send_gain_abs (int ssid, int sid, float val, lo_message msg)
+OSC::route_set_send_gain_dB (int ssid, int id, float val, lo_message msg)
{
if (!session) {
return -1;
}
boost::shared_ptr<Stripable> s = get_strip (ssid, lo_message_get_source (msg));
-
- if (!s) {
- return -1;
- }
-
- /* revert to zero-based counting */
-
- if (sid > 0) {
- --sid;
- }
-
- if (s->send_level_controllable (sid)) {
- s->send_level_controllable (sid)->set_value (val, PBD::Controllable::NoGroup);
- return 0;
+ float abs;
+ if (s) {
+#ifdef MIXBUS
+ abs = val;
+#else
+ if (val < -192) {
+ abs = 0;
+ } else {
+ abs = dB_to_coefficient (val);
+ }
+ if (id > 0) {
+ --id;
+ }
+#endif
+ if (s->send_level_controllable (id)) {
+ s->send_level_controllable (id)->set_value (abs, PBD::Controllable::NoGroup);
+ return 0;
+ }
}
-
- return -1;
-}
-
-int
-OSC::route_set_send_gain_dB (int ssid, int sid, float val, lo_message msg)
-{
- return route_set_send_gain_abs (ssid, sid, dB_to_coefficient (val), msg);
+ return 0;
}
int
-OSC::route_set_send_fader (int ssid, int sid, float pos, lo_message msg)
+OSC::route_set_send_fader (int ssid, int id, float val, lo_message msg)
{
if (!session) {
return -1;
}
- if ((pos > 799.5) && (pos < 800.5)) {
- return route_set_send_gain_abs (ssid, sid, 1.0, msg);
- } else {
- return route_set_send_gain_abs (ssid, sid, slider_position_to_gain_with_max ((pos/1023), 2.0), msg);
+ boost::shared_ptr<Stripable> s = get_strip (ssid, lo_message_get_source (msg));
+ float abs;
+ if (s) {
+
+ if (id > 0) {
+ --id;
+ }
+
+ if (s->send_level_controllable (id)) {
+#ifdef MIXBUS
+ abs = s->send_level_control(id)->interface_to_internal (val);
+#else
+ abs = slider_position_to_gain_with_max (val, 2.0);
+#endif
+ s->send_level_controllable (id)->set_value (abs, PBD::Controllable::NoGroup);
+ return 0;
+ }
}
+ return 0;
}
int
@@ -2432,6 +2436,9 @@ OSC::sel_sendgain (int id, float val, lo_message msg)
}
float abs;
if (s) {
+#ifdef MIXBUS
+ abs = val;
+#else
if (val < -192) {
abs = 0;
} else {
@@ -2440,7 +2447,7 @@ OSC::sel_sendgain (int id, float val, lo_message msg)
if (id > 0) {
--id;
}
-
+#endif
if (s->send_level_controllable (id)) {
s->send_level_controllable (id)->set_value (abs, PBD::Controllable::NoGroup);
return 0;
@@ -2461,21 +2468,22 @@ OSC::sel_sendfader (int id, float val, lo_message msg)
}
float abs;
if (s) {
- if ((val > 799.5) && (val < 800.5)) {
- abs = 1.0;
- } else {
- abs = slider_position_to_gain_with_max ((val/1023), 2.0);
- }
+
if (id > 0) {
--id;
}
if (s->send_level_controllable (id)) {
+#ifdef MIXBUS
+ abs = s->send_level_control(id)->interface_to_internal (val);
+#else
+ abs = slider_position_to_gain_with_max (val, 2.0);
+#endif
s->send_level_controllable (id)->set_value (abs, PBD::Controllable::NoGroup);
return 0;
}
}
- return sel_send_fail ("send_gain", id, 0, lo_message_get_source (msg));
+ return sel_send_fail ("send_fader", id, 0, lo_message_get_source (msg));
}
int
diff --git a/libs/surfaces/osc/osc.h b/libs/surfaces/osc/osc.h
index 005cac2b5f..a30d84ee04 100644
--- a/libs/surfaces/osc/osc.h
+++ b/libs/surfaces/osc/osc.h
@@ -108,7 +108,7 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI<OSCUIRequest>
std::bitset<32> strip_types;// what strip types are a part of this bank
uint32_t nstrips; // how many strips are there for strip_types
std::bitset<32> feedback; // What is fed back? strips/meters/timecode/bar_beat/global
- int gainmode; // what kind of faders do we have Gain db or position 0 to 1023?
+ int gainmode; // what kind of faders do we have Gain db or position 0 to 1?
uint32_t expand; // Used by /select/select
bool expand_enable; // use expand instead of select
OSCSelectObserver* sel_obs; // So we can sync select feedback with selected channel
@@ -301,11 +301,11 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI<OSCUIRequest>
PATH_CALLBACK1(jump_by_bars,f,);
PATH_CALLBACK1(jump_by_seconds,f,);
PATH_CALLBACK1(master_set_gain,f,);
- PATH_CALLBACK1(master_set_fader,i,);
+ PATH_CALLBACK1(master_set_fader,f,);
PATH_CALLBACK1(master_set_trim,f,);
PATH_CALLBACK1(master_set_mute,i,);
PATH_CALLBACK1(monitor_set_gain,f,);
- PATH_CALLBACK1(monitor_set_fader,i,);
+ PATH_CALLBACK1(monitor_set_fader,f,);
#define PATH_CALLBACK1_MSG(name,arg1type) \
static int _ ## name (const char *path, const char *types, lo_arg **argv, int argc, void *data, void *user_data) { \
@@ -422,13 +422,11 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI<OSCUIRequest>
PATH_CALLBACK2_MSG(strip_phase,i,i);
PATH_CALLBACK2_MSG(strip_expand,i,i);
PATH_CALLBACK2_MSG(strip_gui_select,i,i);
- PATH_CALLBACK2_MSG(route_set_gain_abs,i,f);
PATH_CALLBACK2_MSG(route_set_gain_dB,i,f);
PATH_CALLBACK2_MSG(route_set_gain_fader,i,f);
PATH_CALLBACK2_MSG(route_set_trim_dB,i,f);
PATH_CALLBACK2_MSG(route_set_pan_stereo_position,i,f);
PATH_CALLBACK2_MSG(route_set_pan_stereo_width,i,f);
- PATH_CALLBACK3(route_set_send_gain_abs,i,i,f);
PATH_CALLBACK3(route_set_send_gain_dB,i,i,f);
PATH_CALLBACK3(route_set_send_fader,i,i,f);
PATH_CALLBACK3(route_set_send_enable,i,i,f);
@@ -454,7 +452,6 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI<OSCUIRequest>
int route_set_trim_dB (int rid, float dB, lo_message msg);
int route_set_pan_stereo_position (int rid, float left_right_fraction, lo_message msg);
int route_set_pan_stereo_width (int rid, float percent, lo_message msg);
- int route_set_send_gain_abs (int rid, int sid, float val, lo_message msg);
int route_set_send_gain_dB (int rid, int sid, float val, lo_message msg);
int route_set_send_fader (int rid, int sid, float val, lo_message msg);
int route_set_send_enable (int rid, int sid, float val, lo_message msg);
@@ -473,12 +470,12 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI<OSCUIRequest>
int set_surface_gainmode (uint32_t gm, lo_message msg);
int master_set_gain (float dB);
- int master_set_fader (uint32_t position);
+ int master_set_fader (float position);
int master_set_trim (float dB);
int master_set_pan_stereo_position (float position, lo_message msg);
int master_set_mute (uint32_t state);
int monitor_set_gain (float dB);
- int monitor_set_fader (uint32_t position);
+ int monitor_set_fader (float position);
int sel_recenable (uint32_t state, lo_message msg);
int sel_recsafe (uint32_t state, lo_message msg);
int sel_mute (uint32_t state, lo_message msg);
diff --git a/libs/surfaces/osc/osc_global_observer.cc b/libs/surfaces/osc/osc_global_observer.cc
index 721cb0e66b..72928e310d 100644
--- a/libs/surfaces/osc/osc_global_observer.cc
+++ b/libs/surfaces/osc/osc_global_observer.cc
@@ -232,13 +232,13 @@ OSCGlobalObserver::tick ()
if (feedback[7] || feedback[8] || feedback[9]) { // meters enabled
// the only meter here is master
float now_meter = session->master_out()->peak_meter()->meter_level(0, MeterMCP);
- if (now_meter < -120) now_meter = -193;
+ if (now_meter < -94) now_meter = -193;
if (_last_meter != now_meter) {
if (feedback[7] || feedback[8]) {
lo_message msg = lo_message_new ();
if (gainmode && feedback[7]) {
- uint32_t lev1023 = (uint32_t)((now_meter + 54) * 17.05);
- lo_message_add_int32 (msg, lev1023);
+ // change from db to 0-1
+ lo_message_add_float (msg, ((now_meter + 94) / 100));
lo_send_message (addr, "/master/meter", msg);
} else if ((!gainmode) && feedback[7]) {
lo_message_add_float (msg, now_meter);
@@ -287,11 +287,7 @@ OSCGlobalObserver::send_gain_message (string path, boost::shared_ptr<Controllabl
lo_message msg = lo_message_new ();
if (gainmode) {
- if (controllable->get_value() == 1) {
- lo_message_add_int32 (msg, 800);
- } else {
- lo_message_add_int32 (msg, gain_to_slider_position (controllable->get_value()) * 1023);
- }
+ lo_message_add_float (msg, gain_to_slider_position (controllable->get_value()));
} else {
if (controllable->get_value() < 1e-15) {
lo_message_add_float (msg, -200);
diff --git a/libs/surfaces/osc/osc_route_observer.cc b/libs/surfaces/osc/osc_route_observer.cc
index dc981534dc..7c9374aeb2 100644
--- a/libs/surfaces/osc/osc_route_observer.cc
+++ b/libs/surfaces/osc/osc_route_observer.cc
@@ -161,7 +161,7 @@ OSCRouteObserver::tick ()
} else {
now_meter = -193;
}
- if (now_meter < -144) now_meter = -193;
+ if (now_meter < -120) now_meter = -193;
if (_last_meter != now_meter) {
if (feedback[7] || feedback[8]) {
string path = "/strip/meter";
@@ -172,8 +172,7 @@ OSCRouteObserver::tick ()
lo_message_add_int32 (msg, ssid);
}
if (gainmode && feedback[7]) {
- uint32_t lev1023 = (uint32_t)((now_meter + 54) * 17.05);
- lo_message_add_int32 (msg, lev1023);
+ lo_message_add_float (msg, ((now_meter + 94) / 100));
lo_send_message (addr, path.c_str(), msg);
} else if ((!gainmode) && feedback[7]) {
lo_message_add_float (msg, now_meter);
@@ -327,11 +326,7 @@ OSCRouteObserver::send_gain_message (string path, boost::shared_ptr<Controllable
}
if (gainmode) {
- if (controllable->get_value() == 1) {
- lo_message_add_int32 (msg, 800);
- } else {
- lo_message_add_int32 (msg, gain_to_slider_position (controllable->get_value()) * 1023);
- }
+ lo_message_add_float (msg, gain_to_slider_position (controllable->get_value()));
} else {
if (controllable->get_value() < 1e-15) {
lo_message_add_float (msg, -200);
diff --git a/libs/surfaces/osc/osc_select_observer.cc b/libs/surfaces/osc/osc_select_observer.cc
index 2a42f0346c..7f50c71106 100644
--- a/libs/surfaces/osc/osc_select_observer.cc
+++ b/libs/surfaces/osc/osc_select_observer.cc
@@ -302,8 +302,7 @@ OSCSelectObserver::tick ()
string path = "/select/meter";
lo_message msg = lo_message_new ();
if (gainmode && feedback[7]) {
- uint32_t lev1023 = (uint32_t)((now_meter + 54) * 17.05);
- lo_message_add_int32 (msg, lev1023);
+ lo_message_add_float (msg, ((now_meter + 94) / 100));
lo_send_message (addr, path.c_str(), msg);
} else if ((!gainmode) && feedback[7]) {
lo_message_add_float (msg, now_meter);
@@ -439,17 +438,21 @@ OSCSelectObserver::gain_message (string path, boost::shared_ptr<Controllable> co
lo_message msg = lo_message_new ();
if (gainmode) {
- if (controllable->get_value() == 1) {
- lo_message_add_int32 (msg, 800);
- } else {
- lo_message_add_int32 (msg, gain_to_slider_position (controllable->get_value()) * 1023);
- }
+#ifdef MIXBUS
+ lo_message_add_float (msg, controllable->internal_to_interface (val));
+#else
+ lo_message_add_float (msg, gain_to_slider_position (controllable->get_value()));
+#endif
} else {
+#ifdef MIXBUS
+ lo_message_add_float (msg, val);
+#else
if (controllable->get_value() < 1e-15) {
lo_message_add_float (msg, -200);
} else {
lo_message_add_float (msg, accurate_coefficient_to_dB (controllable->get_value()));
}
+#endif
}
lo_send_message (addr, path.c_str(), msg);
@@ -465,11 +468,7 @@ OSCSelectObserver::send_gain (uint32_t id, boost::shared_ptr<PBD::Controllable>
if (gainmode) {
path = "/select/send_fader";
- if (controllable->get_value() == 1) {
- value = 800;
- } else {
- value = gain_to_slider_position (controllable->get_value());
- }
+ value = gain_to_slider_position (controllable->get_value());
} else {
path = "/select/send_gain";
if (controllable->get_value() < 1e-15) {