def load_beats(beats_path): """Load Beatles format beat data from a file Args: beats_path (str): path to beat annotation file Returns: (utils.BeatData): loaded beat data """ if beats_path is None: return None if not os.path.exists(beats_path): raise IOError("beats_path {} does not exist".format(beats_path)) beat_times, beat_positions = [], [] with open(beats_path, "r") as fhandle: 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)) # After fixing New Point labels convert positions to int beat_positions = [int(b) for b in beat_positions] beat_data = utils.BeatData(np.array(beat_times), np.array(beat_positions)) return beat_data
def _load_beats(beats_path): """Private function to load Beatles format beat data from a file Args: beats_path (str): """ if beats_path is None or not os.path.exists(beats_path): return None beat_times, beat_positions = [], [] with open(beats_path, 'r') as fhandle: 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)) # After fixing New Point labels convert positions to int beat_positions = [int(b) for b in beat_positions] beat_data = utils.BeatData(np.array(beat_times), np.array(beat_positions)) return beat_data
def load_beats(jams_path): 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 utils.BeatData(times, positions)
def _load_beats(beats_path): if not os.path.exists(beats_path): return None beat_times = [] # timestamps of beat interval beginnings beat_positions = [] # beat position inside the bar with open(beats_path, 'r') as fhandle: 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, beat_times = _position_in_bar(np.array(beat_positions), np.array(beat_times)) return utils.BeatData(beat_times, beat_positions.astype(int))
def load_beats(beats_path): if not os.path.exists(beats_path): raise IOError("beats_path {} does not exist".format(beats_path)) beat_times = [] # timestamps of beat interval beginnings beat_positions = [] # beat position inside the bar with open(beats_path, "r") as fhandle: 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, beat_times = _position_in_bar(np.array(beat_positions), np.array(beat_times)) return utils.BeatData(beat_times, beat_positions.astype(int))
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: beat_data (BeatData) """ 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 utils.BeatData(beat_times, beat_positions)
def test_beats(): beat_data_1 = [(utils.BeatData(np.array([0.2, 0.3]), np.array([1, 2])), None)] beat_data_2 = [(utils.BeatData(np.array([0.5, 0.7]), np.array([2, 3])), "beats_2")] beat_data_3 = [ (utils.BeatData(np.array([0.0, 0.3]), np.array([1, 2])), "beats_1"), (utils.BeatData(np.array([0.5, 0.13]), np.array([4, 3])), "beats_2"), ] beat_data_4 = (utils.BeatData(np.array([0.0, 0.3]), np.array([1, 2])), "beats_1") beat_data_5 = [ (utils.BeatData(np.array([0.0, 0.3]), np.array([1, 2])), "beats_1"), [utils.BeatData(np.array([0.5, 0.13]), np.array([4, 3])), "beats_2"], ] beat_data_6 = [(None, None)] beat_data_7 = [ ( utils.EventData( np.array([0.2, 0.3]), np.array([0.3, 0.4]), np.array(["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.13, 0.5] assert duration == [0.0, 0.0] assert value == [3, 4] 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)
def _load_beats(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 utils.BeatData(times, positions)
def test_beats(): beat_data_1 = [(utils.BeatData(np.array([0.2, 0.3]), np.array([1, 2])), None)] beat_data_2 = [(utils.BeatData(np.array([0.5, 0.7]), np.array([2, 3])), 'beats_2')] beat_data_3 = [ (utils.BeatData(np.array([0.0, 0.3]), np.array([1, 2])), 'beats_1'), (utils.BeatData(np.array([0.5, 0.13]), np.array([4, 3])), 'beats_2'), ] beat_data_4 = (utils.BeatData(np.array([0.0, 0.3]), np.array([1, 2])), 'beats_1') beat_data_5 = [ (utils.BeatData(np.array([0.0, 0.3]), np.array([1, 2])), 'beats_1'), [utils.BeatData(np.array([0.5, 0.13]), np.array([4, 3])), 'beats_2'], ] beat_data_6 = [(None, None)] beat_data_7 = [ ( utils.EventData( np.array([0.2, 0.3]), np.array([0.3, 0.4]), np.array(['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.13, 0.5] assert duration == [0.0, 0.0] assert value == [3, 4] 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)