X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fgain_control.cc;h=1813586e0935a49cf8e2aa177f9311f3a7a853df;hb=3c7dea43af9d9e5b2563aee81ac5253fb2ee7858;hp=cbafc75ad4139b403fb419af4c00c2626966838f;hpb=11ba1854b398c72e93cd42efeec6aa48a4e9a125;p=ardour.git diff --git a/libs/ardour/gain_control.cc b/libs/ardour/gain_control.cc index cbafc75ad4..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 @@ -92,7 +49,7 @@ GainControl::inc_gain (gain_t factor) * ControlGroup::set_group_values(). */ - const float desired_gain = user_double(); + const float desired_gain = get_value (); if (fabsf (desired_gain) < GAIN_COEFF_SMALL) { // really?! what's the idea here? @@ -102,8 +59,23 @@ 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 (samplecnt_t i = 0; i < veclen; ++i) { + vec[i] = 1.f; + } return SlavableAutomationControl::masters_curve_multiply (start, end, vec, veclen); }