annotate src/EM.h @ 110:e282930cfca7

Add draft/intensive mode setting (determines whether to use shifts)
author Chris Cannam
date Tue, 06 May 2014 18:55:11 +0100
parents 384338fa460d
children 2169e7a448c5
rev   line source
Chris@34 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@34 2
Chris@34 3 /*
Chris@34 4 Silvet
Chris@34 5
Chris@34 6 A Vamp plugin for note transcription.
Chris@34 7 Centre for Digital Music, Queen Mary University of London.
Chris@34 8
Chris@34 9 This program is free software; you can redistribute it and/or
Chris@34 10 modify it under the terms of the GNU General Public License as
Chris@34 11 published by the Free Software Foundation; either version 2 of the
Chris@34 12 License, or (at your option) any later version. See the file
Chris@34 13 COPYING included with this distribution for more information.
Chris@34 14 */
Chris@34 15
Chris@34 16 #ifndef SILVET_EM_H
Chris@34 17 #define SILVET_EM_H
Chris@34 18
Chris@34 19 #include <vector>
Chris@34 20
Chris@34 21 class EM
Chris@34 22 {
Chris@34 23 public:
Chris@110 24 EM(bool useShifts);
Chris@34 25 ~EM();
Chris@34 26
Chris@36 27 void iterate(std::vector<double> column);
Chris@34 28
Chris@38 29 const std::vector<double> &getEstimate() const {
Chris@38 30 return m_estimate;
Chris@38 31 }
Chris@38 32 const std::vector<double> &getPitchDistribution() const {
Chris@38 33 return m_pitches;
Chris@38 34 }
Chris@38 35 const std::vector<std::vector<double> > &getSources() const {
Chris@38 36 return m_sources;
Chris@38 37 }
Chris@38 38
Chris@34 39 private:
Chris@34 40 typedef std::vector<double> V;
Chris@34 41 typedef std::vector<std::vector<double> > Grid;
Chris@34 42
Chris@110 43 bool m_useShifts;
Chris@110 44
Chris@34 45 V m_pitches;
Chris@55 46 Grid m_shifts;
Chris@34 47 Grid m_sources;
Chris@36 48
Chris@36 49 V m_estimate;
Chris@36 50 V m_q;
Chris@34 51
Chris@45 52 int m_noteCount;
Chris@45 53 int m_shiftCount; // 1 + 2 * max template shift
Chris@45 54 int m_binCount;
Chris@45 55 int m_instrumentCount;
Chris@42 56
Chris@42 57 double m_pitchSparsity;
Chris@42 58 double m_sourceSparsity;
Chris@35 59
Chris@45 60 int m_lowestPitch;
Chris@45 61 int m_highestPitch;
Chris@35 62
Chris@55 63 void normaliseColumn(V &column);
Chris@55 64 void normaliseGrid(Grid &grid);
Chris@36 65 void expectation(const V &column);
Chris@36 66 void maximisation(const V &column);
Chris@36 67
Chris@55 68 const float *templateFor(int instrument, int note, int shift);
Chris@45 69 void rangeFor(int instrument, int &minPitch, int &maxPitch);
Chris@45 70 bool inRange(int instrument, int pitch);
Chris@34 71 };
Chris@34 72
Chris@34 73 #endif