vamp-sdk/Plugin.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037 #ifndef _VAMP_SDK_PLUGIN_H_
00038 #define _VAMP_SDK_PLUGIN_H_
00039
00040 #include <string>
00041 #include <vector>
00042 #include <map>
00043
00044 #include "PluginBase.h"
00045 #include "RealTime.h"
00046
00047 #include "plugguard.h"
00048 _VAMP_SDK_PLUGSPACE_BEGIN(Plugin.h)
00049
00050 namespace Vamp {
00051
00124 class Plugin : public PluginBase
00125 {
00126 public:
00127 virtual ~Plugin() { }
00128
00141 virtual bool initialise(size_t inputChannels,
00142 size_t stepSize,
00143 size_t blockSize) = 0;
00144
00150 virtual void reset() = 0;
00151
00152 enum InputDomain { TimeDomain, FrequencyDomain };
00153
00169 virtual InputDomain getInputDomain() const = 0;
00170
00179 virtual size_t getPreferredBlockSize() const { return 0; }
00180
00194 virtual size_t getPreferredStepSize() const { return 0; }
00195
00199 virtual size_t getMinChannelCount() const { return 1; }
00200
00204 virtual size_t getMaxChannelCount() const { return 1; }
00205
00206 struct OutputDescriptor
00207 {
00214 std::string identifier;
00215
00220 std::string name;
00221
00227 std::string description;
00228
00232 std::string unit;
00233
00239 bool hasFixedBinCount;
00240
00247 size_t binCount;
00248
00253 std::vector<std::string> binNames;
00254
00260 bool hasKnownExtents;
00261
00266 float minValue;
00267
00272 float maxValue;
00273
00278 bool isQuantized;
00279
00285 float quantizeStep;
00286
00287 enum SampleType {
00288
00290 OneSamplePerStep,
00291
00293 FixedSampleRate,
00294
00296 VariableSampleRate
00297 };
00298
00302 SampleType sampleType;
00303
00314 float sampleRate;
00315
00320 bool hasDuration;
00321
00322 OutputDescriptor() :
00323 hasFixedBinCount(false), hasKnownExtents(false), isQuantized(false),
00324 sampleType(OneSamplePerStep), hasDuration(false) { }
00325 };
00326
00327 typedef std::vector<OutputDescriptor> OutputList;
00328
00334 virtual OutputList getOutputDescriptors() const = 0;
00335
00336 struct Feature
00337 {
00344 bool hasTimestamp;
00345
00352 RealTime timestamp;
00353
00360 bool hasDuration;
00361
00367 RealTime duration;
00368
00374 std::vector<float> values;
00375
00379 std::string label;
00380
00381 Feature() :
00382 hasTimestamp(false), hasDuration(false) { }
00383 };
00384
00385 typedef std::vector<Feature> FeatureList;
00386
00387 typedef std::map<int, FeatureList> FeatureSet;
00388
00416 virtual FeatureSet process(const float *const *inputBuffers,
00417 RealTime timestamp) = 0;
00418
00423 virtual FeatureSet getRemainingFeatures() = 0;
00424
00430 virtual std::string getType() const { return "Feature Extraction Plugin"; }
00431
00432 protected:
00433 Plugin(float inputSampleRate) :
00434 m_inputSampleRate(inputSampleRate) { }
00435
00436 float m_inputSampleRate;
00437 };
00438
00439 }
00440
00441 _VAMP_SDK_PLUGSPACE_END(Plugin.h)
00442
00443 #endif
00444
00445
00446