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@84
|
7 def load_and_query(data, sample_rate, key, parameters):
|
Chris@84
|
8 plug, step_size, block_size = load.load_and_configure(data, sample_rate, key, parameters)
|
Chris@84
|
9 plug_outs = plug.get_outputs()
|
Chris@84
|
10 out_indices = dict(zip([o["identifier"] for o in plug_outs],
|
Chris@84
|
11 range(0, len(plug_outs)))) # id -> n
|
Chris@84
|
12 return plug, step_size, block_size, out_indices
|
Chris@76
|
13
|
Chris@76
|
14
|
Chris@84
|
15 def process_multiple_outputs(data, sample_rate, key, outputs, parameters = {}):
|
Chris@68
|
16 #!!! docstring
|
Chris@68
|
17
|
Chris@84
|
18 plug, step_size, block_size, out_indices = load_and_query(data, sample_rate, key, parameters)
|
Chris@64
|
19
|
Chris@64
|
20 for o in outputs:
|
Chris@84
|
21 assert o in out_indices
|
Chris@64
|
22
|
Chris@84
|
23 ff = frames.frames_from_array(data, step_size, block_size)
|
Chris@61
|
24 fi = 0
|
Chris@64
|
25
|
Chris@61
|
26 for f in ff:
|
Chris@84
|
27 results = plug.process_block(f, vampyhost.frame_to_realtime(fi, sample_rate))
|
Chris@64
|
28 # results is a dict mapping output number -> list of feature dicts
|
Chris@66
|
29 for o in outputs:
|
Chris@84
|
30 outix = out_indices[o]
|
Chris@76
|
31 if outix in results:
|
Chris@76
|
32 for r in results[outix]:
|
Chris@70
|
33 yield { o: r }
|
Chris@84
|
34 fi = fi + step_size
|
Chris@61
|
35
|
Chris@80
|
36 results = plug.get_remaining_features()
|
Chris@66
|
37 for o in outputs:
|
Chris@84
|
38 outix = out_indices[o]
|
Chris@76
|
39 if outix in results:
|
Chris@76
|
40 for r in results[outix]:
|
Chris@70
|
41 yield { o: r }
|
Chris@66
|
42
|
Chris@66
|
43 plug.unload()
|
Chris@66
|
44
|
Chris@84
|
45 def process(data, sample_rate, key, output = "", parameters = {}):
|
Chris@76
|
46 #!!! docstring
|
Chris@76
|
47
|
Chris@84
|
48 plug, step_size, block_size, out_indices = load_and_query(data, sample_rate, key, parameters)
|
Chris@76
|
49
|
Chris@76
|
50 if output == "":
|
Chris@76
|
51 outix = 0
|
Chris@76
|
52 else:
|
Chris@84
|
53 assert output in out_indices
|
Chris@84
|
54 outix = out_indices[output]
|
Chris@76
|
55
|
Chris@84
|
56 ff = frames.frames_from_array(data, step_size, block_size)
|
Chris@76
|
57 fi = 0
|
Chris@76
|
58
|
Chris@76
|
59 for f in ff:
|
Chris@84
|
60 results = plug.process_block(f, vampyhost.frame_to_realtime(fi, sample_rate))
|
Chris@76
|
61 # results is a dict mapping output number -> list of feature dicts
|
Chris@76
|
62 if outix in results:
|
Chris@76
|
63 for r in results[outix]:
|
Chris@76
|
64 yield r
|
Chris@84
|
65 fi = fi + step_size
|
Chris@76
|
66
|
Chris@80
|
67 results = plug.get_remaining_features()
|
Chris@76
|
68 if outix in results:
|
Chris@76
|
69 for r in results[outix]:
|
Chris@76
|
70 yield r
|
Chris@76
|
71
|
Chris@76
|
72 plug.unload()
|
Chris@76
|
73
|