annotate src/EM.cpp @ 35:461d94ed3816

More on EM
author Chris Cannam
date Fri, 04 Apr 2014 14:38:40 +0100
parents 7d81407a2fd8
children 74b77a4d6552
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 #include "EM.h"
Chris@34 17
Chris@34 18 #include "data/include/templates.h"
Chris@34 19
Chris@35 20 static double epsilon = 1e-16;
Chris@35 21
Chris@35 22 EM::EM() :
Chris@35 23 m_notes(SILVET_TEMPLATE_NOTE_COUNT),
Chris@35 24 m_bins(SILVET_TEMPLATE_HEIGHT),
Chris@35 25 m_instruments(SILVET_TEMPLATE_COUNT)
Chris@35 26 {
Chris@35 27 m_lowest = 0;
Chris@35 28 m_highest = m_notes - 1;
Chris@35 29
Chris@35 30 for (int i = 0; i < m_instruments; ++i) {
Chris@35 31 if (i == 0 || silvet_templates[i].lowest < m_lowest) {
Chris@35 32 m_lowest = silvet_templates[i].lowest;
Chris@35 33 }
Chris@35 34 if (i == 0 || silvet_templates[i].highest > m_highest) {
Chris@35 35 m_highest = silvet_templates[i].highest;
Chris@35 36 }
Chris@35 37 }
Chris@35 38
Chris@35 39 m_pitches = V(m_notes);
Chris@35 40
Chris@35 41 for (int n = 0; n < m_notes; ++i) {
Chris@35 42 m_pitches[n] = drand48();
Chris@35 43 }
Chris@35 44
Chris@35 45 m_sources = Grid(m_instruments);
Chris@35 46
Chris@35 47 for (int i = 0; i < m_instruments; ++i) {
Chris@35 48 m_sources[i] = V(m_notes);
Chris@35 49 for (int n = 0; n < m_notes; ++n) {
Chris@35 50 m_sources[i][n] = (inRange(i, n) ? 1.0 : 0.0);
Chris@35 51 }
Chris@35 52 }
Chris@35 53
Chris@35 54 m_q = V(m_bins);
Chris@35 55
Chris@35 56 for (int w = 0; w < m_bins; ++w) {
Chris@35 57 m_q[w] = epsilon;
Chris@35 58 }
Chris@35 59 }
Chris@35 60
Chris@35 61 EM::~EM()
Chris@35 62 {
Chris@35 63 }
Chris@35 64
Chris@35 65 bool
Chris@35 66 EM::inRange(int instrument, int note)
Chris@35 67 {
Chris@35 68 return (note >= silvet_templates[instrument].lowest &&
Chris@35 69 note <= silvet_templates[instrument].highest);
Chris@35 70 }
Chris@35 71