# HG changeset patch # User Chris Cannam # Date 1421232932 0 # Node ID cfff2b6ff0fd73541956f7cf2f9adb0307a526c7 # Parent 534b001d8e8fc91d980b983c733c5b6bfccb6c24 Add timestamp output and frequency-domain version diff -r 534b001d8e8f -r cfff2b6ff0fd VampTestPlugin.cpp --- a/VampTestPlugin.cpp Wed Dec 03 10:40:07 2014 +0000 +++ b/VampTestPlugin.cpp Wed Jan 14 10:55:32 2015 +0000 @@ -10,8 +10,9 @@ using Vamp::RealTime; -VampTestPlugin::VampTestPlugin(float inputSampleRate) : +VampTestPlugin::VampTestPlugin(float inputSampleRate, bool freq) : Plugin(inputSampleRate), + m_frequencyDomain(freq), m_produceOutput(true), m_n(0), m_channels(1), @@ -30,13 +31,21 @@ string VampTestPlugin::getIdentifier() const { - return "vamp-test-plugin"; + if (m_frequencyDomain) { + return "vamp-test-plugin-freq"; + } else { + return "vamp-test-plugin"; + } } string VampTestPlugin::getName() const { - return "Vamp Test Plugin"; + if (m_frequencyDomain) { + return "Vamp Test Plugin (Frequency-Domain Input)"; + } else { + return "Vamp Test Plugin"; + } } string @@ -54,7 +63,7 @@ int VampTestPlugin::getPluginVersion() const { - return 2; + return 3; } string @@ -66,7 +75,7 @@ VampTestPlugin::InputDomain VampTestPlugin::getInputDomain() const { - return TimeDomain; + return m_frequencyDomain ? FrequencyDomain : TimeDomain; } size_t @@ -282,6 +291,19 @@ m_outputNumbers[d.identifier] = n++; list.push_back(d); + d.identifier = "input-timestamp"; + d.name = "Input timestamp"; + d.description = "One-sample-per-step features with one value, containing the time in seconds converted from the timestamp of the corresponding process input block."; + d.unit = "s"; + d.hasFixedBinCount = true; + d.binCount = 1; + d.hasKnownExtents = false; + d.isQuantized = false; + d.sampleType = OutputDescriptor::OneSamplePerStep; + d.hasDuration = false; + m_outputNumbers[d.identifier] = n++; + list.push_back(d); + return list; } @@ -499,6 +521,10 @@ f.values.push_back(sum); } fs[m_outputNumbers["input-summary"]].push_back(f); + + f.values.clear(); + f.values.push_back(float(timestamp / RealTime(1, 0))); + fs[m_outputNumbers["input-timestamp"]].push_back(f); return fs; } diff -r 534b001d8e8f -r cfff2b6ff0fd VampTestPlugin.h --- a/VampTestPlugin.h Wed Dec 03 10:40:07 2014 +0000 +++ b/VampTestPlugin.h Wed Jan 14 10:55:32 2015 +0000 @@ -10,7 +10,7 @@ class VampTestPlugin : public Vamp::Plugin { public: - VampTestPlugin(float inputSampleRate); + VampTestPlugin(float inputSampleRate, bool freq); virtual ~VampTestPlugin(); string getIdentifier() const; @@ -45,6 +45,7 @@ FeatureSet getRemainingFeatures(); protected: + bool m_frequencyDomain; bool m_produceOutput; int m_n; std::vector m_instants; diff -r 534b001d8e8f -r cfff2b6ff0fd plugins.cpp --- a/plugins.cpp Wed Dec 03 10:40:07 2014 +0000 +++ b/plugins.cpp Wed Jan 14 10:55:32 2015 +0000 @@ -5,9 +5,25 @@ #include "VampTestPlugin.h" +class Adapter : public Vamp::PluginAdapterBase +{ +public: + Adapter(bool freq) : + PluginAdapterBase(), + m_freq(freq) { } -static Vamp::PluginAdapter myPluginAdapter; + virtual ~Adapter() { } +protected: + bool m_freq; + + Vamp::Plugin *createPlugin(float inputSampleRate) { + return new VampTestPlugin(inputSampleRate, m_freq); + } +}; + +static Adapter timeAdapter(false); +static Adapter freqAdapter(true); const VampPluginDescriptor * vampGetPluginDescriptor(unsigned int version, unsigned int index) @@ -20,7 +36,8 @@ // library.) switch (index) { - case 0: return myPluginAdapter.getDescriptor(); + case 0: return timeAdapter.getDescriptor(); + case 1: return freqAdapter.getDescriptor(); default: return 0; } }