annotate vamp/process.py @ 89:1a08dd72f4d2

Tidy, refactor
author Chris Cannam
date Wed, 21 Jan 2015 18:27:07 +0000
parents dd56716714e0
children 3e5791890b65
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@89 7
Chris@89 8 def process_frames_with_plugin(ff, sample_rate, step_size, plugin, outputs):
Chris@89 9
Chris@89 10 out_indices = dict([(id, plugin.get_output(id)["output_index"]) for id in outputs])
Chris@89 11 plugin.reset()
Chris@89 12 fi = 0
Chris@89 13
Chris@89 14 for f in ff:
Chris@89 15 timestamp = vampyhost.frame_to_realtime(fi, sample_rate)
Chris@89 16 results = plugin.process_block(f, timestamp)
Chris@89 17 # results is a dict mapping output number -> list of feature dicts
Chris@89 18 for o in outputs:
Chris@89 19 ix = out_indices[o]
Chris@89 20 if ix in results:
Chris@89 21 for r in results[ix]:
Chris@89 22 yield { o: r }
Chris@89 23 fi = fi + step_size
Chris@89 24
Chris@89 25 results = plugin.get_remaining_features()
Chris@89 26 for o in outputs:
Chris@89 27 ix = out_indices[o]
Chris@89 28 if ix in results:
Chris@89 29 for r in results[ix]:
Chris@89 30 yield { o: r }
Chris@89 31
Chris@89 32
Chris@89 33 def process(data, sample_rate, key, output = "", parameters = {}):
Chris@89 34 #!!! docstring
Chris@89 35
Chris@89 36 plugin, step_size, block_size = load.load_and_configure(data, sample_rate, key, parameters)
Chris@89 37
Chris@89 38 if output == "":
Chris@89 39 output = plugin.get_output(0)["identifier"]
Chris@89 40
Chris@89 41 ff = frames.frames_from_array(data, step_size, block_size)
Chris@89 42
Chris@89 43 for r in process_frames_with_plugin(ff, sample_rate, step_size, plugin, [output]):
Chris@89 44 yield r[output]
Chris@76 45
Chris@89 46 plugin.unload()
Chris@89 47
Chris@76 48
Chris@84 49 def process_multiple_outputs(data, sample_rate, key, outputs, parameters = {}):
Chris@68 50 #!!! docstring
Chris@68 51
Chris@89 52 plugin, step_size, block_size = load.load_and_configure(data, sample_rate, key, parameters)
Chris@64 53
Chris@84 54 ff = frames.frames_from_array(data, step_size, block_size)
Chris@64 55
Chris@89 56 for r in process_frames_with_plugin(ff, sample_rate, step_size, plugin, outputs):
Chris@89 57 yield r
Chris@61 58
Chris@89 59 plugin.unload()
Chris@66 60