xmlChordAna.py
changeset 2 775a1d0d3be6
parent 0 4896b49e870a
child 6 193999e56a90
equal deleted inserted replaced
1:7fd6cac1a69d 2:775a1d0d3be6
     1 import fractions as F
     1 #!/usr/bin/env python
     2 import xml2b40
     2 # coding: latin-1
       
     3 
       
     4 import fractions, os, xml2b40
     3 import segLibB40 as S
     5 import segLibB40 as S
     4 
     6 
     5 def keySeg (iseg,jseg):
     7 def keySeg (iseg,jseg):
     6     hist = S.getSegment (iseg, jseg)
     8     hist = S.getSegment (iseg, jseg)
     7     ks = S.keyCor (hist)
     9     ks = S.keyCor (hist)
    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)