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;