Mercurial > hg > match-vamp
diff src/MatchFeeder.cpp @ 61:19a93b15fcc3 refactors
Merge from branch "refactors_no_float"
author | Chris Cannam |
---|---|
date | Fri, 14 Nov 2014 13:55:52 +0000 |
parents | a1b7df871496 faa523be20f9 |
children | da9ead46abe9 |
line wrap: on
line diff
--- a/src/MatchFeeder.cpp Fri Nov 14 10:25:40 2014 +0000 +++ b/src/MatchFeeder.cpp Fri Nov 14 13:55:52 2014 +0000 @@ -19,7 +19,7 @@ using std::vector; MatchFeeder::MatchFeeder(Matcher *m1, Matcher *m2) : - pm1(m1), pm2(m2) + pm1(m1), pm2(m2), n(0), lastIn1(0), lastIn2(0) { fftSize = m1->m_params.fftSize; finder = new Finder(m1, m2); @@ -53,7 +53,7 @@ prepare(input); - while (!q1.empty() && !q2.empty()) { + while (!q1.empty() || !q2.empty()) { // std::cerr << "MatchFeeder::feed: q1 " << q1.size() << " q2 " << q2.size() << std::endl; (void)feedBlock(); } @@ -66,7 +66,7 @@ Features all; - while (!q1.empty() && !q2.empty()) { + while (!q1.empty() || !q2.empty()) { Features ff = feedBlock(); all.f1.insert(all.f1.end(), ff.f1.begin(), ff.f1.end()); all.f2.insert(all.f2.end(), ff.f2.begin(), ff.f2.end()); @@ -78,17 +78,36 @@ void MatchFeeder::prepare(const float *const *input) { + float threshold = 1e-5f; + float *block = new float[fftSize+2]; + float rms = 0; + for (size_t i = 0; i < fftSize+2; ++i) { block[i] = input[0][i]; + rms += block[i] * block[i]; + } + rms = sqrtf(rms / (fftSize+2)); + if (rms > threshold) { + lastIn1 = n; } q1.push(block); block = new float[fftSize+2]; + rms = 0; + for (size_t i = 0; i < fftSize+2; ++i) { block[i] = input[1][i]; + rms += block[i] * block[i]; + } + rms = sqrtf(rms / (fftSize+2)); + if (rms > threshold) { + lastIn2 = n; } q2.push(block); + + ++n; + finder->setDurations(lastIn1, lastIn2); } MatchFeeder::Features @@ -97,16 +116,15 @@ Features ff; vector<double> f1, f2; - if (pm1->m_frameCount < pm1->m_blockSize) { // fill initial block + if (q1.empty()) { + feed2(); + } else if (q2.empty()) { + feed1(); + } else if (pm1->m_frameCount < pm1->m_blockSize) { // fill initial block // std::cerr << "feeding initial block" << std::endl; f1 = feed1(); f2 = feed2(); - } -//!!! } else if (pm1->atEnd) { -// feed2(); -//!!! } else if (pm2->atEnd) -// feed1(); - else if (pm1->m_runCount >= pm1->m_params.maxRunCount) { // slope constraints + } else if (pm1->m_runCount >= pm1->m_params.maxRunCount) { // slope constraints // std::cerr << "pm1 too slopey" << std::endl; f2 = feed2(); } else if (pm2->m_runCount >= pm2->m_params.maxRunCount) {