Mercurial > hg > qm-dsp
diff dsp/tempotracking/DownBeat.cpp @ 283:5e125f030287
* Fixes to problems shown up by vamp-plugin-tester.
Still not all plugins pass all tests, though
author | Chris Cannam <c.cannam@qmul.ac.uk> |
---|---|
date | Mon, 23 Mar 2009 16:28:53 +0000 |
parents | 2703b3437aee |
children | 6cb2b3cd5356 |
line wrap: on
line diff
--- a/dsp/tempotracking/DownBeat.cpp Fri Feb 27 13:07:22 2009 +0000 +++ b/dsp/tempotracking/DownBeat.cpp Mon Mar 23 16:28:53 2009 +0000 @@ -28,6 +28,7 @@ m_decimator1(0), m_decimator2(0), m_buffer(0), + m_decbuf(0), m_bufsiz(0), m_buffill(0), m_beatframesize(0), @@ -64,6 +65,7 @@ void DownBeat::makeDecimators() { +// std::cerr << "m_factor = " << m_factor << std::endl; if (m_factor < 2) return; int highest = Decimator::getHighestSupportedFactor(); if (m_factor <= highest) { @@ -91,20 +93,25 @@ m_buffer = (float *)realloc(m_buffer, m_bufsiz * sizeof(float)); } } - if (!m_decimator1) makeDecimators(); - float rmsin = 0, rmsout = 0; - for (int i = 0; i < m_increment; ++i) { - rmsin += audio[i] * audio[i]; - } + if (!m_decimator1 && m_factor > 1) makeDecimators(); +// float rmsin = 0, rmsout = 0; +// for (int i = 0; i < m_increment; ++i) { +// rmsin += audio[i] * audio[i]; +// } if (m_decimator2) { m_decimator1->process(audio, m_decbuf); m_decimator2->process(m_decbuf, m_buffer + m_buffill); + } else if (m_decimator1) { + m_decimator1->process(audio, m_buffer + m_buffill); } else { - m_decimator1->process(audio, m_buffer + m_buffill); + // just copy across (m_factor is presumably 1) + for (int i = 0; i < m_increment; ++i) { + (m_buffer + m_buffill)[i] = audio[i]; + } } - for (int i = 0; i < m_increment / m_factor; ++i) { - rmsout += m_buffer[m_buffill + i] * m_buffer[m_buffill + i]; - } +// for (int i = 0; i < m_increment / m_factor; ++i) { +// rmsout += m_buffer[m_buffill + i] * m_buffer[m_buffill + i]; +// } // std::cerr << "pushAudioBlock: rms in " << sqrt(rmsin) << ", out " << sqrt(rmsout) << std::endl; m_buffill += m_increment / m_factor; } @@ -120,6 +127,7 @@ DownBeat::resetAudioBuffer() { if (m_buffer) free(m_buffer); + m_buffer = 0; m_buffill = 0; m_bufsiz = 0; } @@ -161,13 +169,15 @@ // the size varies, it's easier to do this by hand than use // our Window abstraction.) - float rms = 0; - for (size_t j = 0; j < beatlen; ++j) { +// std::cerr << "beatlen = " << beatlen << std::endl; + +// float rms = 0; + for (size_t j = 0; j < beatlen && j < m_beatframesize; ++j) { double mul = 0.5 * (1.0 - cos(TWO_PI * (double(j) / double(beatlen)))); m_beatframe[j] = audio[beatstart + j] * mul; - rms += m_beatframe[j] * m_beatframe[j]; +// rms += m_beatframe[j] * m_beatframe[j]; } - rms = sqrt(rms); +// rms = sqrt(rms); // std::cerr << "beat " << i << ": audio rms " << rms << std::endl; for (size_t j = beatlen; j < m_beatframesize; ++j) {