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@138: def test_process_summary_param_kwargs(): 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@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@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@92: def test_collect_fixed_sample_rate_2(): Chris@92: buf = input_data(blocksize * 10) Chris@117: rdict = vamp.collect(buf, rate, plugin_key, "curve-fsr-timed") 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@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()