changeset 46:9c47e5beaebf

Make additional latency at start a multiple of the big blocksize
author Chris Cannam <c.cannam@qmul.ac.uk>
date Fri, 22 Nov 2013 17:56:20 +0000
parents 73152bc3bb26
children 3d6397e43671
files cpp-qm-dsp/ConstantQ.cpp
diffstat 1 files changed, 18 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/cpp-qm-dsp/ConstantQ.cpp	Fri Nov 22 14:47:41 2013 +0000
+++ b/cpp-qm-dsp/ConstantQ.cpp	Fri Nov 22 17:56:20 2013 +0000
@@ -111,9 +111,16 @@
         m_decimators.push_back(r);
     }
 
-    //!!! should be multiple of the kernel fft size?
+    m_bigBlockSize = m_p.fftSize * pow(2, m_octaves) / 2;
+    cerr << "m_bigBlockSize = " << m_bigBlockSize << endl;
+
     int maxLatency = *std::max_element(latencies.begin(), latencies.end());
-    m_totalLatency = MathUtilities::nextPowerOfTwo(maxLatency);
+
+    cerr << "max actual latency = " << maxLatency << endl;
+    
+    m_totalLatency = ceil(double(maxLatency) / m_bigBlockSize) * m_bigBlockSize;
+
+//    m_totalLatency = MathUtilities::nextPowerOfTwo(maxLatency);
     cerr << "total latency = " << m_totalLatency << endl;
         //!!! should also round up so that total latency is a multiple of the big block size
 
@@ -155,7 +162,6 @@
     }
 
     m_fft = new FFTReal(m_p.fftSize);
-    m_bigBlockSize = m_p.fftSize * pow(2, m_octaves) / 2;
 
     cerr << "m_bigBlockSize = " << m_bigBlockSize << " for " << m_octaves << " octaves" << endl;
 }
@@ -248,12 +254,15 @@
 */
     cerr << "getRemainingBlocks: n = " << n << endl;	
 
-    if (n > 0) {
-	vector<double> pad(n, 0.0);
-	return process(pad);
-    } else {
-	return vector<vector<double> > ();
-    }
+    int pad = m_p.fftSize * pow(2, m_octaves-1); // same as padding
+						 // added at start
+
+    pad += n;
+
+    cerr << "pad = " << pad << endl;
+
+    vector<double> zeros(pad, 0.0);
+    return process(zeros);
 }
 
 vector<vector<double> >