Move a few declarations to first use.
[ardour.git] / libs / ardour / amp.cc
index 200a29861ec7fb10a286948e1827e1f51b0ccde4..b74a57dbce8badfeede821a8973b3ed995ddf121 100644 (file)
@@ -42,8 +42,11 @@ Amp::Amp (Session& s)
        , _apply_gain_automation(false)
        , _current_gain(1.0)
 {
-       boost::shared_ptr<AutomationList> gl(new AutomationList(Evoral::Parameter(GainAutomation)));
-       _gain_control = boost::shared_ptr<GainControl>( new GainControl(X_("gaincontrol"), s, this, Evoral::Parameter(GainAutomation), gl ));
+       Evoral::Parameter p (GainAutomation);
+       /* gain range of -inf to +6dB, default 0dB */
+       p.set_range (0, 1.99526231f, 1, false);
+       boost::shared_ptr<AutomationList> gl (new AutomationList (p));
+       _gain_control = boost::shared_ptr<GainControl> (new GainControl (X_("gaincontrol"), s, this, p, gl));
        add_control(_gain_control);
 }
 
@@ -371,8 +374,6 @@ Amp::set_gain (gain_t val, void *src)
                val = 1.99526231f;
        }
 
-       //cerr << "set desired gain to " << val << " when curgain = " << _gain_control->get_value () << endl;
-
        if (src != _gain_control.get()) {
                _gain_control->set_value (val);
                // bit twisty, this will come back and call us again
@@ -412,8 +413,8 @@ void
 Amp::GainControl::set_value (double val)
 {
        // max gain at about +6dB (10.0 ^ ( 6 dB * 0.05))
-       if (val > 1.99526231f) {
-               val = 1.99526231f;
+       if (val > 1.99526231) {
+               val = 1.99526231;
        }
 
        _amp->set_gain (val, this);
@@ -422,9 +423,21 @@ Amp::GainControl::set_value (double val)
 }
 
 double
-Amp::GainControl::get_value (void) const
+Amp::GainControl::internal_to_interface (double v) const
 {
-       return AutomationControl::get_value();
+       return gain_to_slider_position (v);
+}
+
+double
+Amp::GainControl::interface_to_internal (double v) const
+{
+       return slider_position_to_gain (v);
+}
+
+double
+Amp::GainControl::internal_to_user (double v) const
+{
+       return accurate_coefficient_to_dB (v);
 }
 
 void
@@ -445,3 +458,16 @@ Amp::visible() const
 {
        return true;
 }
+
+std::string
+Amp::value_as_string (boost::shared_ptr<AutomationControl> ac) const
+{
+       if (ac == _gain_control) {
+               char buffer[32];
+               snprintf (buffer, sizeof (buffer), "%.2fdB", ac->internal_to_user (ac->get_value ()));
+               return buffer;
+       }
+
+       return Automatable::value_as_string (ac);
+}
+