mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-15 19:16:40 +01:00
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:
parent
e9ab53402c
commit
41f13c0109
2 changed files with 8 additions and 30 deletions
|
|
@ -78,18 +78,6 @@ public:
|
||||||
void set_value (double);
|
void set_value (double);
|
||||||
double get_value () const;
|
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 lower() const { return parameter().min(); }
|
||||||
double upper() const { return parameter().max(); }
|
double upper() const { return parameter().max(); }
|
||||||
double normal() const { return parameter().normal(); }
|
double normal() const { return parameter().normal(); }
|
||||||
|
|
|
||||||
|
|
@ -1230,24 +1230,13 @@ PluginInsert::PluginControl::set_value (double user_val)
|
||||||
double
|
double
|
||||||
PluginInsert::PluginControl::internal_to_interface (double val) const
|
PluginInsert::PluginControl::internal_to_interface (double val) const
|
||||||
{
|
{
|
||||||
|
val = Controllable::internal_to_interface(val);
|
||||||
|
|
||||||
if (_logarithmic) {
|
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) {
|
if (val > 0) {
|
||||||
val = log (val);
|
val = pow (val, 1/1.5);
|
||||||
} else {
|
} else {
|
||||||
val = -8; // ~ -70dB = 20 * log10(exp(-8))
|
val = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1258,14 +1247,15 @@ double
|
||||||
PluginInsert::PluginControl::interface_to_internal (double val) const
|
PluginInsert::PluginControl::interface_to_internal (double val) const
|
||||||
{
|
{
|
||||||
if (_logarithmic) {
|
if (_logarithmic) {
|
||||||
if (val <= -8) {
|
if (val <= 0) {
|
||||||
/* see note in PluginInsert::PluginControl::internal_to_interface() */
|
|
||||||
val= 0;
|
val= 0;
|
||||||
} else {
|
} else {
|
||||||
val = exp (val);
|
val = pow (val, 1.5);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val = Controllable::interface_to_internal(val);
|
||||||
|
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue