annotate vamp/collect.py @ 89:1a08dd72f4d2

Tidy, refactor
author Chris Cannam
date Wed, 21 Jan 2015 18:27:07 +0000
parents 7228921e8425
children 4bed6bf67243
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 load
Chris@88 5 import process
Chris@89 6 import frames
Chris@89 7
Chris@72 8
Chris@85 9 def timestamp_features(sample_rate, step_size, output_desc, features):
Chris@85 10 n = -1
Chris@85 11 if output_desc["sample_type"] == vampyhost.ONE_SAMPLE_PER_STEP:
Chris@85 12 for f in features:
Chris@85 13 n = n + 1
Chris@85 14 t = vampyhost.frame_to_realtime(n * step_size, sample_rate)
Chris@85 15 f["timestamp"] = t
Chris@85 16 yield f
Chris@85 17 elif output_desc["sample_type"] == vampyhost.FIXED_SAMPLE_RATE:
Chris@85 18 output_rate = output_desc["sample_rate"]
Chris@85 19 for f in features:
Chris@85 20 if "has_timestamp" in f:
Chris@85 21 n = int(f["timestamp"].to_float() * output_rate + 0.5)
Chris@85 22 else:
Chris@85 23 n = n + 1
Chris@85 24 f["timestamp"] = vampyhost.RealTime('seconds', float(n) / output_rate)
Chris@85 25 yield f
Chris@85 26 else:
Chris@85 27 for f in features:
Chris@85 28 yield f
Chris@72 29
Chris@74 30
Chris@89 31 def process_and_fill_timestamps(data, sample_rate, key, output, parameters = {}):
Chris@88 32
Chris@89 33 plugin, step_size, block_size = load.load_and_configure(data, sample_rate, key, parameters)
Chris@71 34
Chris@88 35 if output == "":
Chris@89 36 output_desc = plugin.get_output(0)
Chris@89 37 output = output_desc["identifier"]
Chris@88 38 else:
Chris@89 39 output_desc = plugin.get_output(output)
Chris@71 40
Chris@89 41 ff = frames.frames_from_array(data, step_size, block_size)
Chris@89 42
Chris@89 43 results = process.process_frames_with_plugin(ff, sample_rate, step_size, plugin, [output])
Chris@89 44
Chris@89 45 selected = [ r[output] for r in results ]
Chris@89 46
Chris@89 47 stamped = timestamp_features(sample_rate, step_size, output_desc, selected)
Chris@89 48
Chris@89 49 for s in stamped:
Chris@89 50 yield s
Chris@89 51
Chris@89 52 plugin.unload()
Chris@88 53
Chris@71 54
Chris@89 55 def collect(data, sample_rate, key, output, parameters = {}):
Chris@89 56 return process_and_fill_timestamps(data, sample_rate, key, output, parameters)