Mercurial > hg > constant-q-cpp
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> >