def test_triad_alteration(self): sds = list(itertools.product(alterations, scale_degrees_major)) for alt, sd in sds: with self.subTest(sd=sd, alt=alt): r = harmalysis.parse(alt + sd) self.assertEqual(r.chord.scale_degree, sd) self.assertEqual(r.chord.scale_degree_alteration, alt)
def test_diatonic_sevenths(self): queries = { 'I7': 'CM3P5M7', 'ii7': 'Dm3P5m7', 'iii7': 'Em3P5m7', 'IV7': 'FM3P5M7', 'V7': 'GM3P5m7', 'vi7': 'Am3P5m7', 'viio7': 'Bm3D5m7' } for label, intervals in queries.items(): with self.subTest(label=label, i=intervals): r = harmalysis.parse(label) self.assertEqual(str(r.chord), intervals)
def get_dataframe_from_file(filename): score = music21.converter.parse(filename) labels = {} for n in score.flat.notesAndRests: if n.lyric: label = harmalysis.parse(n.lyric) try: chordlabel = harmalysis.parse(str(label.chord), syntax='chordlabel') except: chordlabel = 'Unknown chord' pass offset = eval(str( n.offset)) # Resolving triplets (fractions) into floats labels[offset] = { 'annotation': n.lyric, 'chord_label': chordlabel, 'chord_inversion': label.chord.inversion, 'local_key': str(label.main_key), 'tonicized_key': str(label.secondary_key), } df = pd.DataFrame(labels).transpose() return df
def test_all_minor_keys(self): keys = list(itertools.product(keys_minor, alterations + [''])) for key, alt in keys: with self.subTest(key=key, alt=alt): r = harmalysis.parse(key + alt + ':i') self.assertEqual(str(r.main_key.tonic), key.upper() + alt)
def test_triad(self): sds = scale_degrees_major for sd in sds: with self.subTest(sd=sd): r = harmalysis.parse(sd) self.assertEqual(r.chord.scale_degree, sd)