Mercurial > hg > qm-dsp
changeset 77:e2bff5365828
* Fix total failure to detect barline when the strongest beat sd was
occurring at the first beat (bug caused by signed/unsigned overflow)
author | cannam |
---|---|
date | Tue, 23 Jun 2009 12:31:07 +0000 |
parents | 4fada56adbb8 |
children | 0965d2af5213 |
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]); }