Chris@71
|
1
|
Chris@71
|
2 import vamp
|
Chris@71
|
3 import numpy as np
|
Chris@101
|
4 import vamp.frames as fr
|
Chris@71
|
5
|
Chris@82
|
6 plugin_key = "vamp-test-plugin:vamp-test-plugin"
|
Chris@82
|
7 plugin_key_freq = "vamp-test-plugin:vamp-test-plugin-freq"
|
Chris@71
|
8
|
Chris@112
|
9 rate = 44100.0
|
Chris@71
|
10
|
Chris@71
|
11 # Throughout this file we have the assumption that the plugin gets run with a
|
Chris@71
|
12 # blocksize of 1024, and with a step of 1024 for the time-domain version or 512
|
Chris@71
|
13 # for the frequency-domain one. That is certainly expected to be the norm for a
|
Chris@71
|
14 # plugin like this that declares no preference, and the Python Vamp module is
|
Chris@71
|
15 # expected to follow the norm
|
Chris@71
|
16
|
Chris@71
|
17 blocksize = 1024
|
Chris@92
|
18 eps = 1e-6
|
Chris@71
|
19
|
Chris@71
|
20 def input_data(n):
|
Chris@71
|
21 # start at 1, not 0 so that all elts are non-zero
|
Chris@71
|
22 return np.arange(n) + 1
|
Chris@71
|
23
|
Chris@71
|
24 def test_collect_runs_at_all():
|
Chris@88
|
25 buf = input_data(blocksize * 10)
|
Chris@117
|
26 rdict = vamp.collect(buf, rate, plugin_key, "input-timestamp")
|
Chris@117
|
27 step, results = rdict["vector"]
|
Chris@88
|
28 assert results != []
|
Chris@88
|
29
|
Chris@96
|
30 ##!!! add test for default output
|
Chris@96
|
31
|
Chris@88
|
32 def test_collect_one_sample_per_step():
|
Chris@88
|
33 buf = input_data(blocksize * 10)
|
Chris@117
|
34 rdict = vamp.collect(buf, rate, plugin_key, "input-timestamp")
|
Chris@117
|
35 step, results = rdict["vector"]
|
Chris@94
|
36 assert abs(float(step) - (1024.0 / rate)) < eps
|
Chris@88
|
37 assert len(results) == 10
|
Chris@93
|
38 for i in range(len(results)):
|
Chris@93
|
39 # The timestamp should be the frame number of the first frame in the
|
Chris@93
|
40 # input buffer
|
Chris@93
|
41 expected = i * blocksize
|
Chris@93
|
42 actual = results[i]
|
Chris@93
|
43 assert actual == expected
|
Chris@88
|
44
|
Chris@138
|
45 def test_process_summary_param():
|
Chris@138
|
46 buf = input_data(blocksize * 10)
|
Chris@138
|
47 rdict = vamp.collect(buf, rate, plugin_key, "input-summary", { "produce_output": False })
|
Chris@138
|
48 assert ("vector" in rdict)
|
Chris@138
|
49 step, results = rdict["vector"]
|
Chris@138
|
50 assert len(results) == 0
|
Chris@138
|
51 rdict = vamp.collect(buf, rate, plugin_key, "input-summary", { "produce_output": True })
|
Chris@138
|
52 assert ("vector" in rdict)
|
Chris@138
|
53 step, results = rdict["vector"]
|
Chris@138
|
54 assert len(results) > 0
|
Chris@138
|
55
|
Chris@140
|
56 def test_process_summary_param_kwargs_1():
|
Chris@138
|
57 buf = input_data(blocksize * 10)
|
Chris@138
|
58 rdict = vamp.collect(plugin_key = plugin_key, output = "input-summary", parameters = { "produce_output": False }, data = buf, sample_rate = rate)
|
Chris@138
|
59 assert ("vector" in rdict)
|
Chris@138
|
60 step, results = rdict["vector"]
|
Chris@138
|
61 assert len(results) == 0
|
Chris@140
|
62
|
Chris@140
|
63 def test_process_summary_param_kwargs_2():
|
Chris@140
|
64 buf = input_data(blocksize * 10)
|
Chris@138
|
65 rdict = vamp.collect(plugin_key = plugin_key, output = "input-summary", data = buf, sample_rate = rate)
|
Chris@138
|
66 assert ("vector" in rdict)
|
Chris@138
|
67 step, results = rdict["vector"]
|
Chris@138
|
68 assert len(results) > 0
|
Chris@140
|
69
|
Chris@140
|
70 def test_process_summary_param_kwargs_3():
|
Chris@140
|
71 buf = input_data(blocksize * 10)
|
Chris@140
|
72 rdict = vamp.collect(plugin_key = plugin_key, output = "input-summary", data = buf, sample_rate = rate, process_timestamp_method = vamp.vampyhost.SHIFT_DATA)
|
Chris@140
|
73 assert ("vector" in rdict)
|
Chris@140
|
74 step, results = rdict["vector"]
|
Chris@140
|
75 assert len(results) > 0
|
Chris@140
|
76
|
Chris@140
|
77 def test_process_summary_param_kwargs_fail():
|
Chris@140
|
78 buf = input_data(blocksize * 10)
|
Chris@140
|
79 try:
|
Chris@140
|
80 rdict = vamp.collect(plugin_key = plugin_key, output = "input-summary", data = buf, sample_rate = rate, process_timestamp_method = vamp.vampyhost.SHIFT_DATA, unknown_argument = 1)
|
Chris@140
|
81 except Exception: # unknown kwarg
|
Chris@140
|
82 pass
|
Chris@138
|
83
|
Chris@92
|
84 def test_collect_fixed_sample_rate():
|
Chris@92
|
85 buf = input_data(blocksize * 10)
|
Chris@117
|
86 rdict = vamp.collect(buf, rate, plugin_key, "curve-fsr")
|
Chris@117
|
87 step, results = rdict["vector"]
|
Chris@94
|
88 assert abs(float(step) - 0.4) < eps
|
Chris@92
|
89 assert len(results) == 10
|
Chris@93
|
90 for i in range(len(results)):
|
Chris@93
|
91 assert abs(results[i] - i * 0.1) < eps
|
Chris@92
|
92
|
Chris@150
|
93 def test_collect_fixed_sample_rate_2_vector():
|
Chris@150
|
94 # This one has discontinuities and overlaps, so it should be
|
Chris@150
|
95 # returned to us in two forms: as a simple vector, and as an
|
Chris@150
|
96 # additional tracks shape with one vector for each separate
|
Chris@150
|
97 # bit. This test covers the simple vector part
|
Chris@150
|
98 buf = input_data(blocksize * 10)
|
Chris@150
|
99 rdict = vamp.collect(buf, rate, plugin_key, "curve-fsr-timed")
|
Chris@150
|
100 step, results = rdict["vector"]
|
Chris@150
|
101 assert abs(float(step) - 0.4) < eps
|
Chris@150
|
102 assert len(results) == 10
|
Chris@150
|
103 for i in range(len(results)):
|
Chris@150
|
104 assert abs(results[i] - i * 0.1) < eps
|
Chris@150
|
105
|
Chris@150
|
106 def test_collect_fixed_sample_rate_2_tracks():
|
Chris@150
|
107 # This one has discontinuities and overlaps, so it should be
|
Chris@150
|
108 # returned to us in two forms: as a simple vector, and as an
|
Chris@150
|
109 # additional tracks shape with one vector for each separate
|
Chris@150
|
110 # bit. This test covers the tracks part.
|
Chris@92
|
111 buf = input_data(blocksize * 10)
|
Chris@117
|
112 rdict = vamp.collect(buf, rate, plugin_key, "curve-fsr-timed")
|
Chris@149
|
113 results = rdict["tracks"]
|
Chris@149
|
114 assert len(results) == 8
|
Chris@149
|
115 expected_starts = [ 0.0, 0.0, 0.0, 2.0, 2.0, 2.0, 4.0, 4.0 ]
|
Chris@149
|
116 expected_lengths = [ 1, 1, 2, 1, 1, 2, 1, 1 ]
|
Chris@149
|
117 expected_values = [ [ 0.0 ], [ 0.1 ], [ 0.2, 0.3 ], [ 0.4 ], [ 0.5 ],
|
Chris@149
|
118 [ 0.6, 0.7 ], [ 0.8 ], [ 0.9 ] ]
|
Chris@93
|
119 for i in range(len(results)):
|
Chris@149
|
120 track = results[i]
|
Chris@149
|
121 assert abs(float(track["step"]) - 0.4) < eps
|
Chris@149
|
122 assert abs(float(track["start"]) - expected_starts[i]) < eps
|
Chris@149
|
123 assert len(track["values"]) == expected_lengths[i]
|
Chris@149
|
124 for j in range(expected_lengths[i]):
|
Chris@149
|
125 assert abs(track["values"][j] - expected_values[i][j]) < eps
|
Chris@92
|
126
|
Chris@92
|
127 def test_collect_variable_sample_rate():
|
Chris@92
|
128 buf = input_data(blocksize * 10)
|
Chris@117
|
129 rdict = vamp.collect(buf, rate, plugin_key, "curve-vsr")
|
Chris@117
|
130 results = rdict["list"]
|
Chris@92
|
131 assert len(results) == 10
|
Chris@92
|
132 i = 0
|
Chris@92
|
133 for r in results:
|
Chris@92
|
134 assert r["timestamp"] == vamp.vampyhost.RealTime('seconds', i * 0.75)
|
Chris@92
|
135 assert abs(r["values"][0] - i * 0.1) < eps
|
Chris@92
|
136 i = i + 1
|
Chris@96
|
137
|
Chris@96
|
138 def test_collect_grid_one_sample_per_step():
|
Chris@96
|
139 buf = input_data(blocksize * 10)
|
Chris@117
|
140 rdict = vamp.collect(buf, rate, plugin_key, "grid-oss")
|
Chris@117
|
141 step, results = rdict["matrix"]
|
Chris@96
|
142 assert abs(float(step) - (1024.0 / rate)) < eps
|
Chris@96
|
143 assert len(results) == 10
|
Chris@96
|
144 for i in range(len(results)):
|
Chris@97
|
145 expected = np.array([ (j + i + 2.0) / 30.0 for j in range(0, 10) ])
|
Chris@97
|
146 assert (abs(results[i] - expected) < eps).all()
|