annotate test/test_collect.py @ 151:5a6b8f4be9b9 tracks tip

Docs
author Chris Cannam
date Fri, 21 Apr 2017 14:33:57 +0100
parents 37d2fd57723e
children
rev   line source
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()