annotate src/TuningDifference.h @ 29:409ff482cb30

Add max-duration parameter. The results are often going to be quite wrong if you use this, simply because the two performances may be at different speeds and so the same duration of each may represent a different (sub-)performance. But it's sometimes necessary just to avoid blowing the thing up.
author Chris Cannam
date Fri, 27 Mar 2015 17:20:40 +0000
parents d660db57e902
children 2ef9c5d744ab
rev   line source
Chris@21 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@21 2
Chris@21 3 /*
Chris@21 4 Centre for Digital Music, Queen Mary University of London.
Chris@21 5
Chris@21 6 This program is free software; you can redistribute it and/or
Chris@21 7 modify it under the terms of the GNU General Public License as
Chris@21 8 published by the Free Software Foundation; either version 2 of the
Chris@21 9 License, or (at your option) any later version. See the file
Chris@21 10 COPYING included with this distribution for more information.
Chris@21 11 */
Chris@21 12
Chris@0 13 #ifndef TUNING_DIFFERENCE_H
Chris@0 14 #define TUNING_DIFFERENCE_H
Chris@0 15
Chris@0 16 #include <vamp-sdk/Plugin.h>
Chris@0 17
Chris@15 18 #include <cq/Chromagram.h>
Chris@13 19
Chris@13 20 #include <memory>
Chris@13 21
Chris@0 22 using std::string;
Chris@1 23 using std::vector;
Chris@0 24
Chris@0 25 class TuningDifference : public Vamp::Plugin
Chris@0 26 {
Chris@0 27 public:
Chris@0 28 TuningDifference(float inputSampleRate);
Chris@0 29 virtual ~TuningDifference();
Chris@0 30
Chris@0 31 string getIdentifier() const;
Chris@0 32 string getName() const;
Chris@0 33 string getDescription() const;
Chris@0 34 string getMaker() const;
Chris@0 35 int getPluginVersion() const;
Chris@0 36 string getCopyright() const;
Chris@0 37
Chris@0 38 InputDomain getInputDomain() const;
Chris@0 39 size_t getPreferredBlockSize() const;
Chris@0 40 size_t getPreferredStepSize() const;
Chris@0 41 size_t getMinChannelCount() const;
Chris@0 42 size_t getMaxChannelCount() const;
Chris@0 43
Chris@0 44 ParameterList getParameterDescriptors() const;
Chris@0 45 float getParameter(string identifier) const;
Chris@0 46 void setParameter(string identifier, float value);
Chris@0 47
Chris@0 48 ProgramList getPrograms() const;
Chris@0 49 string getCurrentProgram() const;
Chris@0 50 void selectProgram(string name);
Chris@0 51
Chris@0 52 OutputList getOutputDescriptors() const;
Chris@0 53
Chris@0 54 bool initialise(size_t channels, size_t stepSize, size_t blockSize);
Chris@0 55 void reset();
Chris@0 56
Chris@0 57 FeatureSet process(const float *const *inputBuffers,
Chris@0 58 Vamp::RealTime timestamp);
Chris@0 59
Chris@0 60 FeatureSet getRemainingFeatures();
Chris@0 61
Chris@0 62 protected:
Chris@13 63 typedef vector<float> Signal;
Chris@13 64 typedef vector<double> TFeature;
Chris@13 65
Chris@13 66 int m_bpo;
Chris@15 67 std::unique_ptr<Chromagram> m_refChroma;
Chris@15 68 TFeature m_refTotals;
Chris@13 69 TFeature m_refFeature;
Chris@13 70 Signal m_other;
Chris@1 71 int m_blockSize;
Chris@1 72 int m_frameCount;
Chris@29 73 float m_maxDuration;
Chris@13 74
Chris@15 75 Chromagram::Parameters paramsForTuningFrequency(double hz) const;
Chris@15 76 TFeature computeFeatureFromTotals(const TFeature &totals) const;
Chris@13 77 TFeature computeFeatureFromSignal(const Signal &signal, double hz) const;
Chris@13 78 double featureDistance(const TFeature &other, int rotation = 0) const;
Chris@13 79 int findBestRotation(const TFeature &other) const;
Chris@19 80 std::pair<int, double> findFineFrequency(int coarseCents, double coarseScore);
Chris@13 81
Chris@13 82 mutable std::map<string, int> m_outputs;
Chris@0 83 };
Chris@0 84
Chris@0 85
Chris@0 86 #endif