Mercurial > hg > vampy-host
changeset 94:c3318a95625b
Return step as well
author | Chris Cannam |
---|---|
date | Mon, 02 Feb 2015 16:32:44 +0000 |
parents | 4bed6bf67243 |
children | 3e5791890b65 |
files | test/test_collect.py vamp/collect.py |
diffstat | 2 files changed, 25 insertions(+), 15 deletions(-) [+] |
line wrap: on
line diff
--- a/test/test_collect.py Mon Feb 02 16:08:42 2015 +0000 +++ b/test/test_collect.py Mon Feb 02 16:32:44 2015 +0000 @@ -22,12 +22,13 @@ def test_collect_runs_at_all(): buf = input_data(blocksize * 10) - results = list(vamp.collect(buf, rate, plugin_key, "input-timestamp")) + step, results = vamp.collect(buf, rate, plugin_key, "input-timestamp") assert results != [] def test_collect_one_sample_per_step(): buf = input_data(blocksize * 10) - results = list(vamp.collect(buf, rate, plugin_key, "input-timestamp")) + step, results = vamp.collect(buf, rate, plugin_key, "input-timestamp") + assert abs(float(step) - (1024.0 / rate)) < eps assert len(results) == 10 for i in range(len(results)): # The timestamp should be the frame number of the first frame in the @@ -38,21 +39,23 @@ def test_collect_fixed_sample_rate(): buf = input_data(blocksize * 10) - results = list(vamp.collect(buf, rate, plugin_key, "curve-fsr")) + step, results = vamp.collect(buf, rate, plugin_key, "curve-fsr") + assert abs(float(step) - 0.4) < eps assert len(results) == 10 for i in range(len(results)): assert abs(results[i] - i * 0.1) < eps def test_collect_fixed_sample_rate_2(): buf = input_data(blocksize * 10) - results = list(vamp.collect(buf, rate, plugin_key, "curve-fsr-timed")) + step, results = vamp.collect(buf, rate, plugin_key, "curve-fsr-timed") + assert abs(float(step) - 0.4) < eps assert len(results) == 10 for i in range(len(results)): assert abs(results[i] - i * 0.1) < eps def test_collect_variable_sample_rate(): buf = input_data(blocksize * 10) - results = list(vamp.collect(buf, rate, plugin_key, "curve-vsr")) + results = vamp.collect(buf, rate, plugin_key, "curve-vsr") assert len(results) == 10 i = 0 for r in results:
--- a/vamp/collect.py Mon Feb 02 16:08:42 2015 +0000 +++ b/vamp/collect.py Mon Feb 02 16:32:44 2015 +0000 @@ -7,6 +7,13 @@ import numpy as np +def get_feature_step_time(sample_rate, step_size, output_desc): + if output_desc["sample_type"] == vampyhost.ONE_SAMPLE_PER_STEP: + return vampyhost.frame_to_realtime(step_size, sample_rate) + elif output_desc["sample_type"] == vampyhost.FIXED_SAMPLE_RATE: + return vampyhost.RealTime('seconds', 1.0 / output_desc["sample_rate"]) + else: + return 1 def timestamp_features(sample_rate, step_size, output_desc, features): n = -1 @@ -29,7 +36,6 @@ for f in features: yield f - def fill_timestamps(results, sample_rate, step_size, output_desc): output = output_desc["identifier"] @@ -41,7 +47,6 @@ for s in stamped: yield s - def deduce_shape(output_desc): if output_desc["has_duration"]: return "individual" @@ -51,10 +56,9 @@ return "individual" if output_desc["bin_count"] == 0: return "individual" - if output_desc["bin_count"] > 1: - return "matrix" - return "vector" - + if output_desc["bin_count"] == 1: + return "vector" + return "matrix" def process_and_reshape(data, sample_rate, key, output, parameters = {}): @@ -71,13 +75,16 @@ results = process.process_frames_with_plugin(ff, sample_rate, step_size, plugin, [output]) shape = deduce_shape(output_desc) + out_step = get_feature_step_time(sample_rate, step_size, output_desc) if shape == "vector": - rv = np.array([r[output]["values"][0] for r in results]) + rv = ( out_step, + np.array([r[output]["values"][0] for r in results]) ) elif shape == "matrix": - rv = np.array( - [[r[output]["values"][i] for r in results] - for i in range(0, output_desc["bin_count"]-1)]) + rv = ( out_step, + np.array( + [[r[output]["values"][i] for r in results] + for i in range(0, output_desc["bin_count"])]) ) else: rv = list(fill_timestamps(results, sample_rate, step_size, output_desc))