Fix some inconsistent usage of a Controllables Interface value.

This breaks a lot of controls, because they are misusing it as well.
This commit is contained in:
Ben Loftis 2014-09-18 16:35:03 -05:00
parent e9ab53402c
commit 41f13c0109
2 changed files with 8 additions and 30 deletions

View 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(); }

View 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;
}