Exemplo n.º 1
0
def test_repr():
    class TestAnnotation(annotations.Annotation):
        def __init__(self):
            self.a = ["a", "b", "c"]
            self.b = np.array([[1, 2], [1, 4]])
            self._c = "hidden"

    test_track = TestAnnotation()
    assert test_track.__repr__() == """TestAnnotation(a, b)"""

    beat_data = annotations.BeatData(np.array([1.0, 2.0]))
    assert beat_data.__repr__() == "BeatData(positions, times)"
Exemplo n.º 2
0
def load_beats(fhandle: TextIO) -> annotations.BeatData:
    """Load a Guitarset beats annotation.

    Args:
        fhandle (str or file-like): File-like object or path of the jams annotation file

    Returns:
        BeatData: Beat data
    """
    jam = jams.load(fhandle)
    anno = jam.search(namespace="beat_position")[0]
    times, values = anno.to_event_values()
    positions = [int(v["position"]) for v in values]
    return annotations.BeatData(times, np.array(positions))
Exemplo n.º 3
0
def load_beats(jams_path):
    """Load a Guitarset beats annotation.

    Args:
        jams_path (str): Path of the jams annotation file

    Returns:
        BeatData: Beat 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="beat_position")[0]
    times, values = anno.to_event_values()
    positions = [int(v["position"]) for v in values]
    return annotations.BeatData(times, np.array(positions))
Exemplo n.º 4
0
def load_beats(midi_path, midi=None):
    """Load beat data from the midi file.

    Args:
        midi_path (str): path to midi file
        midi (pretty_midi.PrettyMIDI): pre-loaded midi object or None
            if None, the midi object is loaded using midi_path

    Returns:
        annotations.BeatData: machine generated beat data

    """
    if midi is None:
        midi = load_midi(midi_path)
    beat_times = midi.get_beats()
    beat_range = np.arange(0, len(beat_times))
    meter = midi.time_signature_changes[0]
    beat_positions = 1 + np.mod(beat_range, meter.numerator)
    return annotations.BeatData(beat_times, beat_positions)
Exemplo n.º 5
0
def load_beats(fhandle: TextIO) -> annotations.BeatData:
    """Load rwc beat data from a file

    Args:
        fhandle (str or file-like): File-like object or path to beats annotation file

    Returns:
        BeatData: beat data

    """

    beat_times = []  # timestamps of beat interval beginnings
    beat_positions = []  # beat position inside the bar

    reader = csv.reader(fhandle, delimiter="\t")
    for line in reader:
        beat_times.append(float(line[0]) / 100.0)
        beat_positions.append(int(line[2]))
    beat_positions_in_bar, beat_times = _position_in_bar(
        np.array(beat_positions), np.array(beat_times))

    return annotations.BeatData(beat_times, beat_positions_in_bar.astype(int))
def load_beat(fhandle: TextIO) -> annotations.BeatData:
    """Load a Dagstuhl ChoirSet beat annotation.

    Args:
        fhandle (str or file-like): File-like object or path to beat annotation file

    Returns:
        BeatData Object - the beat annotation
    """
    times = []
    positions = []
    position = 0
    reader = csv.reader(fhandle, delimiter=",")
    for line in reader:
        times.append(float(line[0]))
        raw_position = float(line[1])
        if np.floor(raw_position) == raw_position:
            position = 1
        else:
            position += 1
        positions.append(position)

    return annotations.BeatData(np.array(times), np.array(positions))
Exemplo n.º 7
0
def load_beats(fhandle: TextIO) -> annotations.BeatData:
    """Load Beatles format beat data from a file

    Args:
        fhandle (str or file-like): path or file-like object pointing to a beat annotation file

    Returns:
        BeatData: loaded beat data

    """
    beat_times, beat_positions = [], []
    dialect = csv.Sniffer().sniff(fhandle.read(1024))
    fhandle.seek(0)
    reader = csv.reader(fhandle, dialect)
    for line in reader:
        beat_times.append(float(line[0]))
        beat_positions.append(line[-1])

    beat_positions = _fix_newpoint(np.array(beat_positions))  # type: ignore
    # After fixing New Point labels convert positions to int
    beat_data = annotations.BeatData(
        np.array(beat_times), np.array([int(b) for b in beat_positions]))

    return beat_data
Exemplo n.º 8
0
def test_beat_data():
    times = np.array([1.0, 2.0])
    positions = np.array([3, 4])
    beat_data = annotations.BeatData(times)
    assert np.allclose(beat_data.times, times)
    assert beat_data.positions is None
    beat_data2 = annotations.BeatData(times, positions)
    assert np.allclose(beat_data2.times, times)
    assert np.allclose(beat_data2.positions, positions)

    with pytest.raises(ValueError):
        annotations.BeatData(None, None)

    with pytest.raises(TypeError):
        annotations.BeatData([1.0, 2.0])

    with pytest.raises(TypeError):
        annotations.BeatData(times, [3, 4])

    with pytest.raises(TypeError):
        annotations.BeatData(times.astype(int))

    with pytest.raises(ValueError):
        annotations.BeatData(times, np.array([1]))
Exemplo n.º 9
0
def test_beats():
    beat_data_1 = [(annotations.BeatData(np.array([0.2, 0.3]), np.array([1, 2])), None)]
    beat_data_2 = [
        (annotations.BeatData(np.array([0.5, 0.7]), np.array([2, 3])), "beats_2")
    ]
    beat_data_3 = [
        (annotations.BeatData(np.array([0.0, 0.3]), np.array([1, 2])), "beats_1"),
        (annotations.BeatData(np.array([0.5, 0.8]), np.array([4, 3])), "beats_2"),
    ]
    beat_data_4 = (
        annotations.BeatData(np.array([0.0, 0.3]), np.array([1, 2])),
        "beats_1",
    )
    beat_data_5 = [
        (annotations.BeatData(np.array([0.0, 0.3]), np.array([1, 2])), "beats_1"),
        [annotations.BeatData(np.array([0.5, 0.8]), np.array([4, 3])), "beats_2"],
    ]
    beat_data_6 = [(None, None)]
    beat_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(beat_data=beat_data_1)
    jam_2 = jams_utils.jams_converter(beat_data=beat_data_2)
    jam_3 = jams_utils.jams_converter(beat_data=beat_data_3)
    jam_6 = jams_utils.jams_converter(beat_data=beat_data_6)

    time, duration, value, confidence = get_jam_data(jam_1, "beat", 0)
    assert time == [0.2, 0.3]
    assert duration == [0.0, 0.0]
    assert value == [1, 2]
    assert confidence == [None, None]

    assert jam_2.annotations[0]["sandbox"]["name"] == "beats_2"

    time, duration, value, confidence = get_jam_data(jam_3, "beat", 0)
    assert time == [0.0, 0.3]
    assert duration == [0.0, 0.0]
    assert value == [1, 2]
    assert confidence == [None, None]

    time, duration, value, confidence = get_jam_data(jam_3, "beat", 1)
    assert time == [0.5, 0.8]
    assert duration == [0.0, 0.0]
    assert value == [4, 3]
    assert confidence == [None, None]

    time, duration, value, confidence = get_jam_data(jam_6, "beat", 0)
    assert time == []
    assert duration == []
    assert value == []
    assert confidence == []

    assert type(jam_1) == jams.JAMS

    with pytest.raises(TypeError):
        jams_utils.jams_converter(beat_data=beat_data_4)
    with pytest.raises(TypeError):
        jams_utils.jams_converter(beat_data=beat_data_5)
    with pytest.raises(TypeError):
        jams_utils.jams_converter(beat_data=beat_data_7)