changeset 18:207bbdf74ee3

Expose a number of MATCH parameters through the plugin
author Chris Cannam
date Fri, 10 Oct 2014 14:22:53 +0100
parents 27f418d77095
children a5e0633d5238
files MatchVampPlugin.cpp
diffstat 1 files changed, 82 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/MatchVampPlugin.cpp	Fri Oct 10 14:01:43 2014 +0100
+++ b/MatchVampPlugin.cpp	Fri Oct 10 14:22:53 2014 +0100
@@ -140,6 +140,7 @@
     ParameterList list;
 
     ParameterDescriptor desc;
+
     desc.identifier = "serialise";
     desc.name = "Serialise Plugin Invocations";
     desc.description = "Reduce potential memory load at the expense of multiprocessor performance by serialising multi-threaded plugin runs";
@@ -150,6 +151,66 @@
     desc.quantizeStep = 1;
     list.push_back(desc);
 
+    desc.identifier = "framenorm";
+    desc.name = "Frame Normalisation";
+    desc.description = "Type of normalisation to use for frequency-domain audio features";
+    desc.minValue = 0;
+    desc.maxValue = 2;
+    desc.defaultValue = (int)m_defaultParams.frameNorm;
+    desc.isQuantized = true;
+    desc.quantizeStep = 1;
+    desc.valueNames.clear();
+    desc.valueNames.push_back("None");
+    desc.valueNames.push_back("Sum To 1");
+    desc.valueNames.push_back("Long-Term Average");
+    list.push_back(desc);
+    desc.valueNames.clear();
+
+    desc.identifier = "distnorm";
+    desc.name = "Distance Normalisation";
+    desc.description = "Type of normalisation to use for distance metric";
+    desc.minValue = 0;
+    desc.maxValue = 2;
+    desc.defaultValue = (int)m_defaultParams.distanceNorm;
+    desc.isQuantized = true;
+    desc.quantizeStep = 1;
+    desc.valueNames.clear();
+    desc.valueNames.push_back("None");
+    desc.valueNames.push_back("Sum of Frames");
+    desc.valueNames.push_back("Log Sum of Frames");
+    list.push_back(desc);
+    desc.valueNames.clear();
+
+    desc.identifier = "usespecdiff";
+    desc.name = "Use Spectral Difference";
+    desc.description = "Whether to use half-wave rectified spectral difference instead of straight spectrum";
+    desc.minValue = 0;
+    desc.maxValue = 1;
+    desc.defaultValue = m_defaultParams.useSpectralDifference ? 1 : 0;
+    desc.isQuantized = true;
+    desc.quantizeStep = 1;
+    list.push_back(desc);
+
+    desc.identifier = "usechroma";
+    desc.name = "Use Chroma Frequency Map";
+    desc.description = "Whether to use a chroma frequency map instead of the default warped spectrogram";
+    desc.minValue = 0;
+    desc.maxValue = 1;
+    desc.defaultValue = m_defaultParams.useChromaFrequencyMap ? 1 : 0;
+    desc.isQuantized = true;
+    desc.quantizeStep = 1;
+    list.push_back(desc);
+
+    desc.identifier = "maxruncount";
+    desc.name = "Max Run Count";
+    desc.description = "Limit of number of frames that will be accepted from one source without a frame from the other source being accepted";
+    desc.minValue = 1;
+    desc.maxValue = 10;
+    desc.defaultValue = m_defaultParams.maxRunCount;
+    desc.isQuantized = true;
+    desc.quantizeStep = 1;
+    list.push_back(desc);
+
     return list;
 }
 
@@ -158,7 +219,18 @@
 {
     if (name == "serialise") {
         return m_serialise ? 1.0 : 0.0; 
+    } else if (name == "framenorm") {
+        return (int)m_params.frameNorm;
+    } else if (name == "distnorm") {
+        return (int)m_params.distanceNorm;
+    } else if (name == "usespecdiff") {
+        return m_params.useSpectralDifference ? 1.0 : 0.0;
+    } else if (name == "usechroma") {
+        return m_params.useChromaFrequencyMap ? 1.0 : 0.0;
+    } else if (name == "maxruncount") {
+        return m_params.maxRunCount;
     }
+    
     return 0.0;
 }
 
@@ -167,7 +239,16 @@
 {
     if (name == "serialise") {
         m_serialise = (value > 0.5);
-//        std::cerr << "MatchVampPlugin::setParameter: set serialise to " << m_serialise << std::endl;
+    } else if (name == "framenorm") {
+        m_params.frameNorm = (Matcher::FrameNormalisation)(int(value + 0.1));
+    } else if (name == "distnorm") {
+        m_params.distanceNorm = (Matcher::DistanceNormalisation)(int(value + 0.1));
+    } else if (name == "usespecdiff") {
+        m_params.useSpectralDifference = (value > 0.5);
+    } else if (name == "usechroma") {
+        m_params.useChromaFrequencyMap = (value > 0.5);
+    } else if (name == "maxruncount") {
+        m_params.maxRunCount = int(value + 0.1);
     }
 }