# HG changeset patch # User Chris Cannam # Date 1385142980 0 # Node ID 9c47e5beaebf18b54c70e5c79e4a0b25e9161a4a # Parent 73152bc3bb2660da9ba0243d9d6fcf309e5e84f9 Make additional latency at start a multiple of the big blocksize diff -r 73152bc3bb26 -r 9c47e5beaebf cpp-qm-dsp/ConstantQ.cpp --- 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 pad(n, 0.0); - return process(pad); - } else { - return vector > (); - } + int pad = m_p.fftSize * pow(2, m_octaves-1); // same as padding + // added at start + + pad += n; + + cerr << "pad = " << pad << endl; + + vector zeros(pad, 0.0); + return process(zeros); } vector >