fix failure to find route templates
[ardour.git] / libs / ardour / amp.cc
index 5f305182f8c8472a1fbd7160e943b4b93ec7d739..b038cde695c847f7adba5374ebd42c6041616b18 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);
 }
 
@@ -89,7 +92,7 @@ Amp::run (BufferSet& bufs, framepos_t /*start_frame*/, framepos_t /*end_frame*/,
                                        sp[nx] *= gab[nx];
                                }
                        }
-                       
+
                        _current_gain = gab[nframes-1];
 
                } else { /* manual (scalar) gain */
@@ -243,7 +246,7 @@ Amp::declick (BufferSet& bufs, framecnt_t nframes, int dir)
                if (declick != nframes) {
 
                        if (target == 0.0) {
-                               memset (&buffer[declick], 0, sizeof (Sample) * (nframes - declick));
+                                memset (&buffer[declick], 0, sizeof (Sample) * (nframes - declick));
                        } else if (target != 1.0) {
                                apply_gain_to_buffer (&buffer[declick], nframes - declick, target);
                        }
@@ -282,18 +285,18 @@ Amp::apply_gain (AudioBuffer& buf, framecnt_t nframes, gain_t initial, gain_t ta
 
 
         Sample* const buffer = buf.data();
-        
+
         fractional_pos = 1.0;
-        
+
         for (pframes_t nx = 0; nx < declick; ++nx) {
                 buffer[nx] *= (initial + (delta * (0.5 + 0.5 * cos (M_PI * fractional_pos))));
                 fractional_pos += fractional_shift;
         }
-        
+
         /* now ensure the rest of the buffer has the target value applied, if necessary. */
-        
+
         if (declick != nframes) {
-                
+
                 if (target == 0.0) {
                         memset (&buffer[declick], 0, sizeof (Sample) * (nframes - declick));
                 } else if (target != 1.0) {
@@ -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
@@ -404,7 +405,7 @@ Amp::set_state (const XMLNode& node, int version)
         if ((gain_node = node.child (Controllable::xml_node_name.c_str())) != 0) {
                 _gain_control->set_state (*gain_node, version);
         }
-        
+
        return 0;
 }
 
@@ -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 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 AutomationControl::get_value();
+       return accurate_coefficient_to_dB (v);
 }
 
 void