# HG changeset patch # User Chris Cannam # Date 1348762971 -3600 # Node ID 82b3cdf6ca6b794c2005799b1e16b2765d685ce2 # Parent d8eeba570d70f093e19fb95990ae0a9194fffce4 Get new accepted hypotheses from feeder as they appear diff -r d8eeba570d70 -r 82b3cdf6ca6b AgentFeeder.h --- a/AgentFeeder.h Thu Sep 27 17:14:11 2012 +0100 +++ b/AgentFeeder.h Thu Sep 27 17:22:51 2012 +0100 @@ -56,7 +56,7 @@ typedef std::vector Hypotheses; - Hypotheses getAcceptedHypotheses() const { + const Hypotheses &getAcceptedHypotheses() const { return m_accepted; } diff -r d8eeba570d70 -r 82b3cdf6ca6b CepstralPitchTracker.cpp --- a/CepstralPitchTracker.cpp Thu Sep 27 17:14:11 2012 +0100 +++ b/CepstralPitchTracker.cpp Thu Sep 27 17:22:51 2012 +0100 @@ -53,6 +53,7 @@ m_binFrom(0), m_binTo(0), m_bins(0), + m_nAccepted(0), m_feeder(0) { } @@ -243,6 +244,7 @@ { delete m_feeder; m_feeder = new AgentFeeder(); + m_nAccepted = 0; } void @@ -268,11 +270,24 @@ fs[1].push_back(nf); } +void +CepstralPitchTracker::addNewFeatures(FeatureSet &fs) +{ + int n = m_feeder->getAcceptedHypotheses().size(); + if (n == m_nAccepted) return; + + AgentFeeder::Hypotheses accepted = m_feeder->getAcceptedHypotheses(); + + for (int i = m_nAccepted; i < n; ++i) { + addFeaturesFrom(accepted[i], fs); + } + + m_nAccepted = n; +} + CepstralPitchTracker::FeatureSet CepstralPitchTracker::process(const float *const *inputBuffers, RealTime timestamp) { - FeatureSet fs; - double *rawcep = new double[m_blockSize]; double magmean = Cepstrum(m_blockSize).process(inputBuffers[0], rawcep); @@ -295,7 +310,7 @@ if (maxbin < 0) { delete[] data; - return fs; + return FeatureSet(); } double nextPeakVal = 0.0; @@ -321,6 +336,8 @@ // std::cerr << "magmean = " << magmean << ", confidence = " << confidence << std::endl; } + delete[] data; + NoteHypothesis::Estimate e; e.freq = peakfreq; e.time = timestamp; @@ -328,7 +345,8 @@ m_feeder->feed(e); - delete[] data; + FeatureSet fs; + addNewFeatures(fs); return fs; } @@ -337,11 +355,7 @@ { m_feeder->finish(); - AgentFeeder::Hypotheses accepted = m_feeder->getAcceptedHypotheses(); - FeatureSet fs; - for (int i = 0; i < accepted.size(); ++i) { - addFeaturesFrom(accepted[i], fs); - } + addNewFeatures(fs); return fs; } diff -r d8eeba570d70 -r 82b3cdf6ca6b CepstralPitchTracker.h --- a/CepstralPitchTracker.h Thu Sep 27 17:14:11 2012 +0100 +++ b/CepstralPitchTracker.h Thu Sep 27 17:22:51 2012 +0100 @@ -80,8 +80,11 @@ int m_binTo; int m_bins; // count of "interesting" bins, those returned in m_cepOutput + int m_nAccepted; + AgentFeeder *m_feeder; void addFeaturesFrom(NoteHypothesis h, FeatureSet &fs); + void addNewFeatures(FeatureSet &fs); }; #endif