GainControl (Session& session, const Evoral::Parameter ¶m,
boost::shared_ptr<AutomationList> al = boost::shared_ptr<AutomationList>());
- double internal_to_interface (double) const;
- double interface_to_internal (double) const;
- double internal_to_user (double) const;
- double user_to_internal (double) const;
- std::string get_user_string () const;
-
- double lower_db;
- double range_db;
-
void inc_gain (gain_t);
protected:
return (float) _value;
}
- double internal_to_user (double i) const { return accurate_coefficient_to_dB (i);}
- double user_to_internal (double u) const { return dB_to_coefficient(u) ;}
-
std::string get_user_string () const
{
char theBuf[32]; sprintf( theBuf, "%3.1f dB", accurate_coefficient_to_dB (get_value()));
void set_value (double v, PBD::Controllable::GroupControlDisposition gcd) { if (_setter (v)) { Changed (true, gcd); /* EMIT SIGNAL */ } }
double get_value () const { return _getter (); }
- double internal_to_user (double i) const { return accurate_coefficient_to_dB (i);}
- double user_to_internal (double u) const { return dB_to_coefficient(u) ;}
-
std::string get_user_string () const {
char theBuf[32]; sprintf( theBuf, "%3.1f dB", accurate_coefficient_to_dB (get_value()));
return std::string(theBuf);
param.type() == GainAutomation ? X_("gaincontrol") : X_("trimcontrol"),
Controllable::GainLike)
{
- lower_db = accurate_coefficient_to_dB (_desc.lower);
- range_db = accurate_coefficient_to_dB (_desc.upper) - lower_db;
-}
-
-double
-GainControl::internal_to_interface (double v) const
-{
- if (_desc.type == GainAutomation) {
- return gain_to_slider_position_with_max (v, _desc.upper);
- } else {
- return (accurate_coefficient_to_dB (v) - lower_db) / range_db;
- }
-}
-
-double
-GainControl::interface_to_internal (double v) const
-{
- if (_desc.type == GainAutomation) {
- return slider_position_to_gain_with_max (v, _desc.upper);
- } else {
- return dB_to_coefficient (lower_db + v * range_db);
- }
-}
-
-double
-GainControl::internal_to_user (double v) const
-{
- return accurate_coefficient_to_dB (v);
-}
-
-double
-GainControl::user_to_internal (double u) const
-{
- return dB_to_coefficient (u);
-}
-
-std::string
-GainControl::get_user_string () const
-{
- char theBuf[32]; sprintf( theBuf, _("%3.1f dB"), accurate_coefficient_to_dB (get_value()));
- return std::string(theBuf);
}
void
/** Conversions between `internal', 'interface', and 'user' values */
virtual double internal_to_interface (double i) const {return (i-lower())/(upper() - lower());} //by default, the interface range is just a linear interpolation between lower and upper values
virtual double interface_to_internal (double i) const {return lower() + i*(upper() - lower());}
- virtual double internal_to_user (double i) const {return i;} //by default the internal value is the same as the user value
- virtual double user_to_internal (double i) const {return i;} //by default the internal value is the same as the user value
/** Get and Set `interface' value (typically, fraction of knob travel) */
virtual float get_interface() const { return (internal_to_interface(get_value())); }
virtual void set_interface (float fraction) { fraction = min( max(0.0f, fraction), 1.0f); set_value(interface_to_internal(fraction), NoGroup); }
- /** Get and Set `user' value ( dB or milliseconds, etc. This MIGHT be the same as the internal value, but in a few cases it is not ) */
- virtual float get_user() const { return (internal_to_user(get_value())); }
- virtual void set_user (float user_v) { set_value(user_to_internal(user_v), NoGroup); }
virtual std::string get_user_string() const { return std::string(); }
PBD::Signal0<void> LearningFinished;