svcore  1.9
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 _TRANSFORM_H_
17 #define _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 
51  Transform(QString xml);
52 
53  virtual ~Transform();
54 
59  bool operator==(const Transform &) const;
60 
65  bool operator<(const Transform &) const;
66 
67  void setIdentifier(TransformId id);
68  TransformId getIdentifier() const;
69 
71 
72  Type getType() const;
73  QString getPluginIdentifier() const;
74  QString getOutput() const;
75 
76  void setPluginIdentifier(QString pluginIdentifier);
77  void setOutput(QString output);
78 
79  // Turn a plugin ID and output name into a transform ID. Note
80  // that our pluginIdentifier is the same thing as the Vamp SDK's
81  // PluginLoader::PluginKey.
82  static TransformId getIdentifierForPluginOutput(QString pluginIdentifier,
83  QString output = "");
84 
85  typedef std::map<QString, float> ParameterMap;
86 
87  const ParameterMap &getParameters() const;
88  void setParameters(const ParameterMap &pm);
89  void setParameter(QString name, float value);
90 
91  typedef std::map<QString, QString> ConfigurationMap;
92 
93  const ConfigurationMap &getConfiguration() const;
94  void setConfiguration(const ConfigurationMap &cm);
95  void setConfigurationValue(QString name, QString value);
96 
97  enum SummaryType {
98 
99  // This is the same as Vamp::PluginSummarisingAdapter::SummaryType
100  // except with NoSummary instead of UnknownSummaryType
101 
102  Minimum = 0,
103  Maximum = 1,
104  Mean = 2,
105  Median = 3,
106  Mode = 4,
107  Sum = 5,
108  Variance = 6,
110  Count = 8,
111 
112  NoSummary = 999
113  };
114  SummaryType getSummaryType() const;
115  void setSummaryType(SummaryType type);
116 
117  QString getPluginVersion() const;
118  void setPluginVersion(QString version);
119 
120  QString getProgram() const;
121  void setProgram(QString program);
122 
123  int getStepSize() const;
124  void setStepSize(int s);
125 
126  int getBlockSize() const;
127  void setBlockSize(int s);
128 
129  WindowType getWindowType() const;
130  void setWindowType(WindowType type);
131 
132  RealTime getStartTime() const;
133  void setStartTime(RealTime t);
134 
135  RealTime getDuration() const; // 0 -> all
136  void setDuration(RealTime d);
137 
138  float getSampleRate() const; // 0 -> as input
139  void setSampleRate(float rate);
140 
141  void toXml(QTextStream &stream, QString indent = "",
142  QString extraAttributes = "") const;
143 
157  void setFromXmlAttributes(const QXmlAttributes &);
158 
159  static SummaryType stringToSummaryType(QString);
160  static QString summaryTypeToString(SummaryType);
161 
162 protected:
163  TransformId m_id; // pluginid:output, that is type:soname:label:output
164 
165  static QString createIdentifier
166  (QString type, QString soName, QString label, QString output);
167 
168  static void parseIdentifier
169  (QString identifier,
170  QString &type, QString &soName, QString &label, QString &output);
171 
172  template <typename A, typename B>
173  bool mapLessThan(const std::map<A, B> &a, const std::map<A, B> &b) const {
174  // Return true if a is "less than" b. Ordering doesn't have
175  // to be meaningful, just consistent.
176  typename std::map<A, B>::const_iterator i;
177  typename std::map<A, B>::const_iterator j;
178  for (i = a.begin(), j = b.begin(); i != a.end(); ++i) {
179  if (j == b.end()) return false; // a is longer than b
180  if (i->first != j->first) return i->first < j->first;
181  if (i->second != j->second) return i->second < j->second;
182  }
183  if (j != b.end()) return true; // a is shorter than b
184  return false; // equal
185  }
186 
191  QString m_program;
198 };
199 
200 typedef std::vector<Transform> Transforms;
201 
202 #endif
203 
QString getPluginVersion() const
Definition: Transform.cpp:287
SummaryType getSummaryType() const
Definition: Transform.cpp:311
void setFromXmlAttributes(const QXmlAttributes &)
Set the main transform data from the given XML attributes.
Definition: Transform.cpp:491
Transform()
Construct a new Transform with default data and no identifier.
Definition: Transform.cpp:33
void setSampleRate(float rate)
Definition: Transform.cpp:389
void setDuration(RealTime d)
Definition: Transform.cpp:377
float getSampleRate() const
Definition: Transform.cpp:383
std::vector< Transform > Transforms
Definition: Transform.h:200
void setWindowType(WindowType type)
Definition: Transform.cpp:353
QString getProgram() const
Definition: Transform.cpp:299
const ConfigurationMap & getConfiguration() const
Definition: Transform.cpp:268
WindowType getWindowType() const
Definition: Transform.cpp:347
bool operator==(const Transform &) const
Compare two Transforms.
Definition: Transform.cpp:112
void setPluginVersion(QString version)
Definition: Transform.cpp:293
int m_blockSize
Definition: Transform.h:193
std::map< QString, QString > ConfigurationMap
Definition: Transform.h:91
void setStartTime(RealTime t)
Definition: Transform.cpp:365
float m_sampleRate
Definition: Transform.h:197
int m_stepSize
Definition: Transform.h:192
WindowType
Definition: Window.h:27
static TransformId getIdentifierForPluginOutput(QString pluginIdentifier, QString output="")
Definition: Transform.cpp:242
bool mapLessThan(const std::map< A, B > &a, const std::map< A, B > &b) const
Definition: Transform.h:173
QString getOutput() const
Definition: Transform.cpp:224
ConfigurationMap m_configuration
Definition: Transform.h:188
WindowType m_windowType
Definition: Transform.h:194
RealTime m_duration
Definition: Transform.h:196
virtual ~Transform()
Definition: Transform.cpp:107
static void parseIdentifier(QString identifier, QString &type, QString &soName, QString &label, QString &output)
Definition: Transform.cpp:196
void setOutput(QString output)
Definition: Transform.cpp:236
void setIdentifier(TransformId id)
Definition: Transform.cpp:176
void setPluginIdentifier(QString pluginIdentifier)
Definition: Transform.cpp:230
QString m_program
Definition: Transform.h:191
RealTime getStartTime() const
Definition: Transform.cpp:359
Type getType() const
Definition: Transform.cpp:206
SummaryType m_summaryType
Definition: Transform.h:189
void setConfigurationValue(QString name, QString value)
Definition: Transform.cpp:280
void setConfiguration(const ConfigurationMap &cm)
Definition: Transform.cpp:274
int getStepSize() const
Definition: Transform.cpp:323
void setBlockSize(int s)
Definition: Transform.cpp:341
bool operator<(const Transform &) const
Order two Transforms, so that they can be used as keys in containers.
Definition: Transform.cpp:137
std::map< QString, float > ParameterMap
Definition: Transform.h:85
void toXml(QTextStream &stream, QString indent="", QString extraAttributes="") const
Stream this exportable object out to XML on a text stream.
Definition: Transform.cpp:395
QString m_pluginVersion
Definition: Transform.h:190
TransformId getIdentifier() const
Definition: Transform.cpp:182
static SummaryType stringToSummaryType(QString)
Definition: Transform.cpp:450
const ParameterMap & getParameters() const
Definition: Transform.cpp:249
void setSummaryType(SummaryType type)
Definition: Transform.cpp:317
static QString createIdentifier(QString type, QString soName, QString label, QString output)
Definition: Transform.cpp:188
ParameterMap m_parameters
Definition: Transform.h:187
int getBlockSize() const
Definition: Transform.cpp:335
void setParameter(QString name, float value)
Definition: Transform.cpp:261
void setProgram(QString program)
Definition: Transform.cpp:305
RealTime m_startTime
Definition: Transform.h:195
QString getPluginIdentifier() const
Definition: Transform.cpp:218
QString TransformId
Definition: Transform.h:30
static QString summaryTypeToString(SummaryType)
Definition: Transform.cpp:470
void setStepSize(int s)
Definition: Transform.cpp:329
void setParameters(const ParameterMap &pm)
Definition: Transform.cpp:255
TransformId m_id
Definition: Transform.h:163
RealTime represents time values to nanosecond precision with accurate arithmetic and frame-rate conve...
Definition: RealTime.h:35
RealTime getDuration() const
Definition: Transform.cpp:371