diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2009-06-09 20:21:19 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2009-06-09 20:21:19 +0000 |
commit | e6eb059576eefd9a26c177627ae7dd3ba2feb727 (patch) | |
tree | 536ce6ee456f2306bb0346a51ede0a4aa64a8e63 /libs/ardour/ardour/amp.h | |
parent | 9bd274bfdee62c9cc0e5752d2a72027d2c732cd0 (diff) |
the big Route structure refactor. !!!! THIS WILL ***NOT LOAD*** PRIOR 3.0 or 2.X SESSIONS !!!! BREAKAGE IS EXPECTED !!!! IF YOU HAVE AND NEED A WORKING 3.0 DO **NOT** UPDATE. !!!! otherwise, update and enjoy the steadily emerging joys of this major reworking of ardour internals
git-svn-id: svn://localhost/ardour2/branches/3.0@5137 d708f5d6-7413-0410-9779-e7cbd77b26cf
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; }; |