Пример #1
0
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
Пример #2
0
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)
Пример #3
0
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)
Пример #4
0
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)
Пример #5
0
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
Пример #6
0
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)