Chris@236: /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ Chris@236: Chris@236: /* Chris@236: Vamp feature extraction plugin using the MATCH audio alignment Chris@236: algorithm. Chris@236: Chris@236: Centre for Digital Music, Queen Mary, University of London. Chris@236: Copyright (c) 2007-2020 Simon Dixon, Chris Cannam, and Queen Mary Chris@236: University of London, Copyright (c) 2014-2015 Tido GmbH. Chris@236: Chris@236: This program is free software; you can redistribute it and/or Chris@236: modify it under the terms of the GNU General Public License as Chris@236: published by the Free Software Foundation; either version 2 of the Chris@236: License, or (at your option) any later version. See the file Chris@236: COPYING included with this distribution for more information. Chris@236: */ Chris@236: Chris@236: #ifndef SUBSEQUENCE_MATCH_VAMP_PLUGIN_H Chris@236: #define SUBSEQUENCE_MATCH_VAMP_PLUGIN_H Chris@236: Chris@236: #include Chris@236: Chris@236: #ifdef _WIN32 Chris@236: #include Chris@236: #else Chris@236: #include Chris@236: #endif Chris@236: Chris@236: #include "Matcher.h" Chris@236: #include "FeatureExtractor.h" Chris@236: #include "FeatureConditioner.h" Chris@236: #include "DistanceMetric.h" Chris@243: #include "FullDTW.h" Chris@236: Chris@236: class SubsequenceMatchVampPlugin : public Vamp::Plugin Chris@236: { Chris@236: public: Chris@236: SubsequenceMatchVampPlugin(float inputSampleRate); Chris@236: virtual ~SubsequenceMatchVampPlugin(); Chris@236: Chris@236: bool initialise(size_t channels, size_t stepSize, size_t blockSize); Chris@236: void reset(); Chris@236: Chris@246: InputDomain getInputDomain() const; Chris@236: Chris@236: size_t getPreferredStepSize() const; Chris@236: size_t getPreferredBlockSize() const; Chris@236: Chris@246: size_t getMinChannelCount() const; Chris@246: size_t getMaxChannelCount() const; Chris@236: Chris@236: std::string getIdentifier() const; Chris@236: std::string getName() const; Chris@236: std::string getDescription() const; Chris@236: std::string getMaker() const; Chris@236: int getPluginVersion() const; Chris@236: std::string getCopyright() const; Chris@236: Chris@236: ParameterList getParameterDescriptors() const; Chris@236: float getParameter(std::string) const; Chris@236: void setParameter(std::string, float); Chris@236: Chris@236: OutputList getOutputDescriptors() const; Chris@236: Chris@236: FeatureSet process(const float *const *inputBuffers, Chris@236: Vamp::RealTime timestamp); Chris@236: Chris@236: FeatureSet getRemainingFeatures(); Chris@236: Chris@236: protected: Chris@236: int m_stepSize; Chris@236: float m_stepTime; Chris@236: int m_blockSize; Chris@236: int m_coarseDownsample; Chris@246: bool m_downsamplePeaks; // use peaks as opposed to averaging for downsample Chris@236: bool m_serialise; Chris@236: bool m_smooth; Chris@237: Chris@237: size_t m_channelCount; Chris@237: Vamp::RealTime m_startTime; Chris@236: Chris@236: Matcher::Parameters m_params; Chris@236: Matcher::Parameters m_defaultParams; Chris@236: Chris@236: FeatureExtractor::Parameters m_feParams; Chris@236: FeatureExtractor::Parameters m_defaultFeParams; Chris@243: double m_secondReferenceFrequency; Chris@236: Chris@236: FeatureConditioner::Parameters m_fcParams; Chris@236: FeatureConditioner::Parameters m_defaultFcParams; Chris@236: Chris@236: DistanceMetric::Parameters m_dParams; Chris@236: DistanceMetric::Parameters m_defaultDParams; Chris@236: Chris@243: FullDTW::Parameters m_fdParams; Chris@243: FullDTW::Parameters m_defaultFdParams; Chris@243: Chris@237: std::vector m_featureExtractors; Chris@237: std::vector m_features; // unconditioned features Chris@237: Chris@240: FeatureSet performAlignment(); Chris@246: size_t findNonEmptyLength(const featureseq_t &); Chris@246: featureseq_t downsample(const featureseq_t &, size_t inLength); Chris@237: Chris@236: mutable int m_pathOutNo; Chris@236: mutable int m_baOutNo; Chris@237: mutable int m_spanOutNo; Chris@236: }; Chris@236: Chris@236: #endif