Mercurial > hg > tipic
changeset 15:368bb5a1b4bf
Don't carry out expensive construction in the Vamp plugin ctor. Add tuning freq parameter (not implemented yet though)
author | Chris Cannam |
---|---|
date | Mon, 17 Aug 2015 15:51:13 +0100 |
parents | 19088c4ba50a |
children | 68fe8789b7ef |
files | src/PitchFilterbank.cpp src/PitchFilterbank.h src/TipicVampPlugin.cpp src/TipicVampPlugin.h |
diffstat | 4 files changed, 45 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- a/src/PitchFilterbank.cpp Mon Aug 17 12:48:49 2015 +0100 +++ b/src/PitchFilterbank.cpp Mon Aug 17 15:51:13 2015 +0100 @@ -23,10 +23,15 @@ class PitchFilterbank::D { public: - D(int sampleRate) : + D(int sampleRate, float tuningFrequency) : m_nfilters(HIGHEST_FILTER_INDEX + 1), - m_sampleRate(sampleRate) + m_sampleRate(sampleRate), + m_tuningFrequency(tuningFrequency) { + //!!! todo: tuning frequency adjustment + // * resample input by a small amount + // * adjust output block timings by a small amount + m_resamplers[882] = new Resampler(sampleRate, 882); m_resamplers[4410] = new Resampler(sampleRate, 4410); m_resamplers[22050] = new Resampler(sampleRate, 22050); @@ -50,6 +55,7 @@ } int getSampleRate() const { return m_sampleRate; } + float getTuningFrequency() const { return m_tuningFrequency; } /// A series of real-valued samples ordered in time. typedef vector<double> RealSequence; @@ -196,6 +202,7 @@ private: int m_nfilters; int m_sampleRate; + float m_tuningFrequency; // This vector is initialised with 88 filter instances. // m_filters[n] (for n from 0 to 87) is for MIDI pitch 21+n, so we @@ -238,8 +245,8 @@ } }; -PitchFilterbank::PitchFilterbank(int sampleRate) : - m_d(new D(sampleRate)) +PitchFilterbank::PitchFilterbank(int sampleRate, float tuningFrequency) : + m_d(new D(sampleRate, tuningFrequency)) { } @@ -252,8 +259,9 @@ PitchFilterbank::reset() { int rate = m_d->getSampleRate(); + float freq = m_d->getTuningFrequency(); delete m_d; - m_d = new D(rate); + m_d = new D(rate, freq); } PitchFilterbank::RealBlock
--- a/src/PitchFilterbank.h Mon Aug 17 12:48:49 2015 +0100 +++ b/src/PitchFilterbank.h Mon Aug 17 15:51:13 2015 +0100 @@ -8,7 +8,7 @@ class PitchFilterbank { public: - PitchFilterbank(int sampleRate); + PitchFilterbank(int sampleRate, float tuningFrequency); ~PitchFilterbank(); /// A series of real-valued samples ordered in time.
--- a/src/TipicVampPlugin.cpp Mon Aug 17 12:48:49 2015 +0100 +++ b/src/TipicVampPlugin.cpp Mon Aug 17 15:51:13 2015 +0100 @@ -10,17 +10,21 @@ using namespace breakfastquay; +static const float defaultTuningFrequency = 440.f; + Tipic::Tipic(float inputSampleRate) : Plugin(inputSampleRate), m_stepSize(0), m_blockSize(0), - m_filterbank(inputSampleRate), + m_tuningFrequency(defaultTuningFrequency), + m_filterbank(0), m_pitchOutputNo(-1) { } Tipic::~Tipic() { + delete m_filterbank; } string @@ -103,18 +107,36 @@ Tipic::getParameterDescriptors() const { ParameterList list; + + ParameterDescriptor desc; + desc.identifier = "tuning"; + desc.name = "Tuning Frequency"; + desc.unit = "Hz"; + desc.description = "Frequency of concert A"; + desc.minValue = 360; + desc.maxValue = 500; + desc.defaultValue = defaultTuningFrequency; + desc.isQuantized = false; + list.push_back(desc); + return list; } float Tipic::getParameter(string identifier) const { + if (identifier == "tuning") { + return m_tuningFrequency; + } return 0; } void Tipic::setParameter(string identifier, float value) { + if (identifier == "tuning") { + m_tuningFrequency = value; + } } Tipic::ProgramList @@ -189,7 +211,10 @@ void Tipic::reset() { - m_filterbank.reset(); + if (!m_filterbank) { + m_filterbank = new PitchFilterbank(m_inputSampleRate, m_tuningFrequency); + } + m_filterbank->reset(); } Tipic::FeatureSet @@ -199,7 +224,7 @@ in.resize(m_blockSize); v_convert(in.data(), inputBuffers[0], m_blockSize); - PitchFilterbank::RealBlock pitchFiltered = m_filterbank.process(in); + PitchFilterbank::RealBlock pitchFiltered = m_filterbank->process(in); FeatureSet fs; addPitchFeatures(fs, pitchFiltered); @@ -209,7 +234,7 @@ Tipic::FeatureSet Tipic::getRemainingFeatures() { - PitchFilterbank::RealBlock pitchFiltered = m_filterbank.getRemainingOutput(); + PitchFilterbank::RealBlock pitchFiltered = m_filterbank->getRemainingOutput(); FeatureSet fs; addPitchFeatures(fs, pitchFiltered);
--- a/src/TipicVampPlugin.h Mon Aug 17 12:48:49 2015 +0100 +++ b/src/TipicVampPlugin.h Mon Aug 17 15:51:13 2015 +0100 @@ -47,7 +47,8 @@ protected: int m_stepSize; int m_blockSize; - PitchFilterbank m_filterbank; + float m_tuningFrequency; + PitchFilterbank *m_filterbank; mutable int m_pitchOutputNo; void addPitchFeatures(FeatureSet &, const PitchFilterbank::RealBlock &);