diff options
Diffstat (limited to 'libs/ardour/ardour/amp.h')
-rw-r--r-- | libs/ardour/ardour/amp.h | 67 |
1 files changed, 42 insertions, 25 deletions
diff --git a/libs/ardour/ardour/amp.h b/libs/ardour/ardour/amp.h index 152b89a431..03cc3d02f7 100644 --- a/libs/ardour/ardour/amp.h +++ b/libs/ardour/ardour/amp.h @@ -22,19 +22,20 @@ #include "ardour/types.h" #include "ardour/chan_count.h" #include "ardour/processor.h" +#include "ardour/automation_control.h" namespace ARDOUR { class BufferSet; class IO; - +class MuteMaster; /** Applies a declick operation to all audio inputs, passing the same number of * audio outputs, and passing through any other types unchanged. */ class Amp : public Processor { public: - Amp(Session& s, IO& io); + Amp(Session& s, boost::shared_ptr<MuteMaster> m); bool can_support_io_configuration (const ChanCount& in, ChanCount& out) const; bool configure_io (ChanCount in, ChanCount out); @@ -44,38 +45,54 @@ public: bool apply_gain() const { return _apply_gain; } void apply_gain(bool yn) { _apply_gain = yn; } + void setup_gain_automation (sframes_t start_frame, sframes_t end_frame, nframes_t nframes); + bool apply_gain_automation() const { return _apply_gain_automation; } void apply_gain_automation(bool yn) { _apply_gain_automation = yn; } - void muute(bool yn) { _mute = yn; } + XMLNode& state (bool full); - void set_gain(float current, float desired) { - _current_gain = current; - _desired_gain = desired; - } - - void apply_mute(bool yn, float current=1.0, float desired=0.0) { - _mute = yn; - _current_mute_gain = current; - _desired_mute_gain = desired; - } + static void apply_gain (BufferSet& bufs, nframes_t nframes, gain_t initial, gain_t target); + static void apply_simple_gain(BufferSet& bufs, nframes_t nframes, gain_t target); - XMLNode& state (bool full); + gain_t gain () const { return _gain_control->user_float(); } - static void apply_gain (BufferSet& bufs, nframes_t nframes, - gain_t initial, gain_t target, bool invert_polarity); + virtual void set_gain (gain_t g, void *src); + void inc_gain (gain_t delta, void *src); - static void apply_simple_gain(BufferSet& bufs, nframes_t nframes, gain_t target); + static void update_meters(); + + /* automation */ + + struct GainControl : public AutomationControl { + GainControl (std::string name, Session& session, Amp* a, const Evoral::Parameter ¶m, + boost::shared_ptr<AutomationList> al = boost::shared_ptr<AutomationList>() ) + : AutomationControl (session, param, al, name ) + , _amp (a) + {} + + void set_value (float val); + float get_value (void) const; + + Amp* _amp; + }; + + boost::shared_ptr<GainControl> gain_control() { + return _gain_control; + } + + boost::shared_ptr<const GainControl> gain_control() const { + return _gain_control; + } private: - IO& _io; - bool _mute; - bool _apply_gain; - bool _apply_gain_automation; - float _current_gain; - float _desired_gain; - float _current_mute_gain; - float _desired_mute_gain; + bool _denormal_protection; + bool _apply_gain; + bool _apply_gain_automation; + float _current_gain; + + boost::shared_ptr<GainControl> _gain_control; + boost::shared_ptr<MuteMaster> _mute_master; }; |