change VCA model to facilitate Harrison *and* SSL designs
[ardour.git] / libs / ardour / vca.cc
1 /*
2     Copyright (C) 2016 Paul Davis
3
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)
7     any later version.
8
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
12     for more details.
13
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.
17 */
18
19 #include "ardour/automation_control.h"
20 #include "ardour/gain_control.h"
21 #include "ardour/route.h"
22 #include "ardour/vca.h"
23
24 using namespace ARDOUR;
25 using namespace PBD;
26 using std::string;
27
28 VCA::VCA (Session& s, const string& n)
29         : SessionHandleRef (s)
30         , _name (n)
31         , _control (new GainControl (s, Evoral::Parameter (GainAutomation), boost::shared_ptr<AutomationList> ()))
32 {
33 }
34
35 void
36 VCA::set_value (double val, Controllable::GroupControlDisposition gcd)
37 {
38         _control->set_value (val, gcd);
39 }
40
41 double
42 VCA::get_value() const
43 {
44         return _control->get_value();
45 }
46
47 void
48 VCA::add (boost::shared_ptr<Route> r)
49 {
50         boost::dynamic_pointer_cast<GainControl>(r->gain_control())->add_master (_control);
51 }
52
53 void
54 VCA::remove (boost::shared_ptr<Route> r)
55 {
56         r->gain_control()->remove_master (_control);
57 }