2 Copyright (C) 2008 Paul Davis
3 Written by Dave Robillard
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version.
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20 #include <ardour/parameter.h>
22 using namespace ARDOUR;
25 /** Construct an Parameter from a string returned from Parameter::to_string
26 * (AutomationList automation-id property)
28 Parameter::Parameter(const std::string& str)
29 : Evoral::Parameter (NullAutomation, 0)
32 _type = GainAutomation;
33 } else if (str == "solo") {
34 _type = SoloAutomation;
35 } else if (str == "mute") {
36 _type = MuteAutomation;
37 } else if (str == "fadein") {
38 _type = FadeInAutomation;
39 } else if (str == "fadeout") {
40 _type = FadeOutAutomation;
41 } else if (str == "envelope") {
42 _type = EnvelopeAutomation;
43 } else if (str == "pan") {
44 _type = PanAutomation;
45 } else if (str.length() > 4 && str.substr(0, 4) == "pan-") {
46 _type = PanAutomation;
47 _id = atoi(str.c_str()+4);
48 } else if (str.length() > 10 && str.substr(0, 10) == "parameter-") {
49 _type = PluginAutomation;
50 _id = atoi(str.c_str()+10);
51 } else if (str.length() > 7 && str.substr(0, 7) == "midicc-") {
52 _type = MidiCCAutomation;
54 sscanf(str.c_str(), "midicc-%d-%d", &channel, &_id);
57 } else if (str.length() > 16 && str.substr(0, 16) == "midi-pgm-change-") {
58 _type = MidiPgmChangeAutomation;
60 sscanf(str.c_str(), "midi-pgm-change-%d", &channel);
64 } else if (str.length() > 18 && str.substr(0, 18) == "midi-pitch-bender-") {
65 _type = MidiPitchBenderAutomation;
67 sscanf(str.c_str(), "midi-pitch-bender-%d", &channel);
71 } else if (str.length() > 24 && str.substr(0, 24) == "midi-channel-pressure-") {
72 _type = MidiChannelPressureAutomation;
74 sscanf(str.c_str(), "midi-channel-pressure-%d", &channel);
79 PBD::warning << "Unknown Parameter '" << str << "'" << endmsg;
82 init_metadata((AutomationType)_type); // set min/max/normal
86 /** Unique string representation, suitable as an XML property value.
87 * e.g. <AutomationList automation-id="whatthisreturns">
90 Parameter::symbol() const
92 if (_type == GainAutomation) {
94 } else if (_type == PanAutomation) {
95 return string_compose("pan-%1", _id);
96 } else if (_type == SoloAutomation) {
98 } else if (_type == MuteAutomation) {
100 } else if (_type == FadeInAutomation) {
102 } else if (_type == FadeOutAutomation) {
104 } else if (_type == EnvelopeAutomation) {
106 } else if (_type == PluginAutomation) {
107 return string_compose("parameter-%1", _id);
108 } else if (_type == MidiCCAutomation) {
109 return string_compose("midicc-%1-%2", int(_channel), _id);
110 } else if (_type == MidiPgmChangeAutomation) {
111 return string_compose("midi-pgm-change-%1", int(_channel));
112 } else if (_type == MidiPitchBenderAutomation) {
113 return string_compose("midi-pitch-bender-%1", int(_channel));
114 } else if (_type == MidiChannelPressureAutomation) {
115 return string_compose("midi-channel-pressure-%1", int(_channel));
117 PBD::warning << "Uninitialized Parameter symbol() called." << endmsg;