Fix some inconsistent usage of a Controllables Interface value.
authorBen Loftis <ben@harrisonconsoles.com>
Thu, 18 Sep 2014 21:35:03 +0000 (16:35 -0500)
committerBen Loftis <ben@harrisonconsoles.com>
Thu, 18 Sep 2014 21:35:03 +0000 (16:35 -0500)
This breaks a lot of controls, because they are misusing it as well.

libs/ardour/ardour/automation_control.h
libs/ardour/plugin_insert.cc

index aeee9dab30cdcf9be4ef88bafdd843fdf873767a..3603ea2e72e367a98d3d38e54b1e7c12c83538ef 100644 (file)
@@ -78,18 +78,6 @@ public:
        void set_value (double);
        double get_value () const;
 
-       virtual double internal_to_interface (double v) const {
-               return v;
-       }
-       
-       virtual double interface_to_internal (double v) const {
-               return v;
-       }
-
-       virtual double internal_to_user (double v) const {
-               return v;
-       }
-
        double lower() const { return parameter().min(); }
        double upper() const { return parameter().max(); }
        double normal() const { return parameter().normal(); }
index 5279a3696216e3ac216ed11e57d8adb5a6b80168..b98706a3d08d31947b4d24ce2e574853b722f499 100644 (file)
@@ -1230,24 +1230,13 @@ PluginInsert::PluginControl::set_value (double user_val)
 double
 PluginInsert::PluginControl::internal_to_interface (double val) const
 {
+       val = Controllable::internal_to_interface(val);
+       
        if (_logarithmic) {
-               /* some plugins have a log-scale range "0.."
-                * ideally we'd map the range down to infinity somehow :)
-                *
-                * one solution could be to use
-                *   val = exp(lower + log(range) * value);
-                *   (log(val) - lower) / range)
-                * This approach would require access to the actual range (ie
-                * Plugin::ParameterDescriptor) and also require handling
-                * of unbound ranges..
-                *
-                * currently an arbitrarly low number is assumed to represnt
-                * log(0) as hot-fix solution.
-                */
                if (val > 0) {
-                       val = log (val);
+                       val = pow (val, 1/1.5);
                } else {
-                       val = -8; // ~ -70dB = 20 * log10(exp(-8))
+                       val = 0;
                }
        }
 
@@ -1258,14 +1247,15 @@ double
 PluginInsert::PluginControl::interface_to_internal (double val) const
 {
        if (_logarithmic) {
-               if (val <= -8) {
-                       /* see note in PluginInsert::PluginControl::internal_to_interface() */
+               if (val <= 0) {
                        val= 0;
                } else {
-                       val = exp (val);
+                       val = pow (val, 1.5);
                }
        }
 
+       val = Controllable::interface_to_internal(val);
+       
        return val;
 }