xmlChordAna.py
changeset 6 193999e56a90
parent 2 775a1d0d3be6
equal deleted inserted replaced
5:377c84f956dc 6:193999e56a90
     1 #!/usr/bin/env python
     1 #!/usr/bin/env python3
     2 # coding: latin-1
       
     3 
     2 
     4 import fractions, os, xml2b40
     3 import os, xml2b40
       
     4 import fractions as F
     5 import segLibB40 as S
     5 import segLibB40 as S
     6 
     6 
     7 def keySeg (iseg,jseg):
     7 def keySeg (iseg,jseg):
     8     hist = S.getSegment (iseg, jseg)
     8     hist = S.getSegment (iseg, jseg)
     9     ks = S.keyCor (hist)
     9     ks = S.keyCor (hist)
    29         grpsInSeg = kgroep [kb:ke]
    29         grpsInSeg = kgroep [kb:ke]
    30         totNotes = sum ([len (ns) for ts, ns in grpsInSeg])
    30         totNotes = sum ([len (ns) for ts, ns in grpsInSeg])
    31         percnt = 100. * score / totNotes
    31         percnt = 100. * score / totNotes
    32         regels.append ('---- chord %s, score: %.0f%%' % (chord, percnt))
    32         regels.append ('---- chord %s, score: %.0f%%' % (chord, percnt))
    33         for tikken, noten in grpsInSeg:
    33         for tikken, noten in grpsInSeg:
    34             noten = ', '.join ([S.b40nm (n) + str(n / 40) for n in noten])
    34             noten = ', '.join ([S.b40nm (n) + str(int (n / 40)) for n in noten])
    35             x = fractions.Fraction (tikken, tikkenPerKwart)
    35             x = F.Fraction (tikken, tikkenPerKwart)
    36             t = x.numerator / x.denominator
    36             n, d = x.numerator, x.denominator
       
    37             t = int (n / d)
    37             r = x - t
    38             r = x - t
    38             if r == 0: r = ''
    39             if r == 0: r = ''
    39             regels.append ('%4d %3s %s' % (t, r, noten))
    40             regels.append ('%4d %3s %s' % (t, r, noten))
    40     return regels    
    41     return regels
    41 
    42 
    42 if __name__ == '__main__':
    43 if __name__ == '__main__':
    43     from optparse import OptionParser
    44     from optparse import OptionParser
    44     parser = OptionParser (usage='%prog [-h] [-g TPQ] [--C5] <file1>')
    45     parser = OptionParser (usage='%prog [-h] [-g TPQ] [--C5] <file1>')
    45     parser.add_option ("-t", action="store", type="int", help="ticks per quarternote", default=384, metavar='TPQ')
    46     parser.add_option ("-t", action="store", type="int", help="ticks per quarternote", default=384, metavar='TPQ')
    51     if ext != '.xml': parser.error ('.xml file needed file needed')
    52     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     if not os.path.exists (fnmext): parser.error ('%s does not exist' % fnmext)
    53 
    54 
    54     noten = xml2b40.xml2b40 (fnmext, options.t, options.C5)
    55     noten = xml2b40.xml2b40 (fnmext, options.t, options.C5)
    55     regels = mkAna (noten, fnmext)
    56     regels = mkAna (noten, fnmext)
    56     print '\n'.join (regels)
    57     print ('\n'.join (regels))