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
|