# HG changeset patch # User Chris Cannam # Date 1245760267 0 # Node ID 0b4c811baa10d5dc9b0ec1f60e1a0a8e6594ba6d # Parent 17c7b66583291e21092d04ac2330091e2946b87b * Fix total failure to detect barline when the strongest beat sd was occurring at the first beat (bug caused by signed/unsigned overflow) diff -r 17c7b6658329 -r 0b4c811baa10 dsp/tempotracking/DownBeat.cpp --- 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 &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]); }