changeset 36:937432fc2898

Add output for un-filled (pre-interpolation) beats
author Chris Cannam
date Thu, 16 Jan 2014 12:19:05 +0000
parents 1d750999a9db
children 1f175ae200a6
files BeatRootProcessor.cpp BeatRootProcessor.h BeatRootVampPlugin.cpp BeatTracker.cpp BeatTracker.h
diffstat 5 files changed, 28 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/BeatRootProcessor.cpp	Fri Dec 06 15:58:54 2013 +0000
+++ b/BeatRootProcessor.cpp	Thu Jan 16 12:19:05 2014 +0000
@@ -31,7 +31,7 @@
     
 } // processFrame()
 
-EventList BeatRootProcessor::beatTrack() {
+EventList BeatRootProcessor::beatTrack(EventList *unfilledReturn) {
 
 #ifdef DEBUG_BEATROOT
     std::cerr << "Spectral flux:" << std::endl;
@@ -67,7 +67,7 @@
     std::cerr << "Onsets: " << onsetList.size() << std::endl;
 #endif
 
-    return BeatTracker::beatTrack(agentParameters, onsetList);
+    return BeatTracker::beatTrack(agentParameters, onsetList, unfilledReturn);
 
 } // processFile()
 
--- a/BeatRootProcessor.h	Fri Dec 06 15:58:54 2013 +0000
+++ b/BeatRootProcessor.h	Thu Jan 16 12:19:05 2014 +0000
@@ -118,7 +118,7 @@
 
     /** Tracks beats once all frames have been processed by processFrame
      */
-    EventList beatTrack();
+    EventList beatTrack(EventList *optionalUnfilledBeatReturn);
 
 protected:
     /** Allocates or re-allocates memory for arrays, based on parameter settings */
--- a/BeatRootVampPlugin.cpp	Fri Dec 06 15:58:54 2013 +0000
+++ b/BeatRootVampPlugin.cpp	Thu Jan 16 12:19:05 2014 +0000
@@ -239,6 +239,11 @@
     d.hasDuration = false;
     list.push_back(d);
 
+    d.identifier = "unfilled";
+    d.name = "Un-interpolated beats";
+    d.description = "Locations of detected beats, before agent interpolation occurs";
+    list.push_back(d);
+
     return list;
 }
 
@@ -300,7 +305,8 @@
 BeatRootVampPlugin::FeatureSet
 BeatRootVampPlugin::getRemainingFeatures()
 {
-    EventList el = m_processor->beatTrack();
+    EventList unfilled;
+    EventList el = m_processor->beatTrack(&unfilled);
 
     Feature f;
     f.hasTimestamp = true;
@@ -315,6 +321,12 @@
         fs[0].push_back(f);
     }
 
+    for (EventList::const_iterator i = unfilled.begin(); 
+         i != unfilled.end(); ++i) {
+        f.timestamp = m_origin + Vamp::RealTime::fromSeconds(i->time);
+        fs[1].push_back(f);
+    }
+
     return fs;
 }
 
--- a/BeatTracker.cpp	Fri Dec 06 15:58:54 2013 +0000
+++ b/BeatTracker.cpp	Thu Jan 16 12:19:05 2014 +0000
@@ -16,7 +16,8 @@
 #include "BeatTracker.h"
 
 EventList BeatTracker::beatTrack(AgentParameters params,
-                                 EventList events, EventList beats)
+                                 EventList events, EventList beats,
+                                 EventList *unfilledReturn)
 {
     AgentList agents;
     int count = 0;
@@ -43,6 +44,7 @@
     Agent *best = agents.bestAgent();
     EventList results;
     if (best) {
+        if (unfilledReturn) *unfilledReturn = best->events;
 	best->fillBeats(beatTime);
 	results = best->events;
     }
--- a/BeatTracker.h	Fri Dec 06 15:58:54 2013 +0000
+++ b/BeatTracker.h	Thu Jan 16 12:19:05 2014 +0000
@@ -54,19 +54,25 @@
 
     /** Perform beat tracking.
      *  @param events The onsets or peaks in a feature list
+     *  @param unfilledReturn Pointer to list in which to return 
+     *     un-interpolated beats, or NULL
      *  @return The list of beats, or an empty list if beat tracking fails
      */
-    static EventList beatTrack(AgentParameters params, EventList events) {
-	return beatTrack(params, events, EventList());
+    static EventList beatTrack(AgentParameters params, EventList events,
+                               EventList *unfilledReturn) {
+	return beatTrack(params, events, EventList(), unfilledReturn);
     }
 	
     /** Perform beat tracking.
      *  @param events The onsets or peaks in a feature list
      *  @param beats The initial beats which are given, if any
+     *  @param unfilledReturn Pointer to list in which to return
+     *     un-interpolated beats, or NULL
      *  @return The list of beats, or an empty list if beat tracking fails
      */
     static EventList beatTrack(AgentParameters params,
-                               EventList events, EventList beats);
+                               EventList events, EventList beats,
+                               EventList *unfilledReturn);
 	
 	
     // Various get and set methods