annotate src/Silvet.h @ 167:416b555df3b2 finetune

More on returning fine tuning (but we're treating different shifts of the same pitch as different notes at the moment which is not right)
author Chris Cannam
date Tue, 20 May 2014 17:49:07 +0100
parents 7979fa40c9f7
children 51bd3d833db8
rev   line source
Chris@31 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@31 2
Chris@31 3 /*
Chris@31 4 Silvet
Chris@31 5
Chris@31 6 A Vamp plugin for note transcription.
Chris@31 7 Centre for Digital Music, Queen Mary University of London.
Chris@31 8
Chris@31 9 This program is free software; you can redistribute it and/or
Chris@31 10 modify it under the terms of the GNU General Public License as
Chris@31 11 published by the Free Software Foundation; either version 2 of the
Chris@31 12 License, or (at your option) any later version. See the file
Chris@31 13 COPYING included with this distribution for more information.
Chris@31 14 */
Chris@31 15
Chris@31 16 #ifndef SILVET_H
Chris@31 17 #define SILVET_H
Chris@31 18
Chris@31 19 #include <vamp-sdk/Plugin.h>
Chris@31 20
Chris@32 21 #include <vector>
Chris@32 22 #include <string>
Chris@41 23 #include <set>
Chris@32 24
Chris@152 25 #include "MedianFilter.h"
Chris@161 26 #include "Instruments.h"
Chris@32 27
Chris@31 28 using std::string;
Chris@32 29 using std::vector;
Chris@41 30 using std::set;
Chris@55 31 using std::map;
Chris@31 32
Chris@31 33 class Resampler;
Chris@145 34 class CQSpectrogram;
Chris@31 35
Chris@31 36 class Silvet : public Vamp::Plugin
Chris@31 37 {
Chris@31 38 public:
Chris@31 39 Silvet(float inputSampleRate);
Chris@31 40 virtual ~Silvet();
Chris@31 41
Chris@31 42 string getIdentifier() const;
Chris@31 43 string getName() const;
Chris@31 44 string getDescription() const;
Chris@31 45 string getMaker() const;
Chris@31 46 int getPluginVersion() const;
Chris@31 47 string getCopyright() const;
Chris@31 48
Chris@31 49 InputDomain getInputDomain() const;
Chris@31 50 size_t getPreferredBlockSize() const;
Chris@31 51 size_t getPreferredStepSize() const;
Chris@31 52 size_t getMinChannelCount() const;
Chris@31 53 size_t getMaxChannelCount() const;
Chris@31 54
Chris@31 55 ParameterList getParameterDescriptors() const;
Chris@31 56 float getParameter(string identifier) const;
Chris@31 57 void setParameter(string identifier, float value);
Chris@31 58
Chris@31 59 ProgramList getPrograms() const;
Chris@31 60 string getCurrentProgram() const;
Chris@31 61 void selectProgram(string name);
Chris@31 62
Chris@31 63 OutputList getOutputDescriptors() const;
Chris@31 64
Chris@31 65 bool initialise(size_t channels, size_t stepSize, size_t blockSize);
Chris@31 66 void reset();
Chris@31 67
Chris@31 68 FeatureSet process(const float *const *inputBuffers,
Chris@31 69 Vamp::RealTime timestamp);
Chris@31 70
Chris@31 71 FeatureSet getRemainingFeatures();
Chris@31 72
Chris@31 73 protected:
Chris@161 74 const std::vector<InstrumentPack> m_instruments;
Chris@161 75
Chris@31 76 Resampler *m_resampler;
Chris@145 77 CQSpectrogram *m_cq;
Chris@32 78
Chris@110 79 bool m_hqMode;
Chris@166 80 bool m_fineTuning;
Chris@162 81 int m_instrument;
Chris@165 82 int m_colsPerSec;
Chris@110 83
Chris@32 84 typedef vector<vector<double> > Grid;
Chris@32 85
Chris@41 86 vector<MedianFilter<double> *> m_postFilter;
Chris@55 87 vector<map<int, double> > m_pianoRoll;
Chris@41 88
Chris@32 89 Grid preProcess(const Grid &);
Chris@166 90
Chris@166 91 map<int, double> postProcess(const float *pitches,
Chris@166 92 const float *const *shifts,
Chris@166 93 int shiftCount,
Chris@166 94 double gain); // -> piano roll column
Chris@166 95
Chris@167 96 FeatureList noteTrack(const map<int, double> &pianoRollColumn,
Chris@167 97 int shiftCount);
Chris@166 98
Chris@34 99 FeatureSet transcribe(const Grid &);
Chris@31 100
Chris@41 101 string noteName(int n) const;
Chris@167 102 float noteFrequency(int n, int shiftCount) const;
Chris@38 103
Chris@31 104 int m_blockSize;
Chris@32 105 int m_columnCount;
Chris@40 106 Vamp::RealTime m_startTime;
Chris@32 107
Chris@32 108 mutable int m_notesOutputNo;
Chris@31 109 };
Chris@31 110
Chris@31 111 #endif