annotate src/TuningDifference.h @ 69:c0b78dcc08e6 feature-alternatives tip

Some experimental feature adjustments - try using diffs between chroma cells (no better at first glance)
author Chris Cannam
date Fri, 16 Aug 2019 12:28:58 +0100
parents 7bdcc40deebe
children
rev   line source
Chris@47 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@47 2
Chris@47 3 /*
Chris@47 4 Centre for Digital Music, Queen Mary University of London.
Chris@47 5
Chris@47 6 This program is free software; you can redistribute it and/or
Chris@47 7 modify it under the terms of the GNU General Public License as
Chris@47 8 published by the Free Software Foundation; either version 2 of the
Chris@47 9 License, or (at your option) any later version. See the file
Chris@47 10 COPYING included with this distribution for more information.
Chris@47 11 */
Chris@47 12
Chris@55 13 #ifndef TUNING_DIFFERENCE_H
Chris@55 14 #define TUNING_DIFFERENCE_H
Chris@47 15
Chris@47 16 #include <vamp-sdk/Plugin.h>
Chris@47 17
Chris@47 18 #include <cq/Chromagram.h>
Chris@47 19
Chris@47 20 #include <memory>
Chris@47 21
Chris@47 22 using std::string;
Chris@47 23 using std::vector;
Chris@47 24
Chris@55 25 class TuningDifference : public Vamp::Plugin
Chris@47 26 {
Chris@47 27 public:
Chris@55 28 TuningDifference(float inputSampleRate);
Chris@55 29 virtual ~TuningDifference();
Chris@47 30
Chris@47 31 string getIdentifier() const;
Chris@47 32 string getName() const;
Chris@47 33 string getDescription() const;
Chris@47 34 string getMaker() const;
Chris@47 35 int getPluginVersion() const;
Chris@47 36 string getCopyright() const;
Chris@47 37
Chris@47 38 InputDomain getInputDomain() const;
Chris@47 39 size_t getPreferredBlockSize() const;
Chris@47 40 size_t getPreferredStepSize() const;
Chris@47 41 size_t getMinChannelCount() const;
Chris@47 42 size_t getMaxChannelCount() const;
Chris@47 43
Chris@47 44 ParameterList getParameterDescriptors() const;
Chris@47 45 float getParameter(string identifier) const;
Chris@47 46 void setParameter(string identifier, float value);
Chris@47 47
Chris@47 48 ProgramList getPrograms() const;
Chris@47 49 string getCurrentProgram() const;
Chris@47 50 void selectProgram(string name);
Chris@47 51
Chris@47 52 OutputList getOutputDescriptors() const;
Chris@47 53
Chris@47 54 bool initialise(size_t channels, size_t stepSize, size_t blockSize);
Chris@47 55 void reset();
Chris@47 56
Chris@47 57 FeatureSet process(const float *const *inputBuffers,
Chris@47 58 Vamp::RealTime timestamp);
Chris@47 59
Chris@47 60 FeatureSet getRemainingFeatures();
Chris@47 61
Chris@47 62 protected:
Chris@47 63 typedef vector<float> Signal;
Chris@47 64 typedef vector<double> TFeature;
Chris@47 65
Chris@47 66 int m_channelCount;
Chris@47 67 int m_bpo;
Chris@47 68 int m_blockSize;
Chris@47 69 int m_frameCount;
Chris@47 70 float m_maxDuration;
Chris@47 71 int m_maxSemis;
Chris@47 72 bool m_fineTuning;
Chris@47 73
Chris@50 74 std::unique_ptr<Chromagram> m_refChroma;
Chris@50 75 TFeature m_refTotals;
Chris@50 76 std::map<int, TFeature> m_refFeatures; // map from cents-offset to feature
Chris@50 77 Signal m_reference; // we have to retain this when fine-tuning is enabled
Chris@50 78 std::vector<std::shared_ptr<Chromagram>> m_otherChroma;
Chris@50 79 std::vector<TFeature> m_otherTotals;
Chris@50 80
Chris@47 81 Chromagram::Parameters paramsForTuningFrequency(double hz) const;
Chris@47 82 TFeature computeFeatureFromTotals(const TFeature &totals) const;
Chris@47 83 TFeature computeFeatureFromSignal(const Signal &signal, double hz) const;
Chris@47 84 void rotateFeature(TFeature &feature, int rotation) const;
Chris@50 85 double featureDistance(const TFeature &ref, const TFeature &other,
Chris@50 86 int rotation) const;
Chris@50 87 int findBestRotation(const TFeature &ref, const TFeature &other) const;
Chris@50 88 std::pair<int, double> findFineFrequency(const TFeature &rotated,
Chris@50 89 int coarseCents);
Chris@47 90 void getRemainingFeaturesForChannel(int channel, FeatureSet &fs);
Chris@47 91
Chris@47 92 mutable std::map<string, int> m_outputs;
Chris@47 93 };
Chris@47 94
Chris@47 95
Chris@47 96 #endif