Mercurial > hg > cepstral-pitchtracker
changeset 56:d8eeba570d70
Switch to using feeder in plugin
author | Chris Cannam |
---|---|
date | Thu, 27 Sep 2012 17:14:11 +0100 |
parents | b32290646213 |
children | 82b3cdf6ca6b |
files | CepstralPitchTracker.cpp |
diffstat | 1 files changed, 17 insertions(+), 48 deletions(-) [+] |
line wrap: on
line diff
--- a/CepstralPitchTracker.cpp Thu Sep 27 15:52:17 2012 +0100 +++ b/CepstralPitchTracker.cpp Thu Sep 27 17:14:11 2012 +0100 @@ -26,6 +26,7 @@ #include "Cepstrum.h" #include "MeanFilter.h" #include "PeakInterpolator.h" +#include "AgentFeeder.h" #include "vamp-sdk/FFT.h" @@ -51,12 +52,14 @@ m_vflen(1), m_binFrom(0), m_binTo(0), - m_bins(0) + m_bins(0), + m_feeder(0) { } CepstralPitchTracker::~CepstralPitchTracker() { + delete m_feeder; } string @@ -223,6 +226,10 @@ if (m_binTo >= (int)m_blockSize / 2) { m_binTo = m_blockSize / 2 - 1; } + if (m_binFrom >= m_binTo) { + // shouldn't happen except for degenerate samplerate / blocksize combos + m_binFrom = m_binTo - 1; + } m_bins = (m_binTo - m_binFrom) + 1; @@ -234,6 +241,8 @@ void CepstralPitchTracker::reset() { + delete m_feeder; + m_feeder = new AgentFeeder(); } void @@ -317,51 +326,7 @@ e.time = timestamp; e.confidence = confidence; - if (!m_good.accept(e)) { - - int candidate = -1; - bool accepted = false; - - for (int i = 0; i < (int)m_possible.size(); ++i) { - if (m_possible[i].accept(e)) { - if (m_possible[i].getState() == NoteHypothesis::Satisfied) { - accepted = true; - candidate = i; - } - break; - } - } - - if (!accepted) { - NoteHypothesis h; - h.accept(e); //!!! must succeed as h is new, so perhaps there should be a ctor for this - m_possible.push_back(h); - } - - if (m_good.getState() == NoteHypothesis::Expired) { - addFeaturesFrom(m_good, fs); - } - - if (m_good.getState() == NoteHypothesis::Expired || - m_good.getState() == NoteHypothesis::Rejected) { - if (candidate >= 0) { - m_good = m_possible[candidate]; - } else { - m_good = NoteHypothesis(); - } - } - - // reap rejected/expired hypotheses from possible list - Hypotheses toReap = m_possible; - m_possible.clear(); - for (int i = 0; i < (int)toReap.size(); ++i) { - NoteHypothesis h = toReap[i]; - if (h.getState() != NoteHypothesis::Rejected && - h.getState() != NoteHypothesis::Expired) { - m_possible.push_back(h); - } - } - } + m_feeder->feed(e); delete[] data; return fs; @@ -370,9 +335,13 @@ CepstralPitchTracker::FeatureSet CepstralPitchTracker::getRemainingFeatures() { + m_feeder->finish(); + + AgentFeeder::Hypotheses accepted = m_feeder->getAcceptedHypotheses(); + FeatureSet fs; - if (m_good.getState() == NoteHypothesis::Satisfied) { - addFeaturesFrom(m_good, fs); + for (int i = 0; i < accepted.size(); ++i) { + addFeaturesFrom(accepted[i], fs); } return fs; }