xml2b40.py
author wim
Thu, 08 Jun 2023 09:40:19 +0200
changeset 6 193999e56a90
parent 1 7fd6cac1a69d
permissions -rwxr-xr-x
- veranderingen voor python3
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
     1
#!/usr/bin/env python
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
     2
# coding: latin-1
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
     3
''' Maakt een .b40 file uit een .xml file (MusicXML).
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
     4
muziek = [parts], part = [maten], maat = [voices]
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
     5
voice = [[dur, tijd, noot1, noot2, ....]]
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
     6
per part: len (voices) = maxvoice
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
     7
vceCnt telt het aantal stemmen in het hele stuk (d.w.z. over meerdere parts)
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
     8
In deze versie worden eerst alle noten in één part archter elkaar gezet en dan pas worden
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
     9
gebonden noten samengevoegd. Dit in verband met het terugzetten van de tijd door backup, waardoor
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    10
eem gebonden noot tussen twee stemmen verloren gaat als voor de backup (naar de andere stem)
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    11
de noot nog een keer voorkomt.
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    12
'''
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    13
import operator, sys, os
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    14
import xml.etree.ElementTree as E
6
193999e56a90 - veranderingen voor python3
wim
parents: 1
diff changeset
    15
from functools import reduce
1
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    16
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    17
b40List = ['Cbb','Cb','C','C#','C##','-','Dbb','Db','D','D#','D##','-','Ebb','Eb','E','E#','E##','Fbb','Fb','F',
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    18
           'F#','F##','-','Gbb','Gb','G','G#','G##','-','Abb','Ab','A','A#','A##','-','Bbb','Bb','B','B#','B##']
6
193999e56a90 - veranderingen voor python3
wim
parents: 1
diff changeset
    19
b40Dict = dict (list (zip(b40List, range(len (b40List)))))
1
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    20
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    21
gtikkenPerKwart = 384   # ticks per quarter note
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    22
gC5 = False             # central C == C5 if gC5 else C4
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    23
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    24
def ntB40 (p, o, alt):
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    25
    if alt:
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    26
        alt = int (alt)
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    27
        while alt > 0: p += '#'; alt -= 1
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    28
        while alt < 0: p += 'b'; alt += 1
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    29
    b40 = o * 40 + b40Dict[p] + 1
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    30
    return str (b40)
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    31
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    32
def doNote (n):
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    33
    global tijd, maxVoice
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    34
    chord = n.find ('chord') != None
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    35
    p = n.findtext ('pitch/step')
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    36
    alt = n.findtext ('pitch/alter')
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    37
    o = n.findtext ('pitch/octave')
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    38
    r = n.find ('rest')
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    39
    dur = int (n.findtext ('duration'))
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    40
    v = int (n.findtext ('voice')) - 1
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    41
    if v > maxVoice: maxVoice = v
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    42
    if r != None: noot = 'z'
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    43
    else: noot = ntB40 (p, int (o) + (1 if gC5 else 0), alt)
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    44
    tie = n.find ('tie')
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    45
    if tie != None and tie.get ('type') == 'stop': noot = '-' + noot
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    46
    if chord: addChord (v, noot)
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    47
    else:     appendNote (v, dur, noot)
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    48
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    49
def doAttr (e):
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    50
    global durUnit
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    51
    kmaj = ['Cb','Gb','Dd','Ab','Eb','Bb','F','C','G','D','A', 'E', 'B', 'F#','C#']
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    52
    kmin = ['Ab','Eb','Bb','F', 'C', 'G', 'D','A','E','B','F#','C#','G#','D#','A#']
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    53
    dvstxt = e.findtext ('divisions')
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    54
    if dvstxt: # niet alle attribuut knopen hebben een divisions (b.v. key change)
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    55
        #~ print 'divisions per kwart', int (dvstxt)
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    56
        durUnit = int (dvstxt)
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    57
    key = ''
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    58
    f = e.findtext ('key/fifths')
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    59
    m = e.findtext ('key/mode')
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    60
    if m == 'major': key = kmaj [7 + int (f)]
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    61
    if m == 'minor': key = kmin [7 + int (f)] + 'min'
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    62
    if key:
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    63
        for v in range (nVoices): appendNote (v, 0, 'K:%s\n' % key)
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    64
    beats = e.findtext ('time/beats')
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    65
    if beats:
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    66
        met = beats + '/' + e.findtext ('time/beat-type')
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    67
        for v in range (nVoices): appendNote (v, 0, 'M:%s\n' % met)
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    68
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    69
def appendNote (v, dur, noot):
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    70
    global tijd
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    71
    t = vtimes [v]
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    72
    if tijd > t: voices [v].append ([tijd - t, t, 'z'])
