annotate vamp/process.py @ 75:ad08a0fe6673

Split out the module code
author Chris Cannam
date Wed, 21 Jan 2015 11:16:50 +0000
parents vamp/__init__.py@78a4034c3830
children b2afd385586f
rev   line source
Chris@56 1 '''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 2
Chris@56 3 import vampyhost
Chris@75 4 import frames
Chris@75 5 import load
Chris@68 6
Chris@74 7 def process(data, sampleRate, key, parameters = {}, outputs = []):
Chris@68 8 #!!! docstring
Chris@68 9
Chris@75 10 plug, stepSize, blockSize = load.loadAndConfigureFor(data, sampleRate, key, parameters)
Chris@68 11
Chris@64 12 plugOuts = plug.getOutputs()
Chris@68 13 if plugOuts == []:
Chris@68 14 return
Chris@64 15
Chris@64 16 outIndices = dict(zip([o["identifier"] for o in plugOuts],
Chris@64 17 range(0, len(plugOuts)))) # id -> n
Chris@64 18
Chris@64 19 for o in outputs:
Chris@64 20 assert o in outIndices
Chris@64 21
Chris@66 22 if outputs == []:
Chris@67 23 outputs = [plugOuts[0]["identifier"]]
Chris@66 24
Chris@75 25 ff = frames.framesFromArray(data, stepSize, blockSize)
Chris@61 26 fi = 0
Chris@64 27
Chris@71 28 #!!! should we fill in the correct timestamps here?
Chris@71 29
Chris@61 30 for f in ff:
Chris@74 31 results = plug.processBlock(f, vampyhost.frame2RealTime(fi, sampleRate))
Chris@64 32 # results is a dict mapping output number -> list of feature dicts
Chris@66 33 for o in outputs:
Chris@66 34 if outIndices[o] in results:
Chris@66 35 for r in results[outIndices[o]]:
Chris@70 36 yield { o: r }
Chris@61 37 fi = fi + stepSize
Chris@61 38
Chris@66 39 results = plug.getRemainingFeatures()
Chris@66 40 for o in outputs:
Chris@66 41 if outIndices[o] in results:
Chris@66 42 for r in results[outIndices[o]]:
Chris@70 43 yield { o: r }
Chris@66 44
Chris@66 45 plug.unload()
Chris@66 46