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 load Chris@75: import frames Chris@66: Chris@74: def selectFeaturesForOutput(output, features): Chris@74: for ff in features: Chris@74: if output in ff: Chris@74: for f in ff[output]: Chris@74: yield f Chris@74: Chris@72: ##!!! Chris@72: ## Chris@72: ## We could also devise a generator for the timestamps that need Chris@72: ## filling: provide the output type & rate and get back a timestamp Chris@72: ## generator Chris@72: ## Chris@72: ##!!! Chris@72: Chris@74: # def timestampFeatures(sampleRate, stepSize, outputDescriptor, features): Chris@72: Chris@74: # n = 0 Chris@71: Chris@77: # if outputDict.sampleType == vampyhost.ONE_SAMPLE_PER_STEP: Chris@74: # for True: Chris@74: # yield vampyhost.frame2RealTime(n * stepSize, sampleRate) Chris@74: # n = n + 1 Chris@74: Chris@77: # elif outputDict.sampleType == vampyhost.FIXED_SAMPLE_RATE: Chris@74: # for True: Chris@74: Chris@74: Chris@74: Chris@74: def collect(data, sampleRate, key, parameters = {}, output = ""): Chris@74: Chris@75: plug, stepSize, blockSize = load.loadAndConfigureFor(data, sampleRate, key, parameters) Chris@71: Chris@71: plugOuts = plug.getOutputs() Chris@71: if plugOuts == []: Chris@71: return Chris@71: Chris@71: outNo = -1 Chris@71: for n, o in zip(range(0, len(plugOuts)), plugOuts): Chris@71: if output == "" or o["identifier"] == output: Chris@71: outNo = n Chris@71: break Chris@71: Chris@71: assert outNo >= 0 #!!! todo proper error reporting Chris@71: Chris@75: ff = frames.framesFromArray(data, stepSize, blockSize) Chris@71: fi = 0 Chris@71: Chris@71: #!!! todo! Chris@71: Chris@71: plug.unload() Chris@71: Chris@71: return {} Chris@71: Chris@71: