Chris@71: Chris@71: import vamp Chris@71: import numpy as np Chris@101: import vamp.frames as fr Chris@71: Chris@82: plugin_key = "vamp-test-plugin:vamp-test-plugin" Chris@82: plugin_key_freq = "vamp-test-plugin:vamp-test-plugin-freq" Chris@71: Chris@112: rate = 44100.0 Chris@71: Chris@71: # Throughout this file we have the assumption that the plugin gets run with a Chris@71: # blocksize of 1024, and with a step of 1024 for the time-domain version or 512 Chris@71: # for the frequency-domain one. That is certainly expected to be the norm for a Chris@71: # plugin like this that declares no preference, and the Python Vamp module is Chris@71: # expected to follow the norm Chris@71: Chris@71: blocksize = 1024 Chris@92: eps = 1e-6 Chris@71: Chris@71: def input_data(n): Chris@71: # start at 1, not 0 so that all elts are non-zero Chris@71: return np.arange(n) + 1 Chris@71: Chris@71: def test_collect_runs_at_all(): Chris@88: buf = input_data(blocksize * 10) Chris@117: rdict = vamp.collect(buf, rate, plugin_key, "input-timestamp") Chris@117: step, results = rdict["vector"] Chris@88: assert results != [] Chris@88: Chris@96: ##!!! add test for default output Chris@96: Chris@88: def test_collect_one_sample_per_step(): Chris@88: buf = input_data(blocksize * 10) Chris@117: rdict = vamp.collect(buf, rate, plugin_key, "input-timestamp") Chris@117: step, results = rdict["vector"] Chris@94: assert abs(float(step) - (1024.0 / rate)) < eps Chris@88: assert len(results) == 10 Chris@93: for i in range(len(results)): Chris@93: # The timestamp should be the frame number of the first frame in the Chris@93: # input buffer Chris@93: expected = i * blocksize Chris@93: actual = results[i] Chris@93: assert actual == expected Chris@88: Chris@138: def test_process_summary_param(): Chris@138: buf = input_data(blocksize * 10) Chris@138: rdict = vamp.collect(buf, rate, plugin_key, "input-summary", { "produce_output": False }) Chris@138: assert ("vector" in rdict) Chris@138: step, results = rdict["vector"] Chris@138: assert len(results) == 0 Chris@138: rdict = vamp.collect(buf, rate, plugin_key, "input-summary", { "produce_output": True }) Chris@138: assert ("vector" in rdict) Chris@138: step, results = rdict["vector"] Chris@138: assert len(results) > 0 Chris@138: Chris@140: def test_process_summary_param_kwargs_1(): Chris@138: buf = input_data(blocksize * 10) Chris@138: rdict = vamp.collect(plugin_key = plugin_key, output = "input-summary", parameters = { "produce_output": False }, data = buf, sample_rate = rate) Chris@138: assert ("vector" in rdict) Chris@138: step, results = rdict["vector"] Chris@138: assert len(results) == 0 Chris@140: Chris@140: def test_process_summary_param_kwargs_2(): Chris@140: buf = input_data(blocksize * 10) Chris@138: rdict = vamp.collect(plugin_key = plugin_key, output = "input-summary", data = buf, sample_rate = rate) Chris@138: assert ("vector" in rdict) Chris@138: step, results = rdict["vector"] Chris@138: assert len(results) > 0 Chris@140: Chris@140: def test_process_summary_param_kwargs_3(): Chris@140: buf = input_data(blocksize * 10) Chris@140: rdict = vamp.collect(plugin_key = plugin_key, output = "input-summary", data = buf, sample_rate = rate, process_timestamp_method = vamp.vampyhost.SHIFT_DATA) Chris@140: assert ("vector" in rdict) Chris@140: step, results = rdict["vector"] Chris@140: assert len(results) > 0 Chris@140: Chris@140: def test_process_summary_param_kwargs_fail(): Chris@140: buf = input_data(blocksize * 10) Chris@140: try: Chris@140: 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: except Exception: # unknown kwarg Chris@140: pass Chris@138: Chris@92: def test_collect_fixed_sample_rate(): Chris@92: buf = input_data(blocksize * 10) Chris@117: rdict = vamp.collect(buf, rate, plugin_key, "curve-fsr") Chris@117: step, results = rdict["vector"] Chris@94: assert abs(float(step) - 0.4) < eps Chris@92: assert len(results) == 10 Chris@93: for i in range(len(results)): Chris@93: assert abs(results[i] - i * 0.1) < eps Chris@92: Chris@150: def test_collect_fixed_sample_rate_2_vector(): Chris@150: # This one has discontinuities and overlaps, so it should be Chris@150: # returned to us in two forms: as a simple vector, and as an Chris@150: # additional tracks shape with one vector for each separate Chris@150: # bit. This test covers the simple vector part Chris@150: buf = input_data(blocksize * 10) Chris@150: rdict = vamp.collect(buf, rate, plugin_key, "curve-fsr-timed") Chris@150: step, results = rdict["vector"] Chris@150: assert abs(float(step) - 0.4) < eps Chris@150: assert len(results) == 10 Chris@150: for i in range(len(results)): Chris@150: assert abs(results[i] - i * 0.1) < eps Chris@150: Chris@150: def test_collect_fixed_sample_rate_2_tracks(): Chris@150: # This one has discontinuities and overlaps, so it should be Chris@150: # returned to us in two forms: as a simple vector, and as an Chris@150: # additional tracks shape with one vector for each separate Chris@150: # bit. This test covers the tracks part. Chris@92: buf = input_data(blocksize * 10) Chris@117: rdict = vamp.collect(buf, rate, plugin_key, "curve-fsr-timed") Chris@149: results = rdict["tracks"] Chris@149: assert len(results) == 8 Chris@149: expected_starts = [ 0.0, 0.0, 0.0, 2.0, 2.0, 2.0, 4.0, 4.0 ] Chris@149: expected_lengths = [ 1, 1, 2, 1, 1, 2, 1, 1 ] Chris@149: expected_values = [ [ 0.0 ], [ 0.1 ], [ 0.2, 0.3 ], [ 0.4 ], [ 0.5 ], Chris@149: [ 0.6, 0.7 ], [ 0.8 ], [ 0.9 ] ] Chris@93: for i in range(len(results)): Chris@149: track = results[i] Chris@149: assert abs(float(track["step"]) - 0.4) < eps Chris@149: assert abs(float(track["start"]) - expected_starts[i]) < eps Chris@149: assert len(track["values"]) == expected_lengths[i] Chris@149: for j in range(expected_lengths[i]): Chris@149: assert abs(track["values"][j] - expected_values[i][j]) < eps Chris@92: Chris@92: def test_collect_variable_sample_rate(): Chris@92: buf = input_data(blocksize * 10) Chris@117: rdict = vamp.collect(buf, rate, plugin_key, "curve-vsr") Chris@117: results = rdict["list"] Chris@92: assert len(results) == 10 Chris@92: i = 0 Chris@92: for r in results: Chris@92: assert r["timestamp"] == vamp.vampyhost.RealTime('seconds', i * 0.75) Chris@92: assert abs(r["values"][0] - i * 0.1) < eps Chris@92: i = i + 1 Chris@96: Chris@96: def test_collect_grid_one_sample_per_step(): Chris@96: buf = input_data(blocksize * 10) Chris@117: rdict = vamp.collect(buf, rate, plugin_key, "grid-oss") Chris@117: step, results = rdict["matrix"] Chris@96: assert abs(float(step) - (1024.0 / rate)) < eps Chris@96: assert len(results) == 10 Chris@96: for i in range(len(results)): Chris@97: expected = np.array([ (j + i + 2.0) / 30.0 for j in range(0, 10) ]) Chris@97: assert (abs(results[i] - expected) < eps).all()