Chris@34: /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ Chris@34: Chris@34: /* Chris@34: Silvet Chris@34: Chris@34: A Vamp plugin for note transcription. Chris@34: Centre for Digital Music, Queen Mary University of London. Chris@34: Chris@34: This program is free software; you can redistribute it and/or Chris@34: modify it under the terms of the GNU General Public License as Chris@34: published by the Free Software Foundation; either version 2 of the Chris@34: License, or (at your option) any later version. See the file Chris@34: COPYING included with this distribution for more information. Chris@34: */ Chris@34: Chris@34: #ifndef SILVET_EM_H Chris@34: #define SILVET_EM_H Chris@34: Chris@34: #include Chris@34: Chris@34: class EM Chris@34: { Chris@34: public: Chris@34: EM(); Chris@34: ~EM(); Chris@34: Chris@36: void iterate(std::vector column); Chris@34: Chris@38: const std::vector &getEstimate() const { Chris@38: return m_estimate; Chris@38: } Chris@38: const std::vector &getPitchDistribution() const { Chris@38: return m_pitches; Chris@38: } Chris@38: const std::vector > &getSources() const { Chris@38: return m_sources; Chris@38: } Chris@38: Chris@34: private: Chris@34: typedef std::vector V; Chris@34: typedef std::vector > Grid; Chris@34: Chris@34: V m_pitches; Chris@55: Grid m_shifts; Chris@34: Grid m_sources; Chris@36: Chris@36: V m_estimate; Chris@36: V m_q; Chris@34: Chris@45: int m_noteCount; Chris@45: int m_shiftCount; // 1 + 2 * max template shift Chris@45: int m_binCount; Chris@45: int m_instrumentCount; Chris@42: Chris@42: double m_pitchSparsity; Chris@42: double m_sourceSparsity; Chris@35: Chris@45: int m_lowestPitch; Chris@45: int m_highestPitch; Chris@35: Chris@55: void normaliseColumn(V &column); Chris@55: void normaliseGrid(Grid &grid); Chris@36: void expectation(const V &column); Chris@36: void maximisation(const V &column); Chris@36: Chris@55: const float *templateFor(int instrument, int note, int shift); Chris@45: void rangeFor(int instrument, int &minPitch, int &maxPitch); Chris@45: bool inRange(int instrument, int pitch); Chris@34: }; Chris@34: Chris@34: #endif