Chris@320
|
1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
|
Chris@320
|
2
|
Chris@320
|
3 /*
|
Chris@320
|
4 Sonic Visualiser
|
Chris@320
|
5 An audio file viewer and annotation editor.
|
Chris@320
|
6 Centre for Digital Music, Queen Mary, University of London.
|
Chris@328
|
7 This file copyright 2006-2007 Chris Cannam and QMUL.
|
Chris@320
|
8
|
Chris@320
|
9 This program is free software; you can redistribute it and/or
|
Chris@320
|
10 modify it under the terms of the GNU General Public License as
|
Chris@320
|
11 published by the Free Software Foundation; either version 2 of the
|
Chris@320
|
12 License, or (at your option) any later version. See the file
|
Chris@320
|
13 COPYING included with this distribution for more information.
|
Chris@320
|
14 */
|
Chris@320
|
15
|
Chris@320
|
16 #ifndef _TRANSFORM_H_
|
Chris@320
|
17 #define _TRANSFORM_H_
|
Chris@320
|
18
|
Chris@328
|
19 #include "base/XmlExportable.h"
|
Chris@328
|
20 #include "base/Window.h"
|
Chris@350
|
21 #include "base/RealTime.h"
|
Chris@328
|
22
|
Chris@328
|
23 #include <QString>
|
Chris@320
|
24
|
Chris@320
|
25 typedef QString TransformId;
|
Chris@320
|
26
|
Chris@350
|
27 class QXmlAttributes;
|
Chris@350
|
28
|
Chris@328
|
29 namespace Vamp {
|
Chris@328
|
30 class PluginBase;
|
Chris@328
|
31 }
|
Chris@320
|
32
|
Chris@328
|
33 class Transform : public XmlExportable
|
Chris@320
|
34 {
|
Chris@320
|
35 public:
|
Chris@350
|
36 /**
|
Chris@350
|
37 * Construct a new Transform with default data and no identifier.
|
Chris@350
|
38 * The Transform object will be meaningless until some data and an
|
Chris@350
|
39 * identifier have been set on it.
|
Chris@350
|
40 *
|
Chris@350
|
41 * To construct a Transform for use with a particular transform
|
Chris@350
|
42 * identifier, use TransformFactory::getDefaultTransformFor.
|
Chris@350
|
43 */
|
Chris@328
|
44 Transform();
|
Chris@350
|
45
|
Chris@350
|
46 /**
|
Chris@350
|
47 * Construct a Transform by parsing the given XML data string.
|
Chris@350
|
48 * This is the inverse of toXml.
|
Chris@350
|
49 */
|
Chris@350
|
50 Transform(QString xml);
|
Chris@350
|
51
|
Chris@320
|
52 virtual ~Transform();
|
Chris@320
|
53
|
Chris@350
|
54 /**
|
Chris@350
|
55 * Compare two Transforms. They only compare equal if every data
|
Chris@350
|
56 * element matches.
|
Chris@350
|
57 */
|
Chris@350
|
58 bool operator==(const Transform &);
|
Chris@350
|
59
|
Chris@350
|
60 void setIdentifier(TransformId id);
|
Chris@350
|
61 TransformId getIdentifier() const;
|
Chris@320
|
62
|
Chris@328
|
63 enum Type { FeatureExtraction, RealTimeEffect };
|
Chris@328
|
64
|
Chris@328
|
65 Type getType() const;
|
Chris@328
|
66 QString getPluginIdentifier() const;
|
Chris@328
|
67 QString getOutput() const;
|
Chris@353
|
68
|
Chris@353
|
69 void setPluginIdentifier(QString pluginIdentifier);
|
Chris@353
|
70 void setOutput(QString output);
|
Chris@353
|
71
|
Chris@353
|
72 // Turn a plugin ID and output name into a transform ID. Note
|
Chris@353
|
73 // that our pluginIdentifier is the same thing as the Vamp SDK's
|
Chris@353
|
74 // PluginLoader::PluginKey.
|
Chris@353
|
75 static TransformId getIdentifierForPluginOutput(QString pluginIdentifier,
|
Chris@353
|
76 QString output = "");
|
Chris@328
|
77
|
Chris@328
|
78 typedef std::map<QString, float> ParameterMap;
|
Chris@328
|
79
|
Chris@350
|
80 const ParameterMap &getParameters() const;
|
Chris@350
|
81 void setParameters(const ParameterMap &pm);
|
Chris@350
|
82 void setParameter(QString name, float value);
|
Chris@328
|
83
|
Chris@328
|
84 typedef std::map<QString, QString> ConfigurationMap;
|
Chris@328
|
85
|
Chris@350
|
86 const ConfigurationMap &getConfiguration() const;
|
Chris@350
|
87 void setConfiguration(const ConfigurationMap &cm);
|
Chris@350
|
88 void setConfigurationValue(QString name, QString value);
|
Chris@328
|
89
|
Chris@366
|
90 QString getPluginVersion() const;
|
Chris@366
|
91 void setPluginVersion(QString version);
|
Chris@366
|
92
|
Chris@350
|
93 QString getProgram() const;
|
Chris@350
|
94 void setProgram(QString program);
|
Chris@328
|
95
|
Chris@350
|
96 size_t getStepSize() const;
|
Chris@350
|
97 void setStepSize(size_t s);
|
Chris@328
|
98
|
Chris@350
|
99 size_t getBlockSize() const;
|
Chris@350
|
100 void setBlockSize(size_t s);
|
Chris@328
|
101
|
Chris@350
|
102 WindowType getWindowType() const;
|
Chris@350
|
103 void setWindowType(WindowType type);
|
Chris@350
|
104
|
Chris@350
|
105 RealTime getStartTime() const;
|
Chris@350
|
106 void setStartTime(RealTime t);
|
Chris@350
|
107
|
Chris@350
|
108 RealTime getDuration() const; // 0 -> all
|
Chris@350
|
109 void setDuration(RealTime d);
|
Chris@350
|
110
|
Chris@350
|
111 float getSampleRate() const; // 0 -> as input
|
Chris@350
|
112 void setSampleRate(float rate);
|
Chris@328
|
113
|
Chris@328
|
114 void toXml(QTextStream &stream, QString indent = "",
|
Chris@328
|
115 QString extraAttributes = "") const;
|
Chris@328
|
116
|
Chris@350
|
117 /**
|
Chris@350
|
118 * Set the main transform data from the given XML attributes.
|
Chris@350
|
119 * This does not set the parameters or configuration, which are
|
Chris@350
|
120 * exported to separate XML elements rather than attributes of the
|
Chris@350
|
121 * transform element.
|
Chris@366
|
122 *
|
Chris@366
|
123 * Note that this only sets those attributes which are actually
|
Chris@366
|
124 * present in the argument. Any attributes not defined in the
|
Chris@366
|
125 * attribute will remain unchanged in the Transform. If your aim
|
Chris@366
|
126 * is to create a transform exactly matching the given attributes,
|
Chris@366
|
127 * ensure you start from an empty transform rather than one that
|
Chris@366
|
128 * has already been configured.
|
Chris@350
|
129 */
|
Chris@350
|
130 void setFromXmlAttributes(const QXmlAttributes &);
|
Chris@320
|
131
|
Chris@320
|
132 protected:
|
Chris@328
|
133 TransformId m_id; // pluginid:output, that is type:soname:label:output
|
Chris@328
|
134
|
Chris@328
|
135 static QString createIdentifier
|
Chris@328
|
136 (QString type, QString soName, QString label, QString output);
|
Chris@320
|
137
|
Chris@328
|
138 static void parseIdentifier
|
Chris@328
|
139 (QString identifier,
|
Chris@328
|
140 QString &type, QString &soName, QString &label, QString &output);
|
Chris@328
|
141
|
Chris@328
|
142 ParameterMap m_parameters;
|
Chris@328
|
143 ConfigurationMap m_configuration;
|
Chris@366
|
144 QString m_pluginVersion;
|
Chris@328
|
145 QString m_program;
|
Chris@328
|
146 size_t m_stepSize;
|
Chris@328
|
147 size_t m_blockSize;
|
Chris@328
|
148 WindowType m_windowType;
|
Chris@350
|
149 RealTime m_startTime;
|
Chris@350
|
150 RealTime m_duration;
|
Chris@328
|
151 float m_sampleRate;
|
Chris@320
|
152 };
|
Chris@320
|
153
|
Chris@320
|
154 #endif
|
Chris@328
|
155
|