# HG changeset patch # User Chris Cannam # Date 1421864827 0 # Node ID 1a08dd72f4d26d8559eeb2bf1d14dafbb4c11e01 # Parent 7228921e842571dc907607eaae01d69c2101021c Tidy, refactor diff -r 7228921e8425 -r 1a08dd72f4d2 vamp/collect.py --- a/vamp/collect.py Wed Jan 21 15:13:00 2015 +0000 +++ b/vamp/collect.py Wed Jan 21 18:27:07 2015 +0000 @@ -3,6 +3,8 @@ import vampyhost import load import process +import frames + def timestamp_features(sample_rate, step_size, output_desc, features): n = -1 @@ -26,20 +28,29 @@ yield f -def collect(data, sample_rate, key, output, parameters = {}): +def process_and_fill_timestamps(data, sample_rate, key, output, parameters = {}): - plug, step_size, block_size = load.load_and_configure(data, sample_rate, key, parameters) + plugin, step_size, block_size = load.load_and_configure(data, sample_rate, key, parameters) if output == "": - out = plug.get_output(0) + output_desc = plugin.get_output(0) + output = output_desc["identifier"] else: - out = plug.get_output(output) + output_desc = plugin.get_output(output) - plug.unload() + ff = frames.frames_from_array(data, step_size, block_size) + + results = process.process_frames_with_plugin(ff, sample_rate, step_size, plugin, [output]) + + selected = [ r[output] for r in results ] + + stamped = timestamp_features(sample_rate, step_size, output_desc, selected) + + for s in stamped: + yield s + + plugin.unload() - results = process.process(data, sample_rate, key, output, parameters) - - return timestamp_features(sample_rate, step_size, out, results) - - +def collect(data, sample_rate, key, output, parameters = {}): + return process_and_fill_timestamps(data, sample_rate, key, output, parameters) diff -r 7228921e8425 -r 1a08dd72f4d2 vamp/process.py --- 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() -