changeset 302:0b4c811baa10

* Fix total failure to detect barline when the strongest beat sd was occurring at the first beat (bug caused by signed/unsigned overflow)
author Chris Cannam <c.cannam@qmul.ac.uk>
date Tue, 23 Jun 2009 12:31:07 +0000
parents 17c7b6658329
children c49773942de3
files dsp/tempotracking/DownBeat.cpp
diffstat 1 files changed, 6 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/dsp/tempotracking/DownBeat.cpp	Mon Jun 22 14:10:03 2009 +0000
+++ b/dsp/tempotracking/DownBeat.cpp	Tue Jun 23 12:31:07 2009 +0000
@@ -69,7 +69,7 @@
 {
 //    std::cerr << "m_factor = " << m_factor << std::endl;
     if (m_factor < 2) return;
-    int highest = Decimator::getHighestSupportedFactor();
+    size_t highest = Decimator::getHighestSupportedFactor();
     if (m_factor <= highest) {
         m_decimator1 = new Decimator(m_increment, m_factor);
 //        std::cerr << "DownBeat: decimator 1 factor " << m_factor << ", size " << m_increment << std::endl;
@@ -107,7 +107,7 @@
         m_decimator1->process(audio, m_buffer + m_buffill);
     } else {
         // just copy across (m_factor is presumably 1)
-        for (int i = 0; i < m_increment; ++i) {
+        for (size_t i = 0; i < m_increment; ++i) {
             (m_buffer + m_buffill)[i] = audio[i];
         }
     }
@@ -217,7 +217,7 @@
 
     // We now have all spectral difference measures in specdiff
 
-    unsigned int timesig = m_bpb;
+    int timesig = m_bpb;
     if (timesig == 0) timesig = 4;
 
     d_vec_t dbcand(timesig); // downbeat candidates
@@ -229,7 +229,7 @@
    // look for beat transition which leads to greatest spectral change
    for (int beat = 0; beat < timesig; ++beat) {
        int count = 0;
-       for (int example = beat; example < m_beatsd.size(); example += timesig) {
+       for (int example = beat-1; example < (int)m_beatsd.size(); example += timesig) {
            if (example < 0) continue;
            dbcand[beat] += (m_beatsd[example]) / timesig;
            ++count;
@@ -242,7 +242,7 @@
     int dbind = MathUtilities::getMax(dbcand);
 
     // remaining downbeats are at timesig intervals from the first
-    for (int i = dbind; i < beats.size(); i += timesig) {
+    for (int i = dbind; i < (int)beats.size(); i += timesig) {
         downbeats.push_back(i);
     }
 }
@@ -298,6 +298,6 @@
 void
 DownBeat::getBeatSD(vector<double> &beatsd) const
 {
-    for (int i = 0; i < m_beatsd.size(); ++i) beatsd.push_back(m_beatsd[i]);
+    for (int i = 0; i < (int)m_beatsd.size(); ++i) beatsd.push_back(m_beatsd[i]);
 }