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
00164 virtual InputDomain getInputDomain() const = 0;
00165
00174 virtual size_t getPreferredBlockSize() const { return 0; }
00175
00189 virtual size_t getPreferredStepSize() const { return 0; }
00190
00194 virtual size_t getMinChannelCount() const { return 1; }
00195
00199 virtual size_t getMaxChannelCount() const { return 1; }
00200
00201 struct OutputDescriptor
00202 {
00209 std::string identifier;
00210
00215 std::string name;
00216
00222 std::string description;
00223
00227 std::string unit;
00228
00234 bool hasFixedBinCount;
00235
00242 size_t binCount;
00243
00248 std::vector<std::string> binNames;
00249
00255 bool hasKnownExtents;
00256
00261 float minValue;
00262
00267 float maxValue;
00268
00273 bool isQuantized;
00274
00280 float quantizeStep;
00281
00282 enum SampleType {
00283
00285 OneSamplePerStep,
00286
00288 FixedSampleRate,
00289
00291 VariableSampleRate
00292 };
00293
00297 SampleType sampleType;
00298
00309 float sampleRate;
00310
00315 bool hasDuration;
00316
00317 OutputDescriptor() :
00318 hasFixedBinCount(false), hasKnownExtents(false), isQuantized(false),
00319 sampleType(OneSamplePerStep), hasDuration(false) { }
00320 };
00321
00322 typedef std::vector<OutputDescriptor> OutputList;
00323
00329 virtual OutputList getOutputDescriptors() const = 0;
00330
00331 struct Feature
00332 {
00339 bool hasTimestamp;
00340
00347 RealTime timestamp;
00348
00355 bool hasDuration;
00356
00362 RealTime duration;
00363
00369 std::vector<float> values;
00370
00374 std::string label;
00375
00376 Feature() :
00377 hasTimestamp(false), hasDuration(false) { }
00378 };
00379
00380 typedef std::vector<Feature> FeatureList;
00381
00382 typedef std::map<int, FeatureList> FeatureSet;
00383
00411 virtual FeatureSet process(const float *const *inputBuffers,
00412 RealTime timestamp) = 0;
00413
00418 virtual FeatureSet getRemainingFeatures() = 0;
00419
00425 virtual std::string getType() const { return "Feature Extraction Plugin"; }
00426
00427 protected:
00428 Plugin(float inputSampleRate) :
00429 m_inputSampleRate(inputSampleRate) { }
00430
00431 float m_inputSampleRate;
00432 };
00433
00434 }
00435
00436 _VAMP_SDK_PLUGSPACE_END(Plugin.h)
00437
00438 #endif
00439
00440
00441