OSC: Add increment fader.
authorLen Ovens <len@ovenwerks.net>
Thu, 22 Jun 2017 19:54:03 +0000 (12:54 -0700)
committerLen Ovens <len@ovenwerks.net>
Thu, 22 Jun 2017 19:54:03 +0000 (12:54 -0700)
libs/surfaces/osc/osc.cc
libs/surfaces/osc/osc.h

index 9ac31b316220972b2eb1907515af876a373fd78f..90989c5d18938f1304fec602f0b28d641de84aa3 100644 (file)
@@ -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);
@@ -3302,6 +3326,25 @@ OSC::route_set_gain_fader (int ssid, float pos, lo_message msg)
        return 0;
 }
 
+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)
 {
index d92d0777d1d52732f96a5369f36e3fd41229dc5f..02002cb828feb3888add4486931edd0276b7329d 100644 (file)
@@ -567,6 +567,7 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI<OSCUIRequest>
        int route_set_gain_abs (int rid, float level, lo_message msg);
        int route_set_gain_dB (int rid, float dB, lo_message msg);
        int route_set_gain_fader (int rid, float pos, lo_message msg);
+       int strip_db_delta (int ssid, float delta, lo_message msg);
        int route_set_trim_abs (int rid, float level, lo_message msg);
        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);