Chris@0
|
1 #ifndef TUNING_DIFFERENCE_H
|
Chris@0
|
2 #define TUNING_DIFFERENCE_H
|
Chris@0
|
3
|
Chris@0
|
4 #include <vamp-sdk/Plugin.h>
|
Chris@0
|
5
|
Chris@13
|
6 #include <cq/CQSpectrogram.h>
|
Chris@13
|
7
|
Chris@13
|
8 #include <memory>
|
Chris@13
|
9
|
Chris@0
|
10 using std::string;
|
Chris@1
|
11 using std::vector;
|
Chris@0
|
12
|
Chris@0
|
13 class TuningDifference : public Vamp::Plugin
|
Chris@0
|
14 {
|
Chris@0
|
15 public:
|
Chris@0
|
16 TuningDifference(float inputSampleRate);
|
Chris@0
|
17 virtual ~TuningDifference();
|
Chris@0
|
18
|
Chris@0
|
19 string getIdentifier() const;
|
Chris@0
|
20 string getName() const;
|
Chris@0
|
21 string getDescription() const;
|
Chris@0
|
22 string getMaker() const;
|
Chris@0
|
23 int getPluginVersion() const;
|
Chris@0
|
24 string getCopyright() const;
|
Chris@0
|
25
|
Chris@0
|
26 InputDomain getInputDomain() const;
|
Chris@0
|
27 size_t getPreferredBlockSize() const;
|
Chris@0
|
28 size_t getPreferredStepSize() const;
|
Chris@0
|
29 size_t getMinChannelCount() const;
|
Chris@0
|
30 size_t getMaxChannelCount() const;
|
Chris@0
|
31
|
Chris@0
|
32 ParameterList getParameterDescriptors() const;
|
Chris@0
|
33 float getParameter(string identifier) const;
|
Chris@0
|
34 void setParameter(string identifier, float value);
|
Chris@0
|
35
|
Chris@0
|
36 ProgramList getPrograms() const;
|
Chris@0
|
37 string getCurrentProgram() const;
|
Chris@0
|
38 void selectProgram(string name);
|
Chris@0
|
39
|
Chris@0
|
40 OutputList getOutputDescriptors() const;
|
Chris@0
|
41
|
Chris@0
|
42 bool initialise(size_t channels, size_t stepSize, size_t blockSize);
|
Chris@0
|
43 void reset();
|
Chris@0
|
44
|
Chris@0
|
45 FeatureSet process(const float *const *inputBuffers,
|
Chris@0
|
46 Vamp::RealTime timestamp);
|
Chris@0
|
47
|
Chris@0
|
48 FeatureSet getRemainingFeatures();
|
Chris@0
|
49
|
Chris@0
|
50 protected:
|
Chris@13
|
51 typedef vector<float> Signal;
|
Chris@13
|
52 typedef vector<double> Chroma;
|
Chris@13
|
53 typedef vector<double> TFeature;
|
Chris@13
|
54
|
Chris@13
|
55 int m_bpo;
|
Chris@13
|
56 std::unique_ptr<CQSpectrogram> m_refCQ;
|
Chris@13
|
57 Chroma m_refTotals;
|
Chris@13
|
58 TFeature m_refFeature;
|
Chris@13
|
59 Signal m_other;
|
Chris@1
|
60 int m_blockSize;
|
Chris@1
|
61 int m_frameCount;
|
Chris@13
|
62
|
Chris@13
|
63 CQParameters paramsForTuningFrequency(double hz) const;
|
Chris@13
|
64 TFeature computeFeatureFromTotals(const Chroma &totals) const;
|
Chris@13
|
65 TFeature computeFeatureFromSignal(const Signal &signal, double hz) const;
|
Chris@13
|
66 double featureDistance(const TFeature &other, int rotation = 0) const;
|
Chris@13
|
67 int findBestRotation(const TFeature &other) const;
|
Chris@13
|
68
|
Chris@13
|
69 mutable std::map<string, int> m_outputs;
|
Chris@0
|
70 };
|
Chris@0
|
71
|
Chris@0
|
72
|
Chris@0
|
73 #endif
|