summaryrefslogtreecommitdiff
path: root/libs/ardour/vca.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2016-01-22 14:42:25 -0500
committerPaul Davis <paul@linuxaudiosystems.com>2016-05-31 15:30:38 -0400
commit87481a2ee17023686991e1a87182c2e8ed335690 (patch)
treea07bceda3055fc53f36ada8b70bb7d77f4742cac /libs/ardour/vca.cc
parentca8ac0591ffb55a64f05b0d3f506a06f83082909 (diff)
initially pass at libardour VCA implementation
Diffstat (limited to 'libs/ardour/vca.cc')
-rw-r--r--libs/ardour/vca.cc62
1 files changed, 62 insertions, 0 deletions
diff --git a/libs/ardour/vca.cc b/libs/ardour/vca.cc
new file mode 100644
index 0000000000..7580d5794a
--- /dev/null
+++ b/libs/ardour/vca.cc
@@ -0,0 +1,62 @@
+/*
+ Copyright (C) 2016 Paul Davis
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation, Inc.,
+ 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+#include "ardour/automation_control.h"
+#include "ardour/gain_control.h"
+#include "ardour/route.h"
+#include "ardour/vca.h"
+
+using namespace ARDOUR;
+using namespace PBD;
+using std::string;
+
+VCA::VCA (Session& s, const string& n)
+ : SessionHandleRef (s)
+ , name (n)
+ , _control (new GainControl (s, Evoral::Parameter (GainAutomation), boost::shared_ptr<AutomationList> ()))
+{
+}
+
+void
+VCA::set_value (double val, Controllable::GroupControlDisposition gcd)
+{
+ _control->set_value (val, gcd);
+}
+
+double
+VCA::get_value() const
+{
+ return _control->get_value();
+}
+
+void
+VCA::add (boost::shared_ptr<Route> r)
+{
+ boost::dynamic_pointer_cast<GainControl>(r->gain_control())->set_master (_control);
+}
+
+void
+VCA::remove (boost::shared_ptr<Route> r)
+{
+ boost::shared_ptr<GainControl> route_gain = boost::dynamic_pointer_cast<GainControl>(r->gain_control());
+ boost::shared_ptr<GainControl> current_master = route_gain->master();
+
+ if (current_master == _control) {
+ route_gain->set_master (boost::shared_ptr<GainControl>());
+ }
+}