2 Copyright (C) 2006 Paul Davis
4 This program is free software; you can redistribute it and/or modify it
5 under the terms of the GNU General Public License as published by the Free
6 Software Foundation; either version 2 of the License, or (at your option)
9 This program is distributed in the hope that it will be useful, but WITHOUT
10 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 You should have received a copy of the GNU General Public License along
15 with this program; if not, write to the Free Software Foundation, Inc.,
16 675 Mass Ave, Cambridge, MA 02139, USA.
19 #ifndef __ardour_amp_h__
20 #define __ardour_amp_h__
22 #include "ardour/types.h"
23 #include "ardour/chan_count.h"
24 #include "ardour/processor.h"
25 #include "ardour/automation_control.h"
33 /** Applies a declick operation to all audio inputs, passing the same number of
34 * audio outputs, and passing through any other types unchanged.
36 class Amp
: public Processor
{
38 Amp(Session
& s
, boost::shared_ptr
<MuteMaster
> m
);
40 std::string
display_name() const;
42 bool visible () const;
44 bool can_support_io_configuration (const ChanCount
& in
, ChanCount
& out
) const;
45 bool configure_io (ChanCount in
, ChanCount out
);
47 void run (BufferSet
& bufs
, sframes_t start_frame
, sframes_t end_frame
, nframes_t nframes
, bool);
49 bool apply_gain() const { return _apply_gain
; }
50 void apply_gain(bool yn
) { _apply_gain
= yn
; }
52 void setup_gain_automation (sframes_t start_frame
, sframes_t end_frame
, nframes_t nframes
);
54 bool apply_gain_automation() const { return _apply_gain_automation
; }
55 void apply_gain_automation(bool yn
) { _apply_gain_automation
= yn
; }
57 XMLNode
& state (bool full
);
58 int set_state (const XMLNode
&, int version
);
60 static void apply_gain (BufferSet
& bufs
, nframes_t nframes
, gain_t initial
, gain_t target
);
61 static void apply_simple_gain(BufferSet
& bufs
, nframes_t nframes
, gain_t target
);
63 static void apply_gain (AudioBuffer
& buf
, nframes_t nframes
, gain_t initial
, gain_t target
);
64 static void apply_simple_gain(AudioBuffer
& buf
, nframes_t nframes
, gain_t target
);
66 gain_t
gain () const { return _gain_control
->user_float(); }
68 virtual void set_gain (gain_t g
, void *src
);
69 void inc_gain (gain_t delta
, void *src
);
71 static void update_meters();
75 struct GainControl
: public AutomationControl
{
76 GainControl (std::string name
, Session
& session
, Amp
* a
, const Evoral::Parameter
¶m
,
77 boost::shared_ptr
<AutomationList
> al
= boost::shared_ptr
<AutomationList
>() )
78 : AutomationControl (session
, param
, al
, name
)
80 set_flags (Controllable::Flag (flags() | Controllable::GainLike
));
83 void set_value (float val
);
84 float get_value (void) const;
89 boost::shared_ptr
<GainControl
> gain_control() {
93 boost::shared_ptr
<const GainControl
> gain_control() const {
98 bool _denormal_protection
;
100 bool _apply_gain_automation
;
103 boost::shared_ptr
<GainControl
> _gain_control
;
104 boost::shared_ptr
<MuteMaster
> _mute_master
;
108 } // namespace ARDOUR
110 #endif // __ardour_amp_h__