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