- commit
- 7ff3ea8c0f2c3046dde2d0fc35c101f2af5bcebf
- parent
- 4960e95bb293eacd6aceec37e4812500d45d2cb5
- Author
- Tobias Bengfort <tobias.bengfort@posteo.de>
- Date
- 2023-09-19 08:43
rename parser to renderer
Diffstat
| R | iparser.py -> renderer.py | 26 | +++++++++++++------------- |
| M | xi2.py | 4 | ++-- |
2 files changed, 15 insertions, 15 deletions
diff --git a/iparser.py b/renderer.py
@@ -4,7 +4,7 @@ import midi 4 4 # and noteOff events 5 5 6 67 -1 class IParser:-1 7 class Renderer: 8 8 """Convert intermediate code to MIDI bytecode.""" 9 9 10 10 def __init__(self, midi, seq, ch=0, offset=60): @@ -14,7 +14,7 @@ class IParser: 14 14 self.dt = 0 15 15 self.dt_stack = [] 16 16 self.stack = []17 -1 self.parse_seq(seq)-1 17 self.render_seq(seq) 18 18 19 19 def dt_step(self): 20 20 a = 1.0 @@ -22,11 +22,11 @@ class IParser: 22 22 a /= i 23 23 return a 24 2425 -1 def parse_el(self, e):-1 25 def render_element(self, e): 26 26 if e.isdigit(): # note 27 27 self.midi.note_on(self.dt, self.ch, self.offset + int(e), 1) 28 28 self.dt = self.dt_step()29 -1 elif e == '-': # continue-1 29 elif e == '-': # hold 30 30 self.dt += self.dt_step() 31 31 elif e == '': # break 32 32 self.dt += self.dt_step() @@ -34,33 +34,33 @@ class IParser: 34 34 self.midi.lyrics(self.dt, e.replace('_', ' ')) 35 35 self.dt = self.dt_step() 36 3637 -1 def parse_seq(self, seq):-1 37 def render_seq(self, seq): 38 38 self.dt_stack.append(len(seq)) 39 39 for e in seq: 40 40 if isinstance(e, str): 41 41 if e != '-': 42 42 self.stop() 43 43 self.stack.append(e)44 -1 self.parse_el(e)-1 44 self.render_element(e) 45 45 elif isinstance(e, set): 46 46 if '-' not in e: 47 47 self.stop() 48 48 self.stack.append(e)49 -1 self.parse_set(e)-1 49 self.render_chord(e) 50 50 elif isinstance(e, list):51 -1 self.parse_seq(e)-1 51 self.render_seq(e) 52 52 else: 53 53 raise ValueError("unknown element: " + e) 54 54 self.dt_stack.pop() 55 5556 -1 def parse_set(self, s):-1 56 def render_chord(self, s): 57 57 for e in s:58 -1 if type(e) != type(''):59 -1 raise ValueError("only elements are allowed inside sets: " + e)-1 58 if not isinstance(e, str): -1 59 raise ValueError("only elements are allowed inside chords: " + e) 60 60 elif e == '': 61 61 raise ValueError("Breaks are not allowed inside sets!") 62 62 else:63 -1 self.parse_el(e)-1 63 self.render_element(e) 64 64 self.dt = 0 65 65 self.dt = self.dt_step() 66 66 @@ -94,7 +94,7 @@ class IParser: 94 94 if __name__ == '__main__': 95 95 a = [[['0', '1'], '2'], '4', '5', '-', '', {'0', '4', '7'}, '', '', '0', {'3', '-'}] 96 96 t = midi.Midi()97 -1 ip = IParser(t, a, 0, 60)-1 97 ip = Renderer(t, a, 0, 60) 98 98 99 99 with open('test.mid', 'wb') as fh: 100 100 midi.write_file(fh, [t])
diff --git a/xi2.py b/xi2.py
@@ -4,7 +4,7 @@ import argparse 4 4 import re 5 5 6 6 import midi7 -1 from iparser import IParser-1 7 from renderer import Renderer 8 8 9 9 10 10 def parse(t): @@ -120,7 +120,7 @@ if __name__ == '__main__': 120 120 prog = 0 121 121 m.prog_ch(0, ch, prog) 122 122 # write data123 -1 IParser(m, track, ch=ch, offset=args.offset)-1 123 Renderer(m, track, ch=ch, offset=args.offset) 124 124 # write 125 125 midi_tracks.append(m) 126 126 ch += 1