changeset 66:f0e2a8421797

Handle getRemainingFeatures as well, and return dict only if >1 output (i.e. treat default case and explicit request of 1 output similarly)
author Chris Cannam
date Wed, 14 Jan 2015 11:55:20 +0000
parents c5106210370e
children 6f6a54963ce8
files test/test_process.py vamp/__init__.py
diffstat 2 files changed, 31 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/test/test_process.py	Wed Jan 14 11:36:02 2015 +0000
+++ b/test/test_process.py	Wed Jan 14 11:55:20 2015 +0000
@@ -3,11 +3,18 @@
 import numpy as np
 
 testPluginKey = "vamp-test-plugin:vamp-test-plugin"
+testPluginKeyFreq = "vamp-test-plugin:vamp-test-plugin-freq"
 
 rate = 44100
 
 def test_process():
     buf = np.zeros(10240)
-    results = vamp.process(buf, rate, testPluginKey)
+    results = vamp.process(buf, rate, testPluginKey, {}, [ "input-timestamp" ])
     print("results = " + str(list(results)))
     return True
+
+def test_process_freq():
+    buf = np.zeros(10240)
+    results = vamp.process(buf, rate, testPluginKeyFreq, {}, [ "input-timestamp" ])
+    print("results = " + str(list(results)))
+    return True
--- a/vamp/__init__.py	Wed Jan 14 11:36:02 2015 +0000
+++ b/vamp/__init__.py	Wed Jan 14 11:55:20 2015 +0000
@@ -38,6 +38,11 @@
     for o in outputs:
         assert o in outIndices
 
+    if outputs == []:
+        outputs = [plugOuts[o]["identifier"]]
+
+    singleOutput = (len(outputs) == 1)
+
     stepSize = plug.getPreferredStepSize()
     blockSize = plug.getPreferredBlockSize()
     if blockSize == 0:
@@ -55,15 +60,24 @@
     for f in ff:
         results = plug.processBlock(f, vampyhost.frame2RealTime(fi, samplerate))
         # results is a dict mapping output number -> list of feature dicts
-        if outputs == []:
-            if 0 in results:
-                for r in results[0]:
-                    yield r
-        else:
-            for o in outputs:
-                if outIndices[o] in results:
-                    for r in results[outIndices[o]]:
+        for o in outputs:
+            if outIndices[o] in results:
+                for r in results[outIndices[o]]:
+                    if singleOutput:
+                        yield r
+                    else:
                         yield { o: r }
         fi = fi + stepSize
 
-    ##!!! now getRemainingFeatures
+    results = plug.getRemainingFeatures()
+    for o in outputs:
+        if outIndices[o] in results:
+            for r in results[outIndices[o]]:
+                if singleOutput:
+                    yield r
+                else:
+                    yield { o: r }
+
+    plug.unload()
+
+