annotate src/SubsequenceMatchVampPlugin.h @ 246:aac9ad4064ea subsequence tip

Fix incorrect handling of silent tail in the non-subsequence MATCH phase; some debug output changes
author Chris Cannam
date Fri, 24 Jul 2020 14:29:55 +0100
parents f68277668ad4
children
rev   line source
Chris@236 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@236 2
Chris@236 3 /*
Chris@236 4 Vamp feature extraction plugin using the MATCH audio alignment
Chris@236 5 algorithm.
Chris@236 6
Chris@236 7 Centre for Digital Music, Queen Mary, University of London.
Chris@236 8 Copyright (c) 2007-2020 Simon Dixon, Chris Cannam, and Queen Mary
Chris@236 9 University of London, Copyright (c) 2014-2015 Tido GmbH.
Chris@236 10
Chris@236 11 This program is free software; you can redistribute it and/or
Chris@236 12 modify it under the terms of the GNU General Public License as
Chris@236 13 published by the Free Software Foundation; either version 2 of the
Chris@236 14 License, or (at your option) any later version. See the file
Chris@236 15 COPYING included with this distribution for more information.
Chris@236 16 */
Chris@236 17
Chris@236 18 #ifndef SUBSEQUENCE_MATCH_VAMP_PLUGIN_H
Chris@236 19 #define SUBSEQUENCE_MATCH_VAMP_PLUGIN_H
Chris@236 20
Chris@236 21 #include <vamp-sdk/Plugin.h>
Chris@236 22
Chris@236 23 #ifdef _WIN32
Chris@236 24 #include <windows.h>
Chris@236 25 #else
Chris@236 26 #include <pthread.h>
Chris@236 27 #endif
Chris@236 28
Chris@236 29 #include "Matcher.h"
Chris@236 30 #include "FeatureExtractor.h"
Chris@236 31 #include "FeatureConditioner.h"
Chris@236 32 #include "DistanceMetric.h"
Chris@243 33 #include "FullDTW.h"
Chris@236 34
Chris@236 35 class SubsequenceMatchVampPlugin : public Vamp::Plugin
Chris@236 36 {
Chris@236 37 public:
Chris@236 38 SubsequenceMatchVampPlugin(float inputSampleRate);
Chris@236 39 virtual ~SubsequenceMatchVampPlugin();
Chris@236 40
Chris@236 41 bool initialise(size_t channels, size_t stepSize, size_t blockSize);
Chris@236 42 void reset();
Chris@236 43
Chris@246 44 InputDomain getInputDomain() const;
Chris@236 45
Chris@236 46 size_t getPreferredStepSize() const;
Chris@236 47 size_t getPreferredBlockSize() const;
Chris@236 48
Chris@246 49 size_t getMinChannelCount() const;
Chris@246 50 size_t getMaxChannelCount() const;
Chris@236 51
Chris@236 52 std::string getIdentifier() const;
Chris@236 53 std::string getName() const;
Chris@236 54 std::string getDescription() const;
Chris@236 55 std::string getMaker() const;
Chris@236 56 int getPluginVersion() const;
Chris@236 57 std::string getCopyright() const;
Chris@236 58
Chris@236 59 ParameterList getParameterDescriptors() const;
Chris@236 60 float getParameter(std::string) const;
Chris@236 61 void setParameter(std::string, float);
Chris@236 62
Chris@236 63 OutputList getOutputDescriptors() const;
Chris@236 64
Chris@236 65 FeatureSet process(const float *const *inputBuffers,
Chris@236 66 Vamp::RealTime timestamp);
Chris@236 67
Chris@236 68 FeatureSet getRemainingFeatures();
Chris@236 69
Chris@236 70 protected:
Chris@236 71 int m_stepSize;
Chris@236 72 float m_stepTime;
Chris@236 73 int m_blockSize;
Chris@236 74 int m_coarseDownsample;
Chris@246 75 bool m_downsamplePeaks; // use peaks as opposed to averaging for downsample
Chris@236 76 bool m_serialise;
Chris@236 77 bool m_smooth;
Chris@237 78
Chris@237 79 size_t m_channelCount;
Chris@237 80 Vamp::RealTime m_startTime;
Chris@236 81
Chris@236 82 Matcher::Parameters m_params;
Chris@236 83 Matcher::Parameters m_defaultParams;
Chris@236 84
Chris@236 85 FeatureExtractor::Parameters m_feParams;
Chris@236 86 FeatureExtractor::Parameters m_defaultFeParams;
Chris@243 87 double m_secondReferenceFrequency;
Chris@236 88
Chris@236 89 FeatureConditioner::Parameters m_fcParams;
Chris@236 90 FeatureConditioner::Parameters m_defaultFcParams;
Chris@236 91
Chris@236 92 DistanceMetric::Parameters m_dParams;
Chris@236 93 DistanceMetric::Parameters m_defaultDParams;
Chris@236 94
Chris@243 95 FullDTW::Parameters m_fdParams;
Chris@243 96 FullDTW::Parameters m_defaultFdParams;
Chris@243 97
Chris@237 98 std::vector<FeatureExtractor> m_featureExtractors;
Chris@237 99 std::vector<featureseq_t> m_features; // unconditioned features
Chris@237 100
Chris@240 101 FeatureSet performAlignment();
Chris@246 102 size_t findNonEmptyLength(const featureseq_t &);
Chris@246 103 featureseq_t downsample(const featureseq_t &, size_t inLength);
Chris@237 104
Chris@236 105 mutable int m_pathOutNo;
Chris@236 106 mutable int m_baOutNo;
Chris@237 107 mutable int m_spanOutNo;
Chris@236 108 };
Chris@236 109
Chris@236 110 #endif