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 : _type(NullAutomation)
34 _type = GainAutomation;
35 } else if (str == "solo") {
36 _type = SoloAutomation;
37 } else if (str == "mute") {
38 _type = MuteAutomation;
39 } else if (str == "fadein") {
40 _type = FadeInAutomation;
41 } else if (str == "fadeout") {
42 _type = FadeOutAutomation;
43 } else if (str == "envelope") {
44 _type = EnvelopeAutomation;
45 } else if (str == "pan") {
46 _type = PanAutomation;
47 } else if (str.length() > 4 && str.substr(0, 4) == "pan-") {
48 _type = PanAutomation;
49 _id = atoi(str.c_str()+4);
50 } else if (str.length() > 10 && str.substr(0, 10) == "parameter-") {
51 _type = PluginAutomation;
52 _id = atoi(str.c_str()+10);
53 } else if (str.length() > 7 && str.substr(0, 7) == "midicc-") {
54 _type = MidiCCAutomation;
56 sscanf(str.c_str(), "midicc-%d-%d", &channel, &_id);
59 } else if (str.length() > 16 && str.substr(0, 16) == "midi-pgm-change-") {
60 _type = MidiPgmChangeAutomation;
62 sscanf(str.c_str(), "midi-pgm-change-%d", &channel);
66 } else if (str.length() > 18 && str.substr(0, 18) == "midi-pitch-bender-") {
67 _type = MidiPitchBenderAutomation;
69 sscanf(str.c_str(), "midi-pitch-bender-%d", &channel);
73 } else if (str.length() > 24 && str.substr(0, 24) == "midi-channel-aftertouch-") {
74 _type = MidiChannelAftertouchAutomation;
76 sscanf(str.c_str(), "midi-channel-aftertouch-%d", &channel);
81 PBD::warning << "Unknown Parameter '" << str << "'" << endmsg;
86 /** Unique string representation, suitable as an XML property value.
87 * e.g. <AutomationList automation-id="whatthisreturns">
90 Parameter::to_string() 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 == MidiChannelAftertouchAutomation) {
115 return string_compose("midi-channel-aftertouch-%1", int(_channel));
117 PBD::warning << "Uninitialized Parameter to_string() called." << endmsg;