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;
 }