28 totNotes = sum ([len (ns) for ts, ns in grpsInSeg]) |
30 totNotes = sum ([len (ns) for ts, ns in grpsInSeg]) |
29 percnt = 100. * score / totNotes |
31 percnt = 100. * score / totNotes |
30 regels.append ('---- chord %s, score: %.0f%%' % (chord, percnt)) |
32 regels.append ('---- chord %s, score: %.0f%%' % (chord, percnt)) |
31 for tikken, noten in grpsInSeg: |
33 for tikken, noten in grpsInSeg: |
32 noten = ', '.join ([S.b40nm (n) + str(n / 40) for n in noten]) |
34 noten = ', '.join ([S.b40nm (n) + str(n / 40) for n in noten]) |
33 x = F.Fraction (tikken, tikkenPerKwart) |
35 x = fractions.Fraction (tikken, tikkenPerKwart) |
34 n, d = x.numerator, x.denominator |
36 t = x.numerator / x.denominator |
35 t = n / d |
|
36 r = x - t |
37 r = x - t |
37 if r == 0: r = '' |
38 if r == 0: r = '' |
38 regels.append ('%4d %3s %s' % (t, r, noten)) |
39 regels.append ('%4d %3s %s' % (t, r, noten)) |
39 return regels |
40 return regels |
40 |
41 |
41 if __name__ == '__main__': |
42 if __name__ == '__main__': |
42 fnm = 'mids/bwv539p_arr.xml' |
43 from optparse import OptionParser |
43 noten = xml2b40.xml2b40 (fnm) |
44 parser = OptionParser (usage='%prog [-h] [-g TPQ] [--C5] <file1>') |
44 regels = mkAna (noten, fnm) |
45 parser.add_option ("-t", action="store", type="int", help="ticks per quarternote", default=384, metavar='TPQ') |
|
46 parser.add_option ("--C5", action="store_true", help="central C is C5", default=False) |
|
47 options, args = parser.parse_args () |
|
48 if len (args) < 1: parser.error ('file argument needed') |
|
49 fnmext = args [0] |
|
50 fnm, ext = os.path.splitext (fnmext) |
|
51 if ext != '.xml': parser.error ('.xml file needed file needed') |
|
52 if not os.path.exists (fnmext): parser.error ('%s does not exist' % fnmext) |
|
53 |
|
54 noten = xml2b40.xml2b40 (fnmext, options.t, options.C5) |
|
55 regels = mkAna (noten, fnmext) |
45 print '\n'.join (regels) |
56 print '\n'.join (regels) |