Mercurial > hg > constant-q-cpp
changeset 178:2420733abeb6
Merge
author | Chris Cannam <c.cannam@qmul.ac.uk> |
---|---|
date | Fri, 17 Jul 2015 15:49:42 +0100 |
parents | 5ed6e970541b (current diff) 7d4f4c51a4ad (diff) |
children | 433e3aac9e52 0d81daeca8d6 |
files | |
diffstat | 4 files changed, 30 insertions(+), 17 deletions(-) [+] |
line wrap: on
line diff
--- a/Makefile.linux Fri Jul 17 15:48:01 2015 +0100 +++ b/Makefile.linux Fri Jul 17 15:49:42 2015 +0100 @@ -2,7 +2,7 @@ CFLAGS := -Wall -O3 -ffast-math -msse -msse2 -mfpmath=sse -fPIC -I../vamp-plugin-sdk/ #CFLAGS := -g -fPIC -I../vamp-plugin-sdk -CXXFLAGS := $(CFLAGS) +CXXFLAGS := $(CFLAGS) -std=c++11 PLUGIN_LDFLAGS := -shared -Wl,--version-script=vamp/vamp-plugin.map
--- a/cq/CQParameters.h Fri Jul 17 15:48:01 2015 +0100 +++ b/cq/CQParameters.h Fri Jul 17 15:49:42 2015 +0100 @@ -48,6 +48,11 @@ Hann, }; + enum DecimatorType { + BetterDecimator, + FasterDecimator + }; + /** * Construct a set of parameters with the given input signal * sample rate, frequency range, and number of bins per @@ -63,10 +68,11 @@ minFrequency(_minFrequency), maxFrequency(_maxFrequency), binsPerOctave(_binsPerOctave), - q(1.0), // Q scaling factor - atomHopFactor(0.25), // hop size of shortest temporal atom - threshold(0.0005), // sparsity threshold for resulting kernel - window(SqrtBlackmanHarris) // window shape + q(1.0), // Q scaling factor + atomHopFactor(0.25), // hop size of shortest temporal atom + threshold(0.0005), // sparsity threshold for resulting kernel + window(SqrtBlackmanHarris), // window shape + decimator(BetterDecimator) // decimator quality setting { } /** @@ -114,6 +120,11 @@ * Window shape to use for the Constant-Q kernel atoms. */ WindowType window; + + /** + * Quality setting for the sample rate decimator. + */ + DecimatorType decimator; }; #endif
--- a/src/ConstantQ.cpp Fri Jul 17 15:48:01 2015 +0100 +++ b/src/ConstantQ.cpp Fri Jul 17 15:49:42 2015 +0100 @@ -122,8 +122,15 @@ int factor = pow(2, i); - Resampler *r = new Resampler - (sourceRate, sourceRate / factor, 50, 0.05); + Resampler *r; + + if (m_inparams.decimator == CQParameters::BetterDecimator) { + r = new Resampler + (sourceRate, sourceRate / factor, 50, 0.05); + } else { + r = new Resampler + (sourceRate, sourceRate / factor, 25, 0.3); + } #ifdef DEBUG_CQ cerr << "forward: octave " << i << ": resample from " << sourceRate << " to " << sourceRate / factor << endl; @@ -337,15 +344,12 @@ m_fft->forward(m_buffers[octave].data(), ro.data(), io.data()); - RealSequence shifted; - shifted.insert(shifted.end(), - m_buffers[octave].begin() + m_p.fftHop, - m_buffers[octave].end()); - m_buffers[octave] = shifted; + m_buffers[octave] = RealSequence(m_buffers[octave].begin() + m_p.fftHop, + m_buffers[octave].end()); - ComplexSequence cv; + ComplexSequence cv(m_p.fftSize); for (int i = 0; i < m_p.fftSize; ++i) { - cv.push_back(Complex(ro[i], io[i])); + cv[i] = Complex(ro[i], io[i]); } ComplexSequence cqrowvec = m_kernel->processForward(cv);
--- a/src/dsp/Resampler.cpp Fri Jul 17 15:48:01 2015 +0100 +++ b/src/dsp/Resampler.cpp Fri Jul 17 15:49:42 2015 +0100 @@ -318,9 +318,7 @@ int Resampler::process(const double *src, double *dst, int n) { - for (int i = 0; i < n; ++i) { - m_buffer.push_back(src[i]); - } + m_buffer.insert(m_buffer.end(), src, src + n); int maxout = int(ceil(double(n) * m_targetRate / m_sourceRate)); int outidx = 0;