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@76
|
7 def loadAndQuery(data, sampleRate, key, parameters):
|
Chris@76
|
8 plug, stepSize, blockSize = load.loadAndConfigureFor(data, sampleRate, key, parameters)
|
Chris@80
|
9 plugOuts = plug.get_outputs()
|
Chris@76
|
10 outIndices = dict(zip([o["identifier"] for o in plugOuts],
|
Chris@76
|
11 range(0, len(plugOuts)))) # id -> n
|
Chris@76
|
12 return plug, stepSize, blockSize, outIndices
|
Chris@76
|
13
|
Chris@76
|
14
|
Chris@76
|
15 def processMultipleOutputs(data, sampleRate, key, outputs, parameters = {}):
|
Chris@68
|
16 #!!! docstring
|
Chris@68
|
17
|
Chris@76
|
18 plug, stepSize, blockSize, outIndices = loadAndQuery(data, sampleRate, key, parameters)
|
Chris@64
|
19
|
Chris@64
|
20 for o in outputs:
|
Chris@64
|
21 assert o in outIndices
|
Chris@64
|
22
|
Chris@75
|
23 ff = frames.framesFromArray(data, stepSize, blockSize)
|
Chris@61
|
24 fi = 0
|
Chris@64
|
25
|
Chris@61
|
26 for f in ff:
|
Chris@80
|
27 results = plug.process_block(f, vampyhost.frame_to_realtime(fi, sampleRate))
|
Chris@64
|
28 # results is a dict mapping output number -> list of feature dicts
|
Chris@66
|
29 for o in outputs:
|
Chris@76
|
30 outix = outIndices[o]
|
Chris@76
|
31 if outix in results:
|
Chris@76
|
32 for r in results[outix]:
|
Chris@70
|
33 yield { o: r }
|
Chris@61
|
34 fi = fi + stepSize
|
Chris@61
|
35
|
Chris@80
|
36 results = plug.get_remaining_features()
|
Chris@66
|
37 for o in outputs:
|
Chris@76
|
38 outix = outIndices[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@76
|
45 def process(data, sampleRate, key, output = "", parameters = {}):
|
Chris@76
|
46 #!!! docstring
|
Chris@76
|
47
|
Chris@76
|
48 plug, stepSize, blockSize, outIndices = loadAndQuery(data, sampleRate, key, parameters)
|
Chris@76
|
49
|
Chris@76
|
50 if output == "":
|
Chris@76
|
51 outix = 0
|
Chris@76
|
52 else:
|
Chris@76
|
53 assert output in outIndices
|
Chris@76
|
54 outix = outIndices[output]
|
Chris@76
|
55
|
Chris@76
|
56 ff = frames.framesFromArray(data, stepSize, blockSize)
|
Chris@76
|
57 fi = 0
|
Chris@76
|
58
|
Chris@76
|
59 for f in ff:
|
Chris@80
|
60 results = plug.process_block(f, vampyhost.frame_to_realtime(fi, sampleRate))
|
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@76
|
65 fi = fi + stepSize
|
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
|