def load_key(keys_path): """Load Beatles format key data from a file Args: keys_path (str): path to key annotation file Returns: KeyData: loaded key data """ if keys_path is None: return None if not os.path.exists(keys_path): raise IOError("keys_path {} does not exist".format(keys_path)) start_times, end_times, keys = [], [], [] with open(keys_path, "r") as fhandle: reader = csv.reader(fhandle, delimiter="\t") for line in reader: if line[2] == "Key": start_times.append(float(line[0])) end_times.append(float(line[1])) keys.append(line[3]) key_data = annotations.KeyData(np.array([start_times, end_times]).T, keys) return key_data
def load_key_mode(fhandle: TextIO) -> annotations.KeyData: """Load a Guitarset key-mode annotation. Args: fhandle (str or file-like): File-like object or path of the jams annotation file Returns: KeyData: Key data """ jam = jams.load(fhandle) anno = jam.search(namespace="key_mode")[0] intervals, values = anno.to_interval_values() return annotations.KeyData(intervals, values)
def load_key_mode(jams_path): """Load a Guitarset key-mode annotation. Args: jams_path (str): Path of the jams annotation file Returns: KeyData: Key data """ if not os.path.exists(jams_path): raise IOError("jams_path {} does not exist".format(jams_path)) jam = jams.load(jams_path) anno = jam.search(namespace="key_mode")[0] intervals, values = anno.to_interval_values() return annotations.KeyData(intervals, values)
def load_key(fhandle: TextIO) -> annotations.KeyData: """Load Beatles format key data from a file Args: fhandle (str or file-like): path or file-like object pointing to a key annotation file Returns: KeyData: loaded key data """ start_times, end_times, keys = [], [], [] reader = csv.reader(fhandle, delimiter="\t") for line in reader: if line[2] == "Key": start_times.append(float(line[0])) end_times.append(float(line[1])) keys.append(line[3]) return annotations.KeyData(np.array([start_times, end_times]).T, keys)
def test_key_data(): intervals = np.array([[1.0, 2.0], [1.5, 3.0], [2.0, 3.0]]) keys = ["Em", "A", "G"] key_data = annotations.KeyData(intervals, keys) assert np.allclose(key_data.intervals, intervals) assert key_data.keys == keys
def test_keys(): key_data_1 = [(annotations.KeyData(np.array([[0.0], [100.0]]).T, ["A"]), None)] key_data_2 = [(annotations.KeyData(np.array([[0.0], [100.0]]).T, ["A"]), "keys_1")] key_data_3 = [ (annotations.KeyData(np.array([[0.0], [100.0]]).T, ["A"]), "keys_1"), (annotations.KeyData(np.array([[0.0], [50.0]]).T, ["B"]), "keys_2"), ] key_data_4 = ( annotations.KeyData(np.array([[0.0], [100.0]]).T, ["A"]), "keys_1", ) key_data_5 = [ [annotations.KeyData(np.array([[0.0], [100.0]]).T, ["A"]), "keys_1"], (annotations.KeyData(np.array([[0.0], [50.0]]).T, ["B"]), "keys_2"), ] key_data_6 = [(None, None)] key_data_7 = [ ( annotations.EventData( np.array([[0.2, 0.3], [0.3, 0.4]]).T, ["event A", "event B"], ), None, ) ] jam_1 = jams_utils.jams_converter(key_data=key_data_1) jam_2 = jams_utils.jams_converter(key_data=key_data_2) jam_3 = jams_utils.jams_converter(key_data=key_data_3) jam_6 = jams_utils.jams_converter(key_data=key_data_6) time, duration, value, confidence = get_jam_data(jam_1, "key", 0) assert time == [0.0] assert duration == [100.0] assert value == ["A"] assert confidence == [None] assert jam_2.annotations[0]["sandbox"]["name"] == "keys_1" time, duration, value, confidence = get_jam_data(jam_3, "key", 0) assert time == [0.0] assert duration == [100.0] assert value == ["A"] assert confidence == [None] time, duration, value, confidence = get_jam_data(jam_3, "key", 1) assert time == [0.0] assert duration == [50.0] assert value == ["B"] assert confidence == [None] time, duration, value, confidence = get_jam_data(jam_6, "key", 0) assert time == [] assert duration == [] assert value == [] assert confidence == [] assert type(jam_1) == jams.JAMS with pytest.raises(TypeError): jams_utils.jams_converter(key_data=key_data_4) with pytest.raises(TypeError): jams_utils.jams_converter(key_data=key_data_5) with pytest.raises(TypeError): jams_utils.jams_converter(key_data=key_data_7)