6
193999e56a90 - veranderingen voor python3
wim
parents: 1
diff changeset
    73
    if tijd < t: raise Exception ('kenniet')
1
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    74
    voices [v].append ([dur, tijd, noot])
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    75
    tijd += int (dur)
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    76
    vtimes[v] = tijd
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    77
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    78
def addChord (v, noot):
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    79
    t = voices[v][-1]
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    80
    voices[v][-1] = t + [noot]
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    81
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    82
def addBar ():
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    83
    global voices
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    84
    for v in range (nVoices): appendNote (v, 0, ' |\n')
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    85
    gMaten.append (voices)
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    86
    voices = [[] for i in range (nVoices)]
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    87
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    88
def outMaat (i, mbuf, ns):
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    89
    for nx in mbuf:
6
193999e56a90 - veranderingen voor python3
wim
parents: 1
diff changeset
    90
        dur = int (nx[0]  * gTikkenPerKwart / durUnit)
193999e56a90 - veranderingen voor python3
wim
parents: 1
diff changeset
    91
        tijd = int (nx[1] * gTikkenPerKwart / durUnit)
1
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    92
        if not dur: continue # alleen echte noten
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    93
        for noot in nx[2:]: # de noot of noten in chord
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    94
            if 'z' in noot: continue # skip rusten
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    95
            ns.append ((tijd, noot, dur))
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    96
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    97
def remTies (ns):
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    98
    global noten
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
    99
    tieBufDur = {}  # tijdelijk vasthouden van noten voor evt. volgende tie
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   100
    tieBufTijd = {} # twee aparte buffers voor duur en tijd
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   101
    ns.sort ()
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   102
    for tijd, noot, dur in ns: # nu nog voor gebonden noten checken
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   103
        if noot.startswith ('-'): tieBufDur [noot[1:]] += dur
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   104
        else:
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   105
            if noot in tieBufDur: # bij de volgdende niet gebonden noot vorige uitvoeren
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   106
                noten.append ((tieBufTijd [noot], noot, tieBufDur[noot]))
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   107
            tieBufTijd [noot] = tijd # alle noten vast houden voor evt. volgende tie
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   108
            tieBufDur [noot] = dur
6
193999e56a90 - veranderingen voor python3
wim
parents: 1
diff changeset
   109
    for noot, dur in tieBufDur.items (): # alle vastgehouden noten nu uitvoeren
