changeset 171:a12642e36167

Expose a few more parameters, adjust some names for better consistency with spectrogram class
author Chris Cannam <c.cannam@qmul.ac.uk>
date Thu, 05 Feb 2015 09:52:49 +0000
parents b96b0addbca7
children 76b70af3a563
files cq/Chromagram.h src/Chromagram.cpp vamp/CQChromaVamp.cpp
diffstat 3 files changed, 34 insertions(+), 16 deletions(-) [+]
line wrap: on
line diff
--- a/cq/Chromagram.h	Wed Feb 04 15:09:06 2015 +0000
+++ b/cq/Chromagram.h	Thu Feb 05 09:52:49 2015 +0000
@@ -33,6 +33,7 @@
 #define CQCHROMAGRAM_H
 
 #include "CQBase.h"
+#include "CQParameters.h"
 
 class CQSpectrogram;
 
@@ -43,14 +44,25 @@
 	Parameters(double sr) :
 	    sampleRate(sr),
 	    lowestOctave(0),
-	    octaves(7),
-	    bpo(36),
-	    tuningFrequency(440.) { }
+	    octaveCount(7),
+	    binsPerOctave(36),
+	    tuningFrequency(440.),
+            q(1.0),                    // Q scaling factor
+            atomHopFactor(0.25),       // hop size of shortest temporal atom
+            threshold(0.0005),         // sparsity threshold for resulting kernel
+            window(CQParameters::SqrtBlackmanHarris) // window shape
+        { }
+        
 	double sampleRate;
 	int lowestOctave;
-	int octaves;
-	int bpo;
+	int octaveCount;
+	int binsPerOctave;
+
 	double tuningFrequency;
+        double q;
+        double atomHopFactor;
+        double threshold;
+        CQParameters::WindowType window;
     };
 
     Chromagram(Parameters params);
--- a/src/Chromagram.cpp	Wed Feb 04 15:09:06 2015 +0000
+++ b/src/Chromagram.cpp	Thu Feb 05 09:52:49 2015 +0000
@@ -41,7 +41,7 @@
     m_params(params),
     m_cq(0)
 {
-    int highestOctave = m_params.lowestOctave + m_params.octaves - 1;
+    int highestOctave = m_params.lowestOctave + m_params.octaveCount - 1;
 
     int midiPitchLimit = (1 + highestOctave) * 12 + 12; // C just beyond top
     double midiPitchLimitFreq = Pitch::getFrequencyForPitch
@@ -50,17 +50,22 @@
     // Max frequency is frequency of the MIDI pitch just beyond the
     // top octave range (midiPitchLimit) minus one bin, then minus
     // floor(bins per semitone / 2)
-    int bps = m_params.bpo / 12;
+    int bps = m_params.binsPerOctave / 12;
     m_maxFrequency = midiPitchLimitFreq /
-        pow(2, (1.0 + floor(bps/2)) / m_params.bpo);
+        pow(2, (1.0 + floor(bps/2)) / m_params.binsPerOctave);
 
     // Min frequency is frequency of midiPitchLimit lowered by the
-    // appropriate number of octaves.
+    // appropriate number of octaveCount.
     m_minFrequency = midiPitchLimitFreq /
-        pow(2, m_params.octaves + 1);
+        pow(2, m_params.octaveCount + 1);
 
     CQParameters p
-        (params.sampleRate, m_minFrequency, m_maxFrequency, params.bpo);
+        (params.sampleRate, m_minFrequency, m_maxFrequency, params.binsPerOctave);
+
+    p.q = params.q;
+    p.atomHopFactor = params.atomHopFactor;
+    p.threshold = params.threshold;
+    p.window = params.window;
     
     m_cq = new CQSpectrogram(p, CQSpectrogram::InterpolateLinear);
 }
@@ -95,7 +100,7 @@
         "C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B"
     };
 
-    float freq = m_cq->getBinFrequency(m_params.bpo - bin - 1);
+    float freq = m_cq->getBinFrequency(m_params.binsPerOctave - bin - 1);
     int note = Pitch::getPitchForFrequency(freq, 0, m_params.tuningFrequency);
     float nearestFreq =
         Pitch::getFrequencyForPitch(note, 0, m_params.tuningFrequency);
@@ -130,14 +135,15 @@
 
     for (int i = 0; i < width; ++i) {
 
-        CQBase::RealSequence column(m_params.bpo, 0.);
+        CQBase::RealSequence column(m_params.binsPerOctave, 0.);
 
         // fold and invert to put low frequencies at the start
 
         int thisHeight = cqout[i].size();
 
 	for (int j = 0; j < thisHeight; ++j) {
-	    column[m_params.bpo - (j % m_params.bpo) - 1] += cqout[i][j];
+	    column[m_params.binsPerOctave - (j % m_params.binsPerOctave) - 1]
+                += cqout[i][j];
 	}
 
         chroma.push_back(column);
--- a/vamp/CQChromaVamp.cpp	Wed Feb 04 15:09:06 2015 +0000
+++ b/vamp/CQChromaVamp.cpp	Thu Feb 05 09:52:49 2015 +0000
@@ -218,8 +218,8 @@
     delete m_chroma;
     Chromagram::Parameters p(m_inputSampleRate);
     p.lowestOctave = m_lowestOctave;
-    p.octaves = m_octaveCount;
-    p.bpo = m_bpo;
+    p.octaveCount = m_octaveCount;
+    p.binsPerOctave = m_bpo;
     p.tuningFrequency = m_tuningFrequency;
 
     m_chroma = new Chromagram(p);