Mercurial > hg > cepstral-pitchtracker
changeset 57:82b3cdf6ca6b
Get new accepted hypotheses from feeder as they appear
author | Chris Cannam |
---|---|
date | Thu, 27 Sep 2012 17:22:51 +0100 |
parents | d8eeba570d70 |
children | 9f50a5876dd3 0a2827a35031 |
files | AgentFeeder.h CepstralPitchTracker.cpp CepstralPitchTracker.h |
diffstat | 3 files changed, 27 insertions(+), 10 deletions(-) [+] |
line wrap: on
line diff
--- 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<NoteHypothesis> Hypotheses; - Hypotheses getAcceptedHypotheses() const { + const Hypotheses &getAcceptedHypotheses() const { return m_accepted; }
--- 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; }
--- 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