summaryrefslogtreecommitdiff
path: root/libs/ardour/gain_control.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2016-01-12 22:04:18 -0500
committerPaul Davis <paul@linuxaudiosystems.com>2016-01-18 12:11:08 -0500
commit55094b723774086d0f54d688b1ca73a4df82b93e (patch)
tree3a6ab7c98e693906f3bbb96c2252502b7cf005ad /libs/ardour/gain_control.cc
parentd1033819bd09d8a46ec602a586ddba0e10f803d6 (diff)
move Amp::GainControl out into its own source module and out of Amp
Diffstat (limited to 'libs/ardour/gain_control.cc')
-rw-r--r--libs/ardour/gain_control.cc92
1 files changed, 92 insertions, 0 deletions
diff --git a/libs/ardour/gain_control.cc b/libs/ardour/gain_control.cc
new file mode 100644
index 0000000000..9314e1270e
--- /dev/null
+++ b/libs/ardour/gain_control.cc
@@ -0,0 +1,92 @@
+/*
+ Copyright (C) 2006-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/dB.h"
+#include "ardour/gain_control.h"
+#include "ardour/session.h"
+
+#include "i18n.h"
+
+using namespace ARDOUR;
+using namespace std;
+
+GainControl::GainControl (Session& session, const Evoral::Parameter &param, boost::shared_ptr<AutomationList> al)
+ : AutomationControl (session, param, ParameterDescriptor(param),
+ al ? al : boost::shared_ptr<AutomationList> (new AutomationList (param)),
+ param.type() == GainAutomation ? X_("gaincontrol") : X_("trimcontrol")) {
+
+ alist()->reset_default (1.0);
+
+ lower_db = accurate_coefficient_to_dB (_desc.lower);
+ range_db = accurate_coefficient_to_dB (_desc.upper) - lower_db;
+}
+
+void
+GainControl::set_value (double val, PBD::Controllable::GroupControlDisposition /* group_override */)
+{
+ if (writable()) {
+ set_value_unchecked (val);
+ }
+}
+
+void
+GainControl::set_value_unchecked (double val)
+{
+ AutomationControl::set_value (std::max (std::min (val, (double)_desc.upper), (double)_desc.lower), Controllable::NoGroup);
+ _session.set_dirty ();
+}
+
+double
+GainControl::internal_to_interface (double v) const
+{
+ if (_desc.type == GainAutomation) {
+ return gain_to_slider_position (v);
+ } else {
+ return (accurate_coefficient_to_dB (v) - lower_db) / range_db;
+ }
+}
+
+double
+GainControl::interface_to_internal (double v) const
+{
+ if (_desc.type == GainAutomation) {
+ return slider_position_to_gain (v);
+ } else {
+ return dB_to_coefficient (lower_db + v * range_db);
+ }
+}
+
+double
+GainControl::internal_to_user (double v) const
+{
+ return accurate_coefficient_to_dB (v);
+}
+
+double
+GainControl::user_to_internal (double u) const
+{
+ return dB_to_coefficient (u);
+}
+
+std::string
+GainControl::get_user_string () const
+{
+ char theBuf[32]; sprintf( theBuf, _("%3.1f dB"), accurate_coefficient_to_dB (get_value()));
+ return std::string(theBuf);
+}
+