# HG changeset patch # User Chris Cannam # Date 1147694864 0 # Node ID d00c1bad733206bcd184a3a659b7ffa8a1836cc0 # Parent b033ac01902ba6dfc063ae21303cdec7c1612a2a * Make BeatDetect ask for its input in the frequency domain -- it can be a bit faster if the host does FFT using e.g. FFTW instead of our rather slower implementation, and also this means we don't have to worry about handling non-power-of-two FFT sizes. * Updates to copyright notes &c diff -r b033ac01902b -r d00c1bad7332 plugins/BeatDetect.cpp --- a/plugins/BeatDetect.cpp Fri Apr 14 09:38:09 2006 +0000 +++ b/plugins/BeatDetect.cpp Mon May 15 12:07:44 2006 +0000 @@ -67,7 +67,7 @@ string BeatDetector::getMaker() const { - return "Queen Mary, University of London"; + return "Christian Landone and Matthew Davies, Queen Mary, University of London"; } int @@ -161,7 +161,9 @@ size_t BeatDetector::getPreferredStepSize() const { - return size_t(m_inputSampleRate * m_stepSecs + 0.0001); + size_t step = size_t(m_inputSampleRate * m_stepSecs + 0.0001); + std::cerr << "BeatDetector::getPreferredStepSize: input sample rate is " << m_inputSampleRate << ", step size is " << step << std::endl; + return step; } size_t @@ -210,14 +212,25 @@ return FeatureSet(); } - // convert float* to double* - double *tempBuffer = new double[m_d->dfConfig.frameLength]; - for (size_t i = 0; i < m_d->dfConfig.frameLength; ++i) { - tempBuffer[i] = inputBuffers[0][i]; + size_t len = m_d->dfConfig.frameLength / 2; + + double *magnitudes = new double[len]; + double *phases = new double[len]; + + // We only support a single input channel + + for (size_t i = 0; i < len; ++i) { + + magnitudes[i] = sqrt(inputBuffers[0][i*2 ] * inputBuffers[0][i*2 ] + + inputBuffers[0][i*2+1] * inputBuffers[0][i*2+1]); + + phases[i] = atan2(-inputBuffers[0][i*2+1], inputBuffers[0][i*2]); } - double output = m_d->df->process(tempBuffer); - delete[] tempBuffer; + double output = m_d->df->process(magnitudes, phases); + + delete[] magnitudes; + delete[] phases; m_d->dfOutput.push_back(output); diff -r b033ac01902b -r d00c1bad7332 plugins/BeatDetect.h --- a/plugins/BeatDetect.h Fri Apr 14 09:38:09 2006 +0000 +++ b/plugins/BeatDetect.h Mon May 15 12:07:44 2006 +0000 @@ -23,7 +23,7 @@ bool initialise(size_t channels, size_t stepSize, size_t blockSize); void reset(); - InputDomain getInputDomain() const { return TimeDomain; } + InputDomain getInputDomain() const { return FrequencyDomain; } std::string getName() const; std::string getDescription() const; diff -r b033ac01902b -r d00c1bad7332 plugins/TonalChangeDetect.cpp --- a/plugins/TonalChangeDetect.cpp Fri Apr 14 09:38:09 2006 +0000 +++ b/plugins/TonalChangeDetect.cpp Mon May 15 12:07:44 2006 +0000 @@ -81,7 +81,7 @@ std::string TonalChangeDetect::getMaker() const { - return "Martin Gasser"; + return "Martin Gasser and Christopher Harte, Queen Mary, University of London"; } int TonalChangeDetect::getPluginVersion() const