diff options
author | Len Ovens <len@ovenwerks.net> | 2017-06-22 12:54:03 -0700 |
---|---|---|
committer | Len Ovens <len@ovenwerks.net> | 2017-06-22 12:54:03 -0700 |
commit | 7af5de2074a5bac7bc43f68d6784e436069fae99 (patch) | |
tree | ec0c0f64cd641fa70e668d134d96095fff375f98 /libs/surfaces/osc/osc.cc | |
parent | 57e7531b1f69f7ffd65f089d5145ac4ce5f9bcc0 (diff) |
OSC: Add increment fader.
Diffstat (limited to 'libs/surfaces/osc/osc.cc')
-rw-r--r-- | libs/surfaces/osc/osc.cc | 43 |
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)); |