Esempio n. 1
0
 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)
Esempio n. 2
0
 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)
Esempio n. 3
0
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
Esempio n. 4
0
 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)
Esempio n. 5
0
 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)