changeset 20:cfff2b6ff0fd

Add timestamp output and frequency-domain version
author Chris Cannam
date Wed, 14 Jan 2015 10:55:32 +0000
parents 534b001d8e8f
children 8984ab4a0213
files VampTestPlugin.cpp VampTestPlugin.h plugins.cpp
diffstat 3 files changed, 52 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- 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;
 }
--- 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<Vamp::RealTime> m_instants;
--- 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<VampTestPlugin> 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;
     }
 }