Mercurial > hg > tuning-difference
diff src/BulkTuningDifference.h @ 47:f28b34e7ce8d
Add BulkTuningDifference plugin
author | Chris Cannam |
---|---|
date | Tue, 09 Jul 2019 16:14:19 +0100 |
parents | |
children | 69ab9a6e7aee |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/BulkTuningDifference.h Tue Jul 09 16:14:19 2019 +0100 @@ -0,0 +1,91 @@ +/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ + +/* + Centre for Digital Music, Queen Mary University of London. + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. See the file + COPYING included with this distribution for more information. +*/ + +#ifndef BULK_TUNING_DIFFERENCE_H +#define BULK_TUNING_DIFFERENCE_H + +#include <vamp-sdk/Plugin.h> + +#include <cq/Chromagram.h> + +#include <memory> + +using std::string; +using std::vector; + +class BulkTuningDifference : public Vamp::Plugin +{ +public: + BulkTuningDifference(float inputSampleRate); + virtual ~BulkTuningDifference(); + + string getIdentifier() const; + string getName() const; + string getDescription() const; + string getMaker() const; + int getPluginVersion() const; + string getCopyright() const; + + InputDomain getInputDomain() const; + size_t getPreferredBlockSize() const; + size_t getPreferredStepSize() const; + size_t getMinChannelCount() const; + size_t getMaxChannelCount() const; + + ParameterList getParameterDescriptors() const; + float getParameter(string identifier) const; + void setParameter(string identifier, float value); + + ProgramList getPrograms() const; + string getCurrentProgram() const; + void selectProgram(string name); + + OutputList getOutputDescriptors() const; + + bool initialise(size_t channels, size_t stepSize, size_t blockSize); + void reset(); + + FeatureSet process(const float *const *inputBuffers, + Vamp::RealTime timestamp); + + FeatureSet getRemainingFeatures(); + +protected: + typedef vector<float> Signal; + typedef vector<double> TFeature; + + int m_channelCount; + int m_bpo; + std::unique_ptr<Chromagram> m_refChroma; + TFeature m_refTotals; + TFeature m_refFeature; + std::vector<Signal> m_others; + int m_blockSize; + int m_frameCount; + float m_maxDuration; + int m_maxSemis; + bool m_fineTuning; + + Chromagram::Parameters paramsForTuningFrequency(double hz) const; + TFeature computeFeatureFromTotals(const TFeature &totals) const; + TFeature computeFeatureFromSignal(const Signal &signal, double hz) const; + void rotateFeature(TFeature &feature, int rotation) const; + double featureDistance(const TFeature &other, int rotation = 0) const; + int findBestRotation(const TFeature &other) const; + std::pair<int, double> findFineFrequency(int channel, int coarseCents); + void getRemainingFeaturesForChannel(int channel, FeatureSet &fs); + + mutable std::map<string, int> m_outputs; +}; + + +#endif