Mercurial > hg > constant-q-cpp
changeset 190:ba2a5f0ae66a
Expose overlap and decimator option
author | Chris Cannam <c.cannam@qmul.ac.uk> |
---|---|
date | Thu, 30 Mar 2017 13:20:38 +0100 |
parents | c94c81d9a5aa |
children | 0066cef382ee |
files | vamp/CQVamp.cpp vamp/CQVamp.h |
diffstat | 2 files changed, 42 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/vamp/CQVamp.cpp Fri Mar 10 18:40:34 2017 +0000 +++ b/vamp/CQVamp.cpp Thu Mar 30 13:20:38 2017 +0100 @@ -61,6 +61,8 @@ m_maxMIDIPitch(defaultMaxMIDIPitch), m_tuningFrequency(defaultTuningFrequency), m_bpo(defaultBPO), + m_atomOverlap(4), + m_useDraftDecimator(false), m_interpolation(CQSpectrogram::InterpolateLinear), m_cq(0), m_maxFrequency(defaultMaxFrequency), @@ -114,13 +116,13 @@ int CQVamp::getPluginVersion() const { - return 2; + return 3; } string CQVamp::getCopyright() const { - return "Plugin by Chris Cannam. Method by Christian Schörkhuber and Anssi Klapuri. Copyright (c) 2015 QMUL. BSD/MIT licence."; + return "Plugin by Chris Cannam. Method by Christian Schörkhuber and Anssi Klapuri. Copyright (c) 2015-2017 QMUL. BSD/MIT licence."; } CQVamp::ParameterList @@ -198,6 +200,28 @@ desc.quantizeStep = 1; list.push_back(desc); + desc.identifier = "atomoverlap"; + desc.name = "Overlap"; + desc.unit = ""; + desc.description = "Overlap factor for CQ kernel atoms (higher = more output values per unit time)"; + desc.minValue = 1; + desc.maxValue = 8; + desc.defaultValue = 4; + desc.isQuantized = true; + desc.quantizeStep = 1; + list.push_back(desc); + + desc.identifier = "draftdecimator"; + desc.name = "Use Draft Decimator"; + desc.unit = ""; + desc.description = "Trade off some decimator quality for faster speed"; + desc.minValue = 0; + desc.maxValue = 1; + desc.defaultValue = 0; + desc.isQuantized = true; + desc.quantizeStep = 1; + list.push_back(desc); + desc.identifier = "interpolation"; desc.name = "Interpolation"; desc.unit = ""; @@ -239,6 +263,12 @@ if (param == "maxfreq" && !m_midiPitchParameters) { return m_maxFrequency; } + if (param == "atomoverlap") { + return m_atomOverlap; + } + if (param == "draftdecimator") { + return m_useDraftDecimator ? 1.f : 0.f; + } std::cerr << "WARNING: CQVamp::getParameter: unknown parameter \"" << param << "\"" << std::endl; return 0.0; @@ -261,6 +291,10 @@ m_minFrequency = value; } else if (param == "maxfreq" && !m_midiPitchParameters) { m_maxFrequency = value; + } else if (param == "atomoverlap") { + m_atomOverlap = int(value + 0.5f); + } else if (param == "draftdecimator") { + m_useDraftDecimator = (value > 0.5f); } else { std::cerr << "WARNING: CQVamp::setParameter: unknown parameter \"" << param << "\"" << std::endl; @@ -303,6 +337,10 @@ { delete m_cq; CQParameters p(m_inputSampleRate, m_minFrequency, m_maxFrequency, m_bpo); + p.atomHopFactor = 1.0 / double(m_atomOverlap); + p.decimator = (m_useDraftDecimator ? + CQParameters::FasterDecimator : + CQParameters::BetterDecimator); m_cq = new CQSpectrogram(p, m_interpolation); m_haveStartTime = false; m_columnCount = 0;