summaryrefslogtreecommitdiff
path: root/libs/surfaces/osc/osc.cc
diff options
context:
space:
mode:
authorLen Ovens <len@ovenwerks.net>2017-06-22 12:54:03 -0700
committerLen Ovens <len@ovenwerks.net>2017-06-22 12:54:03 -0700
commit7af5de2074a5bac7bc43f68d6784e436069fae99 (patch)
treeec0c0f64cd641fa70e668d134d96095fff375f98 /libs/surfaces/osc/osc.cc
parent57e7531b1f69f7ffd65f089d5145ac4ce5f9bcc0 (diff)
OSC: Add increment fader.
Diffstat (limited to 'libs/surfaces/osc/osc.cc')
-rw-r--r--libs/surfaces/osc/osc.cc43
1 files changed, 43 insertions, 0 deletions
diff --git a/libs/surfaces/osc/osc.cc b/libs/surfaces/osc/osc.cc
index 9ac31b3162..90989c5d18 100644
--- a/libs/surfaces/osc/osc.cc
+++ b/libs/surfaces/osc/osc.cc
@@ -966,6 +966,30 @@ OSC::catchall (const char *path, const char* types, lo_arg **argv, int argc, lo_
int ssid = atoi (&path[13]);
ret = route_set_gain_fader (ssid, argv[0]->f, msg);
}
+ else if (!strncmp (path, "/strip/db_delta", 15)) {
+ // in db delta
+ int ssid;
+ int ar_off = 0;
+ float delta;
+ if (strlen (path) > 15 && argc == 1) {
+ ssid = atoi (&path[16]);
+ } else if (argc == 2) {
+ if (types[0] == 'f') {
+ ssid = (int) argv[0]->f;
+ } else {
+ ssid = argv[0]->i;
+ }
+ ar_off = 1;
+ } else {
+ return -1;
+ }
+ if (types[ar_off] == 'f') {
+ delta = argv[ar_off]->f;
+ } else {
+ delta = (float) argv[ar_off]->i;
+ }
+ ret = strip_db_delta (ssid, delta, msg);
+ }
else if (!strncmp (path, "/strip/trimdB/", 14) && strlen (path) > 14) {
int ssid = atoi (&path[14]);
ret = route_set_trim_dB (ssid, argv[0]->f, msg);
@@ -3303,6 +3327,25 @@ OSC::route_set_gain_fader (int ssid, float pos, lo_message msg)
}
int
+OSC::strip_db_delta (int ssid, float delta, lo_message msg)
+{
+ if (!session) return -1;
+ boost::shared_ptr<Stripable> s = get_strip (ssid, get_address (msg));
+ if (s) {
+ float db = accurate_coefficient_to_dB (s->gain_control()->get_value()) + delta;
+ float abs;
+ if (db < -192) {
+ abs = 0;
+ } else {
+ abs = dB_to_coefficient (db);
+ }
+ s->gain_control()->set_value (abs, PBD::Controllable::NoGroup);
+ return 0;
+ }
+ return -1;
+}
+
+int
OSC::sel_fader (float val, lo_message msg)
{
OSCSurface *sur = get_surface(get_address (msg));