Transform.h
Go to the documentation of this file.
1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
2 
3 /*
4  Sonic Visualiser
5  An audio file viewer and annotation editor.
6  Centre for Digital Music, Queen Mary, University of London.
7  This file copyright 2006-2007 Chris Cannam and QMUL.
8 
9  This program is free software; you can redistribute it and/or
10  modify it under the terms of the GNU General Public License as
11  published by the Free Software Foundation; either version 2 of the
12  License, or (at your option) any later version. See the file
13  COPYING included with this distribution for more information.
14 */
15 
16 #ifndef SV_TRANSFORM_H
17 #define SV_TRANSFORM_H
18 
19 #include "base/XmlExportable.h"
20 #include "base/Window.h"
21 #include "base/RealTime.h"
22 
23 #include <vamp-hostsdk/PluginBase.h>
24 
25 #include <QString>
26 
27 #include <map>
28 #include <vector>
29 
30 typedef QString TransformId;
31 
32 class QXmlAttributes;
33 
34 class Transform : public XmlExportable
35 {
36 public:
45  Transform();
46 
52  Transform(QString xml);
53 
54  virtual ~Transform();
55 
60  bool operator==(const Transform &) const;
61 
66  bool operator<(const Transform &) const;
67 
68  void setIdentifier(TransformId id);
69  TransformId getIdentifier() const;
70 
72 
73  Type getType() const;
74  QString getPluginIdentifier() const;
75  QString getOutput() const;
76 
77  void setPluginIdentifier(QString pluginIdentifier);
78  void setOutput(QString output);
79 
80  // Turn a plugin ID and output name into a transform ID. Note
81  // that our pluginIdentifier is the same thing as the Vamp SDK's
82  // PluginLoader::PluginKey.
83  static TransformId getIdentifierForPluginOutput(QString pluginIdentifier,
84  QString output = "");
85 
86  typedef std::map<QString, float> ParameterMap;
87 
88  const ParameterMap &getParameters() const;
89  void setParameters(const ParameterMap &pm);
90  void setParameter(QString name, float value);
91 
92  typedef std::map<QString, QString> ConfigurationMap;
93 
94  const ConfigurationMap &getConfiguration() const;
95  void setConfiguration(const ConfigurationMap &cm);
96  void setConfigurationValue(QString name, QString value);
97 
98  enum SummaryType {
99 
100  // This is the same as Vamp::PluginSummarisingAdapter::SummaryType
101  // except with NoSummary instead of UnknownSummaryType
102 
103  Minimum = 0,
104  Maximum = 1,
105  Mean = 2,
106  Median = 3,
107  Mode = 4,
108  Sum = 5,
109  Variance = 6,
111  Count = 8,
112 
113  NoSummary = 999
114  };
115  SummaryType getSummaryType() const;
116  void setSummaryType(SummaryType type);
117 
118  QString getPluginVersion() const;
119  void setPluginVersion(QString version);
120 
121  QString getProgram() const;
122  void setProgram(QString program);
123 
124  int getStepSize() const;
125  void setStepSize(int s);
126 
127  int getBlockSize() const;
128  void setBlockSize(int s);
129 
130  WindowType getWindowType() const;
131  void setWindowType(WindowType type);
132 
133  RealTime getStartTime() const;
134  void setStartTime(RealTime t);
135 
136  RealTime getDuration() const; // 0 -> all
137  void setDuration(RealTime d);
138 
139  sv_samplerate_t getSampleRate() const; // 0 -> as input
140  void setSampleRate(sv_samplerate_t rate);
141 
142  void toXml(QTextStream &stream, QString indent = "",
143  QString extraAttributes = "") const override;
144 
158  void setFromXmlAttributes(const QXmlAttributes &);
159 
160  QString getErrorString() const { return m_errorString; }
161 
162  static SummaryType stringToSummaryType(QString);
163  static QString summaryTypeToString(SummaryType);
164 
165 protected:
166  TransformId m_id; // pluginid:output, that is type:soname:label:output
167 
168  static QString createIdentifier
169  (QString type, QString soName, QString label, QString output);
170 
171  static void parseIdentifier
172  (QString identifier,
173  QString &type, QString &soName, QString &label, QString &output);
174 
175  template <typename A, typename B>
176  bool mapLessThan(const std::map<A, B> &a, const std::map<A, B> &b) const {
177  // Return true if a is "less than" b. Ordering doesn't have
178  // to be meaningful, just consistent.
179  typename std::map<A, B>::const_iterator i;
180  typename std::map<A, B>::const_iterator j;
181  for (i = a.begin(), j = b.begin(); i != a.end(); ++i) {
182  if (j == b.end()) return false; // a is longer than b
183  if (i->first != j->first) return i->first < j->first;
184  if (i->second != j->second) return i->second < j->second;
185  }
186  if (j != b.end()) return true; // a is shorter than b
187  return false; // equal
188  }
189 
190  ParameterMap m_parameters;
191  ConfigurationMap m_configuration;
194  QString m_program;
201  QString m_errorString;
202 };
203 
204 typedef std::vector<Transform> Transforms;
205 
206 #endif
207 
double sv_samplerate_t
Sample rate.
Definition: BaseTypes.h:51
sv_samplerate_t getSampleRate() const
Definition: Transform.cpp:378
sv_samplerate_t m_sampleRate
Definition: Transform.h:200
QString getOutput() const
Definition: Transform.cpp:219
void setFromXmlAttributes(const QXmlAttributes &)
Set the main transform data from the given XML attributes.
Definition: Transform.cpp:486
int getStepSize() const
Definition: Transform.cpp:318
Transform()
Construct a new Transform with default data and no identifier.
Definition: Transform.cpp:34
void setDuration(RealTime d)
Definition: Transform.cpp:372
RealTime getDuration() const
Definition: Transform.cpp:366
void setSampleRate(sv_samplerate_t rate)
Definition: Transform.cpp:384
std::vector< Transform > Transforms
Definition: Transform.h:204
void setWindowType(WindowType type)
Definition: Transform.cpp:348
const ParameterMap & getParameters() const
Definition: Transform.cpp:244
Type getType() const
Definition: Transform.cpp:203
void setPluginVersion(QString version)
Definition: Transform.cpp:288
int m_blockSize
Definition: Transform.h:196
std::map< QString, QString > ConfigurationMap
Definition: Transform.h:92
bool operator==(const Transform &) const
Compare two Transforms.
Definition: Transform.cpp:109
void setStartTime(RealTime t)
Definition: Transform.cpp:360
int m_stepSize
Definition: Transform.h:195
QString getProgram() const
Definition: Transform.cpp:294
WindowType
Definition: Window.h:30
const ConfigurationMap & getConfiguration() const
Definition: Transform.cpp:263
static TransformId getIdentifierForPluginOutput(QString pluginIdentifier, QString output="")
Definition: Transform.cpp:237
ConfigurationMap m_configuration
Definition: Transform.h:191
WindowType m_windowType
Definition: Transform.h:197
RealTime m_duration
Definition: Transform.h:199
WindowType getWindowType() const
Definition: Transform.cpp:342
virtual ~Transform()
Definition: Transform.cpp:104
static void parseIdentifier(QString identifier, QString &type, QString &soName, QString &label, QString &output)
Definition: Transform.cpp:193
void setOutput(QString output)
Definition: Transform.cpp:231
void setIdentifier(TransformId id)
Definition: Transform.cpp:173
void setPluginIdentifier(QString pluginIdentifier)
Definition: Transform.cpp:225
bool operator<(const Transform &) const
Order two Transforms, so that they can be used as keys in containers.
Definition: Transform.cpp:134
QString m_program
Definition: Transform.h:194
SummaryType m_summaryType
Definition: Transform.h:192
void setConfigurationValue(QString name, QString value)
Definition: Transform.cpp:275
QString getErrorString() const
Definition: Transform.h:160
void setConfiguration(const ConfigurationMap &cm)
Definition: Transform.cpp:269
void setBlockSize(int s)
Definition: Transform.cpp:336
std::map< QString, float > ParameterMap
Definition: Transform.h:86
QString m_pluginVersion
Definition: Transform.h:193
QString m_errorString
Definition: Transform.h:201
QString getPluginVersion() const
Definition: Transform.cpp:282
TransformId getIdentifier() const
Definition: Transform.cpp:179
static SummaryType stringToSummaryType(QString)
Definition: Transform.cpp:445
bool mapLessThan(const std::map< A, B > &a, const std::map< A, B > &b) const
Definition: Transform.h:176
void setSummaryType(SummaryType type)
Definition: Transform.cpp:312
static QString createIdentifier(QString type, QString soName, QString label, QString output)
Definition: Transform.cpp:185
ParameterMap m_parameters
Definition: Transform.h:190
SummaryType getSummaryType() const
Definition: Transform.cpp:306
void setParameter(QString name, float value)
Definition: Transform.cpp:256
QString getPluginIdentifier() const
Definition: Transform.cpp:213
void setProgram(QString program)
Definition: Transform.cpp:300
RealTime m_startTime
Definition: Transform.h:198
RealTime getStartTime() const
Definition: Transform.cpp:354
void toXml(QTextStream &stream, QString indent="", QString extraAttributes="") const override
Stream this exportable object out to XML on a text stream.
Definition: Transform.cpp:390
QString TransformId
Definition: Transform.h:30
static QString summaryTypeToString(SummaryType)
Definition: Transform.cpp:465
void setStepSize(int s)
Definition: Transform.cpp:324
int getBlockSize() const
Definition: Transform.cpp:330
void setParameters(const ParameterMap &pm)
Definition: Transform.cpp:250
TransformId m_id
Definition: Transform.h:166
RealTime represents time values to nanosecond precision with accurate arithmetic and frame-rate conve...
Definition: RealTime.h:42