# vamp-sdk/Plugin.h

Go to the documentation of this file.

    00001 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*-  vi:set ts=8 sts=4 sw=4: */
    00002
    00003 /*
    00004     Vamp
    00005
    00006     An API for audio analysis and feature extraction plugins.
    00007
    00008     Centre for Digital Music, Queen Mary, University of London.
    00009     Copyright 2006 Chris Cannam.
    00010
    00011     Permission is hereby granted, free of charge, to any person
    00012     obtaining a copy of this software and associated documentation
    00013     files (the "Software"), to deal in the Software without
    00014     restriction, including without limitation the rights to use, copy,
    00015     modify, merge, publish, distribute, sublicense, and/or sell copies
    00016     of the Software, and to permit persons to whom the Software is
    00017     furnished to do so, subject to the following conditions:
    00018
    00019     The above copyright notice and this permission notice shall be
    00020     included in all copies or substantial portions of the Software.
    00021
    00022     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    00023     EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    00024     MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    00025     NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR
    00026     ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
    00027     CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    00028     WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    00029
    00030     Except as contained in this notice, the names of the Centre for
    00031     Digital Music; Queen Mary, University of London; and Chris Cannam
    00032     shall not be used in advertising or otherwise to promote the sale,
    00033     use or other dealings in this Software without prior written
    00034     authorization.
    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() : // defaults for mandatory non-class-type members
    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() : // defaults for mandatory non-class-type members
    00382             hasTimestamp(false), hasDuration(false) { }
    00383     };
    00384
    00385     typedef std::vector<Feature> FeatureList;
    00386
    00387     typedef std::map<int, FeatureList> FeatureSet; // key is output no
    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