def load_pitch(pitch_path): """Load pitch Args: pitch path (str): Local path where the pitch annotation is stored. If `None`, returns None. Returns: F0Data: pitch annotation """ if pitch_path is None: return None if not os.path.exists(pitch_path): raise IOError("melody_path {} does not exist".format(pitch_path)) times = [] freqs = [] with open(pitch_path, 'r') as reader: for line in reader.readlines(): times.append(float(line.split('\t')[0])) freqs.append(float(line.split('\t')[1])) if not times: return None times = np.array(times) freqs = np.array(freqs) confidence = (freqs > 0).astype(float) return utils.F0Data(times, freqs, confidence)
def _load_f0(f0_path): if not os.path.exists(f0_path): return None with open(f0_path) as fhandle: lines = fhandle.readlines() f0_midi = np.array([float(line) for line in lines]) f0_hz = librosa.midi_to_hz(f0_midi) * (f0_midi > 0) confidence = (f0_hz > 0).astype(float) times = (np.arange(len(f0_midi)) * TIME_STEP) + (TIME_STEP / 2.0) f0_data = utils.F0Data(times, f0_hz, confidence) return f0_data
def load_pitch_contour(jams_path, string_num): """ Args: jams_path (str): Path of the jams annotation file string_num (int), in range(6): Which string to load. 0 is the Low E string, 5 is the high e string. """ jam = jams.load(jams_path) anno_arr = jam.search(namespace='pitch_contour') anno = anno_arr.search(data_source=str(string_num))[0] times, values = anno.to_event_values() frequencies = [v['frequency'] for v in values] return utils.F0Data(times, frequencies, np.ones_like(times))
def _load_melody3(melody_path): if not os.path.exists(melody_path): return None times = [] freqs = [] confidence = [] with open(melody_path, 'r') as fhandle: reader = csv.reader(fhandle, delimiter=',') for line in reader: times.append(float(line[0])) freqs.append([float(v) for v in line[1:]]) confidence.append(0 if line[1] == '0' else 1) melody_data = utils.F0Data(np.array(times), np.array(freqs), np.array(confidence)) return melody_data
def _load_pitch_contour(jams_path, string_num): ''' Parameters: ----------- jams_path : str path of the jams annotation file string_num : int, in range(6) Which string to load. 0 being the Low E string, 5 is the high e string. ''' jam = jams.load(jams_path) anno_arr = jam.search(namespace='pitch_contour') anno = anno_arr.search(data_source=str(string_num))[0] times, values = anno.to_event_values() frequencies = [v['frequency'] for v in values] return utils.F0Data(times, frequencies, np.ones_like(times))
def load_pitch(pitch_path): if not os.path.exists(pitch_path): return None times = [] freqs = [] with open(pitch_path, 'r') as fhandle: reader = csv.reader(fhandle, delimiter=',') for line in reader: times.append(float(line[0])) freqs.append(float(line[1])) times = np.array(times) freqs = np.array(freqs) confidence = (freqs > 0).astype(float) pitch_data = utils.F0Data(times, freqs, confidence) return pitch_data
def _load_melody3(melody_path): if not os.path.exists(melody_path): return None times = [] freqs = [] with open(melody_path, 'r') as fhandle: reader = csv.reader(fhandle, delimiter=',') for line in reader: times.append(float(line[0])) freqs.append([float(v) for v in line[1:]]) times = np.array(times) freqs = np.array(freqs) confidence = (freqs > 0).astype(float) melody_data = utils.F0Data(times, freqs, confidence) return melody_data
def load_pitch_contour(jams_path, string_num): """ Args: jams_path (str): Path of the jams annotation file string_num (int), in range(6): Which string to load. 0 is the Low E string, 5 is the high e string. """ if not os.path.exists(jams_path): raise IOError("jams_path {} does not exist".format(jams_path)) jam = jams.load(jams_path) anno_arr = jam.search(namespace="pitch_contour") anno = anno_arr.search(data_source=str(string_num))[0] times, values = anno.to_event_values() frequencies = [v["frequency"] for v in values] return utils.F0Data(times, frequencies, np.ones_like(times))
def load_melody(melody_path): if not os.path.exists(melody_path): raise IOError("melody_path {} does not exist".format(melody_path)) times = [] freqs = [] with open(melody_path, 'r') as fhandle: reader = csv.reader(fhandle, delimiter=',') for line in reader: times.append(float(line[0])) freqs.append(float(line[1])) times = np.array(times) freqs = np.array(freqs) confidence = (freqs > 0).astype(float) melody_data = utils.F0Data(times, freqs, confidence) return melody_data
def load_melody(melody_path): if not os.path.exists(melody_path): raise IOError("melody_path {} does not exist".format(melody_path)) times = [] freqs = [] confidence = [] with open(melody_path, "r") as fhandle: reader = csv.reader(fhandle, delimiter="\t") for line in reader: times.append(float(line[0])) freqs.append(float(line[1])) confidence.append(0.0 if line[1] == "0" else 1.0) melody_data = utils.F0Data(np.array(times), np.array(freqs), np.array(confidence)) return melody_data
def load_melody(f0_path): """Load cante100 f0 annotations Args: f0_path (str): path to audio file Returns: F0Data: predominant melody """ if not os.path.exists(f0_path): raise IOError("f0_path {} does not exist".format(f0_path)) parsed_melody = np.genfromtxt(f0_path, delimiter=',') times = parsed_melody[:, 0] freqs = parsed_melody[:, 1] times = np.array(times) freqs = np.array(freqs) confidence = (freqs > 0).astype(float) return utils.F0Data(times, freqs, confidence)
def test_f0s(): f0_data_1 = [ ( utils.F0Data( np.array([0.016, 0.048]), np.array([0.0, 260.9]), np.array([0.0, 1.0]) ), None, ) ] f0_data_2 = [ ( utils.F0Data( np.array([0.016, 0.048]), np.array([0.0, 260.9]), np.array([0.0, 1.0]) ), "f0s_1", ) ] f0_data_3 = [ ( utils.F0Data( np.array([0.016, 0.048]), np.array([0.0, 260.9]), np.array([0.0, 1.0]) ), "f0s_1", ), ( utils.F0Data( np.array([0.003, 0.012]), np.array([0.0, 230.5]), np.array([0.0, 1.0]) ), "f0s_2", ), ] f0_data_4 = ( utils.F0Data( np.array([0.016, 0.048]), np.array([0.0, 260.9]), np.array([0.0, 1.0]) ), "f0s_1", ) f0_data_5 = [ [ utils.F0Data( np.array([0.016, 0.048]), np.array([0.0, 260.9]), np.array([0.0, 1.0]) ), "f0s_1", ], ( utils.F0Data( np.array([0.003, 0.012]), np.array([0.0, 230.5]), np.array([0.0, 1.0]) ), "f0s_2", ), ] f0_data_6 = [(None, None)] f0_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(f0_data=f0_data_1) jam_2 = jams_utils.jams_converter(f0_data=f0_data_2) jam_3 = jams_utils.jams_converter(f0_data=f0_data_3) jam_6 = jams_utils.jams_converter(f0_data=f0_data_6) time, duration, value, confidence = get_jam_data(jam_1, "pitch_contour", 0) assert time == [0.016, 0.048] assert duration == [0.0, 0.0] assert value == [ {"frequency": 0.0, "index": 0, "voiced": False}, {"frequency": 260.9, "index": 0, "voiced": True}, ] assert confidence == [0.0, 1.0] assert jam_2.annotations[0]["sandbox"]["name"] == "f0s_1" time, duration, value, confidence = get_jam_data(jam_3, "pitch_contour", 0) assert time == [0.016, 0.048] assert duration == [0.0, 0.0] assert value == [ {"frequency": 0.0, "index": 0, "voiced": False}, {"frequency": 260.9, "index": 0, "voiced": True}, ] assert confidence == [0.0, 1.0] time, duration, value, confidence = get_jam_data(jam_3, "pitch_contour", 1) assert time == [0.003, 0.012] assert duration == [0.0, 0.0] assert value == [ {"frequency": 0.0, "index": 0, "voiced": False}, {"frequency": 230.5, "index": 0, "voiced": True}, ] assert confidence == [0.0, 1.0] time, duration, value, confidence = get_jam_data(jam_6, "pitch_contour", 0) assert time == [] assert duration == [] assert value == [] assert confidence == [] assert type(jam_1) == jams.JAMS with pytest.raises(TypeError): jams_utils.jams_converter(f0_data=f0_data_4) with pytest.raises(TypeError): jams_utils.jams_converter(f0_data=f0_data_5) with pytest.raises(TypeError): jams_utils.jams_converter(f0_data=f0_data_7)
def test_f0s(): f0_data_1 = [ ( utils.F0Data( np.array([0.016, 0.048]), np.array([0.0, 260.9]), np.array([0.0, 1.0]) ), None, ) ] f0_data_2 = [ ( utils.F0Data( np.array([0.016, 0.048]), np.array([0.0, 260.9]), np.array([0.0, 1.0]) ), 'f0s_1', ) ] f0_data_3 = [ ( utils.F0Data( np.array([0.016, 0.048]), np.array([0.0, 260.9]), np.array([0.0, 1.0]) ), 'f0s_1', ), ( utils.F0Data( np.array([0.003, 0.012]), np.array([0.0, 230.5]), np.array([0.0, 1.0]) ), 'f0s_2', ), ] f0_data_4 = ( utils.F0Data( np.array([0.016, 0.048]), np.array([0.0, 260.9]), np.array([0.0, 1.0]) ), 'f0s_1', ) f0_data_5 = [ [ utils.F0Data( np.array([0.016, 0.048]), np.array([0.0, 260.9]), np.array([0.0, 1.0]) ), 'f0s_1', ], ( utils.F0Data( np.array([0.003, 0.012]), np.array([0.0, 230.5]), np.array([0.0, 1.0]) ), 'f0s_2', ), ] f0_data_6 = [(None, None)] f0_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(f0_data=f0_data_1) jam_2 = jams_utils.jams_converter(f0_data=f0_data_2) jam_3 = jams_utils.jams_converter(f0_data=f0_data_3) jam_6 = jams_utils.jams_converter(f0_data=f0_data_6) time, duration, value, confidence = get_jam_data(jam_1, 'pitch_contour', 0) assert time == [0.016, 0.048] assert duration == [0.0, 0.0] assert value == [0.0, 260.9] assert confidence == [0.0, 1.0] assert jam_2.annotations[0]['sandbox']['name'] == 'f0s_1' time, duration, value, confidence = get_jam_data(jam_3, 'pitch_contour', 0) assert time == [0.016, 0.048] assert duration == [0.0, 0.0] assert value == [0.0, 260.9] assert confidence == [0.0, 1.0] time, duration, value, confidence = get_jam_data(jam_3, 'pitch_contour', 1) assert time == [0.003, 0.012] assert duration == [0.0, 0.0] assert value == [0.0, 230.5] assert confidence == [0.0, 1.0] time, duration, value, confidence = get_jam_data(jam_6, 'pitch_contour', 0) assert time == [] assert duration == [] assert value == [] assert confidence == [] assert type(jam_1) == jams.JAMS with pytest.raises(TypeError): jams_utils.jams_converter(f0_data=f0_data_4) with pytest.raises(TypeError): jams_utils.jams_converter(f0_data=f0_data_5) with pytest.raises(TypeError): jams_utils.jams_converter(f0_data=f0_data_7)