annotate src/BulkTuningDifference.h @ 47:f28b34e7ce8d

Add BulkTuningDifference plugin
author Chris Cannam
date Tue, 09 Jul 2019 16:14:19 +0100
parents
children 69ab9a6e7aee
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@47 13 #ifndef BULK_TUNING_DIFFERENCE_H
Chris@47 14 #define BULK_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@47 25 class BulkTuningDifference : public Vamp::Plugin
Chris@47 26 {
Chris@47 27 public:
Chris@47 28 BulkTuningDifference(float inputSampleRate);
Chris@47 29 virtual ~BulkTuningDifference();
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 std::unique_ptr<Chromagram> m_refChroma;
Chris@47 69 TFeature m_refTotals;
Chris@47 70 TFeature m_refFeature;
Chris@47 71 std::vector<Signal> m_others;
Chris@47 72 int m_blockSize;
Chris@47 73 int m_frameCount;
Chris@47 74 float m_maxDuration;
Chris@47 75 int m_maxSemis;
Chris@47 76 bool m_fineTuning;
Chris@47 77
Chris@47 78 Chromagram::Parameters paramsForTuningFrequency(double hz) const;
Chris@47 79 TFeature computeFeatureFromTotals(const TFeature &totals) const;
Chris@47 80 TFeature computeFeatureFromSignal(const Signal &signal, double hz) const;
Chris@47 81 void rotateFeature(TFeature &feature, int rotation) const;
Chris@47 82 double featureDistance(const TFeature &other, int rotation = 0) const;
Chris@47 83 int findBestRotation(const TFeature &other) const;
Chris@47 84 std::pair<int, double> findFineFrequency(int channel, int coarseCents);
Chris@47 85 void getRemainingFeaturesForChannel(int channel, FeatureSet &fs);
Chris@47 86
Chris@47 87 mutable std::map<string, int> m_outputs;
Chris@47 88 };
Chris@47 89
Chris@47 90
Chris@47 91 #endif