summaryrefslogtreecommitdiff
path: root/libs/ardour/ardour/amp.h
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2009-06-09 20:21:19 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2009-06-09 20:21:19 +0000
commite6eb059576eefd9a26c177627ae7dd3ba2feb727 (patch)
tree536ce6ee456f2306bb0346a51ede0a4aa64a8e63 /libs/ardour/ardour/amp.h
parent9bd274bfdee62c9cc0e5752d2a72027d2c732cd0 (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.h67
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 &param,
+ 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;
};