mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-15 02:56:35 +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);
|
||||
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(); }
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue