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_PLUGIN_H_
00038 #define _VAMP_PLUGIN_H_
00039 
00040 #include "PluginBase.h"
00041 #include "RealTime.h"
00042 
00043 #include <string>
00044 #include <vector>
00045 #include <map>
00046 
00047 namespace Vamp {
00048 
00121 class Plugin : public PluginBase
00122 {
00123 public:
00124     virtual ~Plugin() { }
00125 
00138     virtual bool initialise(size_t inputChannels,
00139                             size_t stepSize,
00140                             size_t blockSize) = 0;
00141 
00147     virtual void reset() = 0;
00148 
00149     enum InputDomain { TimeDomain, FrequencyDomain };
00150     
00161     virtual InputDomain getInputDomain() const = 0;
00162 
00171     virtual size_t getPreferredBlockSize() const { return 0; }
00172 
00186     virtual size_t getPreferredStepSize() const { return 0; }
00187 
00191     virtual size_t getMinChannelCount() const { return 1; }
00192 
00196     virtual size_t getMaxChannelCount() const { return 1; }
00197 
00198     struct OutputDescriptor
00199     {
00206         std::string identifier;
00207 
00212         std::string name;
00213 
00219         std::string description;
00220 
00224         std::string unit;
00225 
00231         bool hasFixedBinCount;
00232 
00239         size_t binCount;
00240 
00245         std::vector<std::string> binNames;
00246 
00252         bool hasKnownExtents;
00253 
00258         float minValue;
00259 
00264         float maxValue;
00265 
00270         bool isQuantized;
00271 
00277         float quantizeStep;
00278 
00279         enum SampleType {
00280 
00282             OneSamplePerStep,
00283 
00285             FixedSampleRate,
00286 
00288             VariableSampleRate
00289         };
00290 
00294         SampleType sampleType;
00295 
00306         float sampleRate;
00307     };
00308 
00309     typedef std::vector<OutputDescriptor> OutputList;
00310 
00316     virtual OutputList getOutputDescriptors() const = 0;
00317 
00318     struct Feature
00319     {
00325         bool hasTimestamp;
00326 
00332         RealTime timestamp;
00333         
00339         std::vector<float> values;
00340 
00344         std::string label;
00345     };
00346 
00347     typedef std::vector<Feature> FeatureList;
00348     typedef std::map<int, FeatureList> FeatureSet; // key is output no
00349 
00377     virtual FeatureSet process(const float *const *inputBuffers,
00378                                RealTime timestamp) = 0;
00379 
00384     virtual FeatureSet getRemainingFeatures() = 0;
00385 
00391     virtual std::string getType() const { return "Feature Extraction Plugin"; }
00392 
00393 protected:
00394     Plugin(float inputSampleRate) :
00395         m_inputSampleRate(inputSampleRate) { }
00396 
00397     float m_inputSampleRate;
00398 };
00399 
00400 }
00401 
00402 #endif
00403 
00404 
00405 

Generated on Wed Jul 2 04:46:08 2008 for VampPluginSDK by  doxygen 1.5.6