xi2

a plain text language that compiles to MIDI
git clone https://git.ce9e.org/xi2.git

commit
1afa755b98c2e6bfff05ff00d60593d935f67762
parent
b4e06ad3d0e0674b706cffb025f64eb2a9c9a9ce
Author
Tobias Bengfort <tobias.bengfort@gmx.net>
Date
2012-07-31 17:29
argparse

Diffstat

M midi.py 2 +-
M xi2.py 19 ++++++++++++-------

2 files changed, 13 insertions, 8 deletions


diff --git a/midi.py b/midi.py

@@ -80,7 +80,7 @@ class Midi:
   80    80 	def ctrlEvent(self, dt, ctrl, v):
   81    81 		self.chEvent(dt, 0xB, ch, ctrl, v)
   82    82 
   83    -1 	def setVol(self, dt, ch, vol=1)
   -1    83 	def setVol(self, dt, ch, vol=1):
   84    84 		self.ctrlEvent(dt, ch, 0x07, int(vol * 0x7f))
   85    85 
   86    86 class MidiFile(Midi):

diff --git a/xi2.py b/xi2.py

@@ -1,19 +1,26 @@
    1     1 #!/usr/bin/env python
    2     2 
    3    -1 import sys
    4     3 import re
    5     4 from iparser import IParser
    6     5 from midi import Midi, MidiFile
   -1     6 import argparse
    7     7 
    8     8 # creates indermediate code from xi2 code
    9     9 # and than uses iparser to create midi bytecode
   10    10 
   -1    11 parser = argparse.ArgumentParser()
   -1    12 parser.add_argument('-t', '--tempo', help="tempo in bpm", default=120, type=int)
   -1    13 parser.add_argument('-o', '--offset', help="key offset", default=60, type=int)
   -1    14 parser.add_argument('infile')
   -1    15 parser.add_argument('outfile')
   -1    16 args = parser.parse_args()
   -1    17 
   11    18 def length(data):
   12    19 	data = re.sub('{[^}]*}', '', data)
   13    20 	data = re.sub('\([^\)]*\)', '', data)
   14    21 	return len(data.split(',')) - 1	
   15    22 
   16    -1 f = open(sys.argv[1])
   -1    23 f = open(args.infile)
   17    24 lines = f.readlines()
   18    25 f.close()
   19    26 
@@ -52,8 +59,6 @@ ll = re.sub('\\\\n', '\n', ll)
   52    59 # remove newlines at the end
   53    60 ll = re.sub('\n*$', '', ll)
   54    61 
   55    -1 print ll
   56    -1 
   57    62 def parse(t):
   58    63 	string = '';
   59    64 	stack = [[]]
@@ -97,7 +102,7 @@ mf = MidiFile()
   97   102 
   98   103 # create first track with meta infos
   99   104 m = Midi()
  100    -1 m.setTempo(25)
   -1   105 m.setTempo(args.tempo)
  101   106 mf.addTrack(m)
  102   107 
  103   108 ch = 0
@@ -109,11 +114,11 @@ for name, track in tracks.iteritems():
  109   114 	except ValueError: prog = 0
  110   115 	m.progCh(0, ch, prog)
  111   116 	# write data
  112    -1 	ip = IParser(track, ch=ch, offset=76)
   -1   117 	ip = IParser(track, ch=ch, offset=args.offset)
  113   118 	m += ip.midi
  114   119 	# write
  115   120 	mf.addTrack(m)
  116   121 	ch += 1
  117   122 
  118   123 # write to file
  119    -1 mf.write('test.mid')
   -1   124 mf.write(args.outfile)