1
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   110
        noten.append ((tieBufTijd[noot], noot, dur))
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   111
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   112
def outVoices (vceCnt):         # output alle stemmen in een part, nummering begint bij vceCnt
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   113
    global tijd, gMaten, voices, vtimes, tupcnt, maxVoice, noten
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   114
    ns = []
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   115
    for maat in gMaten: # aantal gebruikte voices in gMaten = maxVoice + 1
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   116
        mbuf = reduce (operator.concat, maat[:maxVoice + 1]) # plak de gebruikte voices aanelkaar
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   117
        outMaat (vceCnt, mbuf, ns)    # alle stemmen in deze maat => ns, en nummer telkens vanaf vceCnt
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   118
    remTies (ns)
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   119
    vceCnt += maxVoice + 1 # de volgende part start met aansluitend hogere voice nummers
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   120
    gMaten = []
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   121
    voices = [[] for i in range (nVoices)]
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   122
    vtimes = nVoices * [0]
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   123
    tijd = 0
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   124
    tupcnt = 0
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   125
    maxVoice = 0
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   126
    return vceCnt
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   127
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   128
def xml2b40 (fnmext, tpk=384, C5=1): # base name, ticks per quarter, central C == C5
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   129
    global nVoices, gMaten, voices, vtimes, tijd, tupcnt, maxVoice, vceCnt, noten, gTikkenPerKwart, gC5
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   130
    gTikkenPerKwart = tpk
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   131
    gC5 = C5
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   132
    nVoices = 10
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   133
    gMaten = []
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   134
    voices = [[] for i in range (nVoices)]
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   135
    vtimes = nVoices * [0]
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   136
    tijd = 0
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   137
    tupcnt = 0
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   138
    maxVoice = 0
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   139
    vceCnt = 1
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   140
    noten = []
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   141
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   142
    e = E.parse (fnmext)
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   143
    parts = e.findall ('part')
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   144
    noten = []      # de uitvoer van alle noten
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   145
    for p in parts:
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   146
        maten = p.findall ('measure')
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   147
        for maat in maten:
6
193999e56a90 - veranderingen voor python3
wim
parents: 1
diff changeset
   148
            es = list (maat) # alle kinderen van maat
1
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   149
            for e in es:
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   150
                if e.tag == 'note': doNote (e)
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   151
                elif e.tag == 'attributes': doAttr (e)
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   152
                elif e.tag == 'backup':
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   153
                    dt = int (e.findtext ('duration'))
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   154
                    tijd -= dt
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   155
                elif e.tag == 'forward':
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   156
                    dt = int (e.findtext ('duration'))
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   157
                    tijd += dt
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   158
                else: pass
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   159
            addBar ()
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   160
        vceCnt = outVoices (vceCnt)
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   161
    offnoten = []
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   162
    for tijd, noot, dur in noten:
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   163
        noot = int (noot) # straks numeriek ordenen i.v.m. vergelijken oude b40 files
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   164
        offnoten.append ((tijd, noot))
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   165
        offnoten.append ((tijd + dur, -noot))
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   166
    noten = offnoten
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   167
    noten.sort ()
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   168
    return noten
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   169
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   170
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   171
if __name__ == '__main__':
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   172
    from optparse import OptionParser
6
193999e56a90 - veranderingen voor python3
wim
parents: 1
diff changeset
   173
    parser = OptionParser (usage='%prog [-h] [-t TPQ] [--C5] [-w] <file1>')
1
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   174
    parser.add_option ("-t", action="store", type="int", help="ticks per quarternote", default=120, metavar='TPQ')
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   175
    parser.add_option ("--C5", action="store_true", help="central C is C5", default=False)
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   176
    parser.add_option ("-w", action="store_true", help="write .b40 file", default=False)
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   177
    options, args = parser.parse_args ()
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   178
    if len (args) < 1: parser.error ('file argument needed')
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   179
    fnmext = args [0]
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   180
    fnm, ext = os.path.splitext (fnmext)
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   181
    if ext != '.xml': parser.error ('.xml file needed file needed')
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   182
    if not os.path.exists (fnmext): parser.error ('%s does not exist' % fnmext)
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   183
    xml2b40 (fnmext, options.t, options.C5)
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   184
    if options.w:
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   185
        g = file (fnm + '.b40', 'w')
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   186
        for tijd, noot in noten: g.write ('%d %s\n' % (tijd, noot))
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   187
        g.close ()
6
193999e56a90 - veranderingen voor python3
wim
parents: 1
diff changeset
   188
        print(fnm + '.b40 written')
1
7fd6cac1a69d - hard link to segLibB40 added
wim
parents:
diff changeset
   189
    else:
6
193999e56a90 - veranderingen voor python3
wim
parents: 1
diff changeset
   190
        for tijd, noot in noten: print(tijd, noot)