annotate src/Silvet.h @ 135:8db5e4ab56ce

Ground-truth data in CSV and lab format, converted from the MIDI using Sonic Visualiser and then to lab using the script here
author Chris Cannam
date Thu, 08 May 2014 12:59:09 +0100
parents e282930cfca7
children 450f9987f041
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@32 25 #include "maths/MedianFilter.h"
Chris@32 26
Chris@31 27 using std::string;
Chris@32 28 using std::vector;
Chris@41 29 using std::set;
Chris@55 30 using std::map;
Chris@31 31
Chris@31 32 class Resampler;
Chris@32 33 class CQInterpolated;
Chris@31 34
Chris@31 35 class Silvet : public Vamp::Plugin
Chris@31 36 {
Chris@31 37 public:
Chris@31 38 Silvet(float inputSampleRate);
Chris@31 39 virtual ~Silvet();
Chris@31 40
Chris@31 41 string getIdentifier() const;
Chris@31 42 string getName() const;
Chris@31 43 string getDescription() const;
Chris@31 44 string getMaker() const;
Chris@31 45 int getPluginVersion() const;
Chris@31 46 string getCopyright() const;
Chris@31 47
Chris@31 48 InputDomain getInputDomain() const;
Chris@31 49 size_t getPreferredBlockSize() const;
Chris@31 50 size_t getPreferredStepSize() const;
Chris@31 51 size_t getMinChannelCount() const;
Chris@31 52 size_t getMaxChannelCount() const;
Chris@31 53
Chris@31 54 ParameterList getParameterDescriptors() const;
Chris@31 55 float getParameter(string identifier) const;
Chris@31 56 void setParameter(string identifier, float value);
Chris@31 57
Chris@31 58 ProgramList getPrograms() const;
Chris@31 59 string getCurrentProgram() const;
Chris@31 60 void selectProgram(string name);
Chris@31 61
Chris@31 62 OutputList getOutputDescriptors() const;
Chris@31 63
Chris@31 64 bool initialise(size_t channels, size_t stepSize, size_t blockSize);
Chris@31 65 void reset();
Chris@31 66
Chris@31 67 FeatureSet process(const float *const *inputBuffers,
Chris@31 68 Vamp::RealTime timestamp);
Chris@31 69
Chris@31 70 FeatureSet getRemainingFeatures();
Chris@31 71
Chris@31 72 protected:
Chris@31 73 Resampler *m_resampler;
Chris@32 74 CQInterpolated *m_cq;
Chris@32 75
Chris@110 76 bool m_hqMode;
Chris@110 77
Chris@32 78 typedef vector<vector<double> > Grid;
Chris@32 79
Chris@41 80 vector<MedianFilter<double> *> m_postFilter;
Chris@55 81 vector<map<int, double> > m_pianoRoll;
Chris@41 82
Chris@32 83 Grid preProcess(const Grid &);
Chris@41 84 FeatureList postProcess(const vector<double> &);
Chris@34 85 FeatureSet transcribe(const Grid &);
Chris@31 86
Chris@41 87 string noteName(int n) const;
Chris@41 88 float noteFrequency(int n) const;
Chris@38 89
Chris@31 90 int m_blockSize;
Chris@32 91 int m_columnCount;
Chris@32 92 int m_reducedColumnCount;
Chris@40 93 Vamp::RealTime m_startTime;
Chris@32 94
Chris@32 95 mutable int m_notesOutputNo;
Chris@32 96 mutable int m_cqOutputNo;
Chris@51 97 mutable int m_fcqOutputNo;
Chris@38 98 mutable int m_pitchOutputNo;
Chris@31 99 };
Chris@31 100
Chris@31 101 #endif