diff plugins/BeatTrack.cpp @ 30:ff5a09e45209

* add support for adaptive whitening
author Chris Cannam <c.cannam@qmul.ac.uk>
date Thu, 09 Aug 2007 16:35:37 +0000
parents 56fe3bd9de6e
children 5cd7e3069553
line wrap: on
line diff
--- a/plugins/BeatTrack.cpp	Fri Jun 01 15:07:55 2007 +0000
+++ b/plugins/BeatTrack.cpp	Thu Aug 09 16:35:37 2007 +0000
@@ -44,7 +44,8 @@
 BeatTracker::BeatTracker(float inputSampleRate) :
     Vamp::Plugin(inputSampleRate),
     m_d(0),
-    m_dfType(DF_COMPLEXSD)
+    m_dfType(DF_COMPLEXSD),
+    m_whiten(false)
 {
 }
 
@@ -110,6 +111,18 @@
     desc.valueNames.push_back("Broadband Energy Rise");
     list.push_back(desc);
 
+    desc.identifier = "whiten";
+    desc.name = "Adaptive Whitening";
+    desc.description = "Normalize frequency bin magnitudes relative to recent peak levels";
+    desc.minValue = 0;
+    desc.maxValue = 1;
+    desc.defaultValue = 0;
+    desc.isQuantized = true;
+    desc.quantizeStep = 1;
+    desc.unit = "";
+    desc.valueNames.clear();
+    list.push_back(desc);
+
     return list;
 }
 
@@ -123,7 +136,10 @@
         case DF_PHASEDEV: return 2;
         default: case DF_COMPLEXSD: return 3;
         case DF_BROADBAND: return 4;
+        case DF_POWER: return 5;
         }
+    } else if (name == "whiten") {
+        return m_whiten ? 1.0 : 0.0; 
     }
     return 0.0;
 }
@@ -138,7 +154,10 @@
         case 2: m_dfType = DF_PHASEDEV; break;
         default: case 3: m_dfType = DF_COMPLEXSD; break;
         case 4: m_dfType = DF_BROADBAND; break;
+        case 5: m_dfType = DF_POWER; break;
         }
+    } else if (name == "whiten") {
+        m_whiten = (value > 0.5);
     }
 }
 
@@ -175,6 +194,9 @@
     dfConfig.stepSize = stepSize;
     dfConfig.frameLength = blockSize;
     dfConfig.dbRise = 3;
+    dfConfig.adaptiveWhitening = m_whiten;
+    dfConfig.whiteningRelaxCoeff = -1;
+    dfConfig.whiteningFloor = -1;
     
     m_d = new BeatTrackerData(dfConfig);
     return true;