Chris@56: '''A high-level interface to the vampyhost extension module, for quickly and easily running Vamp audio analysis plugins on audio files and buffers.''' Chris@56: Chris@56: import vampyhost Chris@75: import frames Chris@75: import load Chris@68: Chris@89: Chris@89: def process_frames_with_plugin(ff, sample_rate, step_size, plugin, outputs): Chris@89: Chris@89: out_indices = dict([(id, plugin.get_output(id)["output_index"]) for id in outputs]) Chris@89: plugin.reset() Chris@89: fi = 0 Chris@89: Chris@89: for f in ff: Chris@89: timestamp = vampyhost.frame_to_realtime(fi, sample_rate) Chris@89: results = plugin.process_block(f, timestamp) Chris@89: # results is a dict mapping output number -> list of feature dicts Chris@89: for o in outputs: Chris@89: ix = out_indices[o] Chris@89: if ix in results: Chris@89: for r in results[ix]: Chris@89: yield { o: r } Chris@89: fi = fi + step_size Chris@89: Chris@89: results = plugin.get_remaining_features() Chris@89: for o in outputs: Chris@89: ix = out_indices[o] Chris@89: if ix in results: Chris@89: for r in results[ix]: Chris@89: yield { o: r } Chris@89: Chris@89: Chris@89: def process(data, sample_rate, key, output = "", parameters = {}): Chris@89: #!!! docstring Chris@89: Chris@89: plugin, step_size, block_size = load.load_and_configure(data, sample_rate, key, parameters) Chris@89: Chris@89: if output == "": Chris@89: output = plugin.get_output(0)["identifier"] Chris@89: Chris@89: ff = frames.frames_from_array(data, step_size, block_size) Chris@89: Chris@89: for r in process_frames_with_plugin(ff, sample_rate, step_size, plugin, [output]): Chris@89: yield r[output] Chris@76: Chris@89: plugin.unload() Chris@89: Chris@76: Chris@84: def process_multiple_outputs(data, sample_rate, key, outputs, parameters = {}): Chris@68: #!!! docstring Chris@68: Chris@89: plugin, step_size, block_size = load.load_and_configure(data, sample_rate, key, parameters) Chris@64: Chris@84: ff = frames.frames_from_array(data, step_size, block_size) Chris@64: Chris@89: for r in process_frames_with_plugin(ff, sample_rate, step_size, plugin, outputs): Chris@89: yield r Chris@61: Chris@89: plugin.unload() Chris@66: