diff vamp/process.py @ 89:1a08dd72f4d2

Tidy, refactor
author Chris Cannam
date Wed, 21 Jan 2015 18:27:07 +0000
parents dd56716714e0
children 3e5791890b65
line wrap: on
line diff
--- a/vamp/process.py	Wed Jan 21 15:13:00 2015 +0000
+++ b/vamp/process.py	Wed Jan 21 18:27:07 2015 +0000
@@ -4,70 +4,57 @@
 import frames
 import load
 
-def load_and_query(data, sample_rate, key, parameters):
-    plug, step_size, block_size = load.load_and_configure(data, sample_rate, key, parameters)
-    plug_outs = plug.get_outputs()
-    out_indices = dict([(o["identifier"], o["output_index"]) for o in plug_outs])
-    return plug, step_size, block_size, out_indices
+
+def process_frames_with_plugin(ff, sample_rate, step_size, plugin, outputs):
+
+    out_indices = dict([(id, plugin.get_output(id)["output_index"]) for id in outputs])
+    plugin.reset()
+    fi = 0
+
+    for f in ff:
+        timestamp = vampyhost.frame_to_realtime(fi, sample_rate)
+        results = plugin.process_block(f, timestamp)
+        # results is a dict mapping output number -> list of feature dicts
+        for o in outputs:
+            ix = out_indices[o]
+            if ix in results:
+                for r in results[ix]:
+                    yield { o: r }
+        fi = fi + step_size
+
+    results = plugin.get_remaining_features()
+    for o in outputs:
+        ix = out_indices[o]
+        if ix in results:
+            for r in results[ix]:
+                yield { o: r }
+
+
+def process(data, sample_rate, key, output = "", parameters = {}):
+#!!! docstring
+
+    plugin, step_size, block_size = load.load_and_configure(data, sample_rate, key, parameters)
+
+    if output == "":
+        output = plugin.get_output(0)["identifier"]
+
+    ff = frames.frames_from_array(data, step_size, block_size)
+
+    for r in process_frames_with_plugin(ff, sample_rate, step_size, plugin, [output]):
+        yield r[output]
     
+    plugin.unload()
+
 
 def process_multiple_outputs(data, sample_rate, key, outputs, parameters = {}):
 #!!! docstring
 
-    plug, step_size, block_size, out_indices = load_and_query(data, sample_rate, key, parameters)
-
-    for o in outputs:
-        assert o in out_indices
+    plugin, step_size, block_size = load.load_and_configure(data, sample_rate, key, parameters)
 
     ff = frames.frames_from_array(data, step_size, block_size)
-    fi = 0
 
-    for f in ff:
-        results = plug.process_block(f, vampyhost.frame_to_realtime(fi, sample_rate))
-        # results is a dict mapping output number -> list of feature dicts
-        for o in outputs:
-            outix = out_indices[o]
-            if outix in results:
-                for r in results[outix]:
-                    yield { o: r }
-        fi = fi + step_size
+    for r in process_frames_with_plugin(ff, sample_rate, step_size, plugin, outputs):
+        yield r
 
-    results = plug.get_remaining_features()
-    for o in outputs:
-        outix = out_indices[o]
-        if outix in results:
-            for r in results[outix]:
-                yield { o: r }
+    plugin.unload()
 
-    plug.unload()
-
-def process(data, sample_rate, key, output = "", parameters = {}):
-#!!! docstring
-
-    plug, step_size, block_size = load.load_and_configure(data, sample_rate, key, parameters)
-
-    if output == "":
-        out = plug.get_output(0)
-    else:
-        out = plug.get_output(output)
-
-    outix = out["output_index"]
-    
-    ff = frames.frames_from_array(data, step_size, block_size)
-    fi = 0
-
-    for f in ff:
-        results = plug.process_block(f, vampyhost.frame_to_realtime(fi, sample_rate))
-        # results is a dict mapping output number -> list of feature dicts
-        if outix in results:
-            for r in results[outix]:
-                yield r
-        fi = fi + step_size
-
-    results = plug.get_remaining_features()
-    if outix in results:
-        for r in results[outix]:
-            yield r
-
-    plug.unload()
-