2 Copyright (C) 2014 Paul Davis
3 Author: David Robillard
5 This program is free software; you can redistribute it and/or modify it
6 under the terms of the GNU General Public License as published by the Free
7 Software Foundation; either version 2 of the License, or (at your option)
10 This program is distributed in the hope that it will be useful, but WITHOUT
11 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15 You should have received a copy of the GNU General Public License along
16 with this program; if not, write to the Free Software Foundation, Inc.,
17 675 Mass Ave, Cambridge, MA 02139, USA.
20 #include "ardour/amp.h"
21 #include "ardour/parameter_descriptor.h"
22 #include "ardour/types.h"
26 ParameterDescriptor::ParameterDescriptor(const Evoral::Parameter& parameter)
27 : Evoral::ParameterDescriptor()
29 , datatype(Variant::NOTHING)
34 , integer_step(parameter.type() >= MidiCCAutomation &&
35 parameter.type() <= MidiChannelPressureAutomation)
42 if (parameter.type() == GainAutomation) {
46 switch((AutomationType)parameter.type()) {
48 upper = Amp::max_gain_coefficient;
51 case PanAzimuthAutomation:
52 normal = 0.5f; // there really is no _normal but this works for stereo, sort of
55 case PanWidthAutomation:
60 case RecEnableAutomation:
65 case PluginAutomation:
66 case FadeInAutomation:
67 case FadeOutAutomation:
68 case EnvelopeAutomation:
78 case MidiCCAutomation:
79 case MidiPgmChangeAutomation:
80 case MidiChannelPressureAutomation:
85 case MidiPitchBenderAutomation:
97 ParameterDescriptor::ParameterDescriptor()
98 : Evoral::ParameterDescriptor()
100 , datatype(Variant::NOTHING)
105 , integer_step(false)
107 , sr_dependent(false)
114 ParameterDescriptor::update_steps()
116 if (unit == ParameterDescriptor::MIDI_NOTE) {
117 step = smallstep = 1; // semitone
118 largestep = 12; // octave
119 } else if (integer_step) {
120 const float delta = upper - lower;
122 smallstep = delta / 10000.0f;
123 step = delta / 1000.0f;
124 largestep = delta / 40.0f;
126 smallstep = std::max(1.0, rint(smallstep));
127 step = std::max(1.0, rint(step));
128 largestep = std::max(1.0, rint(largestep));
130 /* else: leave all others as default '0'
131 * in that case the UI (eg. AutomationController::create)
132 * uses internal_to_interface() to map the value
133 * to an appropriate interface range
137 } // namespace ARDOUR