changeset 98:bdd8158d401f adaptive_diagonals

Add feature distance and feature magnitude outputs (for experiments)
author Chris Cannam
date Thu, 27 Nov 2014 18:01:36 +0000
parents 6b91e40b2c04
children 17977f1455b9 7537bbac1e7e
files src/MatchVampPlugin.cpp src/MatchVampPlugin.h
diffstat 2 files changed, 39 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/MatchVampPlugin.cpp	Thu Nov 27 16:50:14 2014 +0000
+++ b/src/MatchVampPlugin.cpp	Thu Nov 27 18:01:36 2014 +0000
@@ -484,6 +484,32 @@
     m_bFeaturesOutNo = list.size();
     list.push_back(desc);
 
+    desc.identifier = "feature_distance";
+    desc.name = "Feature Distance";
+    desc.description = "Value of distance metric between features from performances A and B at each point-in-A along the chosen alignment path";
+    desc.unit = "";
+    desc.hasFixedBinCount = true;
+    desc.binCount = 1;
+    desc.hasKnownExtents = false;
+    desc.isQuantized = false;
+    desc.sampleType = OutputDescriptor::VariableSampleRate;
+    desc.sampleRate = outRate;
+    m_distOutNo = list.size();
+    list.push_back(desc);
+
+    desc.identifier = "feature_mag_a";
+    desc.name = "Feature Magnitude A";
+    desc.description = "Magnitude of feature vector for performance A";
+    desc.unit = "";
+    desc.hasFixedBinCount = true;
+    desc.binCount = 1;
+    desc.hasKnownExtents = false;
+    desc.isQuantized = false;
+    desc.sampleType = OutputDescriptor::FixedSampleRate;
+    desc.sampleRate = outRate;
+    m_featureMagOutNo = list.size();
+    list.push_back(desc);
+
     return list;
 }
 
@@ -532,12 +558,19 @@
     f.hasTimestamp = false;
 
     f.values.clear();
+    double mag = 0.0;
     for (int j = 0; j < (int)f1.size(); ++j) {
         f.values.push_back(float(f1[j]));
+        mag += f1[j] * f1[j];
     }
+    mag = sqrt(mag);
     returnFeatures[m_aFeaturesOutNo].push_back(f);
 
     f.values.clear();
+    f.values.push_back(mag);
+    returnFeatures[m_featureMagOutNo].push_back(f);
+
+    f.values.clear();
     for (int j = 0; j < (int)f2.size(); ++j) {
         f.values.push_back(float(f2[j]));
     }
@@ -597,6 +630,10 @@
             feature.values.push_back(float(diff.sec + diff.msec()/1000.0));
             returnFeatures[m_abDivOutNo].push_back(feature);
 
+            feature.values.clear();
+            feature.values.push_back(m_pm1->getDistance(y, x));
+            returnFeatures[m_distOutNo].push_back(feature);
+            
             if (i > 0) {
                 int lookback = 100; //!!! arbitrary
                 if (lookback > i) lookback = i;
--- a/src/MatchVampPlugin.h	Thu Nov 27 16:50:14 2014 +0000
+++ b/src/MatchVampPlugin.h	Thu Nov 27 18:01:36 2014 +0000
@@ -101,6 +101,8 @@
     mutable int m_abRatioOutNo;
     mutable int m_aFeaturesOutNo;
     mutable int m_bFeaturesOutNo;
+    mutable int m_distOutNo;
+    mutable int m_featureMagOutNo;
 
 #ifdef _WIN32
     static HANDLE m_serialisingMutex;