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