X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fgain_control.cc;h=1813586e0935a49cf8e2aa177f9311f3a7a853df;hb=dec10f2f3c6fffe27e72243d9bf36713d8f084f9;hp=ee356b017c3169c235b70e497325dc0b442b5bbf;hpb=6cc18cef4f87651d741e8a23d17bdcaa841bf5c0;p=ardour.git diff --git a/libs/ardour/gain_control.cc b/libs/ardour/gain_control.cc index ee356b017c..1813586e09 100644 --- a/libs/ardour/gain_control.cc +++ b/libs/ardour/gain_control.cc @@ -40,49 +40,6 @@ GainControl::GainControl (Session& session, const Evoral::Parameter ¶m, boos param.type() == GainAutomation ? X_("gaincontrol") : X_("trimcontrol"), Controllable::GainLike) { - alist()->reset_default (1.0); - - 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 (v); - } 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 (v); - } 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 @@ -102,13 +59,22 @@ GainControl::inc_gain (gain_t factor) } } +void +GainControl::post_add_master (boost::shared_ptr m) +{ + if (m->get_value() == 0) { + /* master is at -inf, which forces this ctrl to -inf on assignment */ + Changed (false, Controllable::NoGroup); /* EMIT SIGNAL */ + } +} + bool -GainControl::get_masters_curve_locked (framepos_t start, framepos_t end, float* vec, framecnt_t veclen) const +GainControl::get_masters_curve_locked (samplepos_t start, samplepos_t end, float* vec, samplecnt_t veclen) const { if (_masters.empty()) { return list()->curve().rt_safe_get_vector (start, end, vec, veclen); } - for (framecnt_t i = 0; i < veclen; ++i) { + for (samplecnt_t i = 0; i < veclen; ++i) { vec[i] = 1.f; } return SlavableAutomationControl::masters_curve_multiply (start, end, vec, veclen);