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@76: def loadAndQuery(data, sampleRate, key, parameters): Chris@76: plug, stepSize, blockSize = load.loadAndConfigureFor(data, sampleRate, key, parameters) Chris@80: plugOuts = plug.get_outputs() Chris@76: outIndices = dict(zip([o["identifier"] for o in plugOuts], Chris@76: range(0, len(plugOuts)))) # id -> n Chris@76: return plug, stepSize, blockSize, outIndices Chris@76: Chris@76: Chris@76: def processMultipleOutputs(data, sampleRate, key, outputs, parameters = {}): Chris@68: #!!! docstring Chris@68: Chris@76: plug, stepSize, blockSize, outIndices = loadAndQuery(data, sampleRate, key, parameters) Chris@64: Chris@64: for o in outputs: Chris@64: assert o in outIndices Chris@64: Chris@75: ff = frames.framesFromArray(data, stepSize, blockSize) Chris@61: fi = 0 Chris@64: Chris@61: for f in ff: Chris@80: results = plug.process_block(f, vampyhost.frame_to_realtime(fi, sampleRate)) Chris@64: # results is a dict mapping output number -> list of feature dicts Chris@66: for o in outputs: Chris@76: outix = outIndices[o] Chris@76: if outix in results: Chris@76: for r in results[outix]: Chris@70: yield { o: r } Chris@61: fi = fi + stepSize Chris@61: Chris@80: results = plug.get_remaining_features() Chris@66: for o in outputs: Chris@76: outix = outIndices[o] Chris@76: if outix in results: Chris@76: for r in results[outix]: Chris@70: yield { o: r } Chris@66: Chris@66: plug.unload() Chris@66: Chris@76: def process(data, sampleRate, key, output = "", parameters = {}): Chris@76: #!!! docstring Chris@76: Chris@76: plug, stepSize, blockSize, outIndices = loadAndQuery(data, sampleRate, key, parameters) Chris@76: Chris@76: if output == "": Chris@76: outix = 0 Chris@76: else: Chris@76: assert output in outIndices Chris@76: outix = outIndices[output] Chris@76: Chris@76: ff = frames.framesFromArray(data, stepSize, blockSize) Chris@76: fi = 0 Chris@76: Chris@76: for f in ff: Chris@80: results = plug.process_block(f, vampyhost.frame_to_realtime(fi, sampleRate)) Chris@76: # results is a dict mapping output number -> list of feature dicts Chris@76: if outix in results: Chris@76: for r in results[outix]: Chris@76: yield r Chris@76: fi = fi + stepSize Chris@76: Chris@80: results = plug.get_remaining_features() Chris@76: if outix in results: Chris@76: for r in results[outix]: Chris@76: yield r Chris@76: Chris@76: plug.unload() Chris@76: