Mercurial > hg > constant-q-cpp
changeset 31:01a3e110bf8d
Don't forget top octave in buffer list
author | Chris Cannam <c.cannam@qmul.ac.uk> |
---|---|
date | Tue, 05 Nov 2013 16:58:18 +0000 |
parents | 39dddbb78d8b |
children | ba648b8672bd |
files | cpp-qm-dsp/ConstantQ.cpp cpp-qm-dsp/ConstantQ.h cpp-qm-dsp/test.cpp |
diffstat | 3 files changed, 18 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/cpp-qm-dsp/ConstantQ.cpp Tue Nov 05 16:44:12 2013 +0000 +++ b/cpp-qm-dsp/ConstantQ.cpp Tue Nov 05 16:58:18 2013 +0000 @@ -60,6 +60,11 @@ int sourceRate = pow(2, m_octaves); vector<int> latencies; + + // top octave, no resampling + latencies.push_back(0); + m_decimators.push_back(0); + for (int oct = 1; oct < m_octaves; ++oct) { Resampler *r = new Resampler(sourceRate, sourceRate / pow(2, oct)); latencies.push_back(r->getLatency()); @@ -73,7 +78,7 @@ for (int i = 0; i < latencies.size(); ++i) { m_extraLatencies.push_back(m_totalLatency - latencies[i]); cerr << "extra latency " << i << " = " << m_extraLatencies[i] << endl; - m_octaveBuffers.push_back(new vector<double>(m_extraLatencies[i], 0.0)); + m_buffers.push_back(vector<double>(m_extraLatencies[i], 0.0)); } m_fft = new FFT(m_p.fftSize); @@ -85,9 +90,11 @@ vector<vector<double> > ConstantQ::process(vector<double> td) { + m_buffers[0].insert(m_buffers[0].end(), td.begin(), td.end()); + for (int i = 1; i < m_octaves; ++i) { vector<double> dec = m_decimators[i]->process(td.data(), td.size()); - m_octaveBuffers[i].insert(m_octaveBuffers[i].end(), dec); + m_buffers[i].insert(m_buffers[i].end(), dec.begin(), dec.end()); } //!!! do the work!
--- a/cpp-qm-dsp/ConstantQ.h Tue Nov 05 16:44:12 2013 +0000 +++ b/cpp-qm-dsp/ConstantQ.h Tue Nov 05 16:58:18 2013 +0000 @@ -32,7 +32,7 @@ int m_bigBlockSize; std::vector<Resampler *> m_decimators; - std::vector<std::vector<double> > m_octaveBuffers; + std::vector<std::vector<double> > m_buffers; int m_totalLatency; std::vector<int> m_extraLatencies; // per resampler, to make up to total
--- a/cpp-qm-dsp/test.cpp Tue Nov 05 16:44:12 2013 +0000 +++ b/cpp-qm-dsp/test.cpp Tue Nov 05 16:58:18 2013 +0000 @@ -2,12 +2,20 @@ #include "ConstantQ.h" #include <iostream> +#include <vector> + +using std::vector; +using std::cerr; +using std::endl; int main(int argc, char **argv) { ConstantQ k(48000, 50, 24000, 24); + vector<double> in(1024, 0.0); + vector<vector<double> > out = k.process(in); + cerr << "got " << out.size() << " back" << endl; }