After python is installed, we need this script which uses standard libraries.
# createWav.py
import re,os,sys
ForNum = r'for (\w+) in range\((\w+)\):'
ForLen = r'for (\w+) in range\(len\((\w+)\)\):'
While = r'while\s+(.+):'
If = r'if\s+(.+):'
Fun = r'def (.+):'
Else = r'else:'
Elif = r'elif\s+(.+):'
Title = r'# (\w+)\.py (.+)'
res = {}
res['ForNum'] = None
res['ForLen'] = None
res['While'] = None
res['If'] = None
res['Fun'] = None
res['Else'] = None
res['Elif'] = None
def defineRes(s):
res['ForNum'] = re.match(ForNum,s)
if not res['ForNum']: res['ForLen'] = re.match(ForLen,s)
else: return
if not res['ForLen']: res['While'] = re.match(While,s)
else: return
if not res['While']: res['If'] = re.match(If,s)
else: return
if not res['If']: res['Fun'] = re.match(Fun,s)
else: return
if not res['Fun']: res['Else'] = re.match(Else,s)
else: return
if not res['Else']: res['Elif'] = re.match(Elif,s)
def createWav(rec,prefix):
fin = open('%s.py' % prefix)
T = fin.readlines()
fin.close()
T=[t.rstrip() for t in T]
indent = []
for t in T:
indent.append(len(t)-len(t.lstrip()))
S = [t.lstrip() for t in T]
u = []
for i in range(len(indent)-1):
u.append(indent[i+1]-indent[i])
u.append(0-indent[len(indent)-1])
Array = r'(\w+ \w+\[\])\s*=\s*(\[.+\])'
Time = r'time\((.+)\)'
Print = r'print\((.+)\)'
fw = []
for i,s in enumerate(S):
if i == 0:
resultTitle = re.match(Title,s)
r1 = resultTitle.group(1)
r2 = resultTitle.group(2)
out = '// %s.ck %s' % (r1,r2)
elif s == '':
out = ''
elif s[:6] == 'print(':
resultPR = re.match(Print,s)
r1 = resultPR.group(1)
out = '<<<%s>>>;' % r1
elif s[0]=='#':
out = '//%s' % s[1:]
elif s.endswith(':'):
defineRes(s)
if res['ForNum']:
r1 = res['ForNum'].group(1)
r2 = res['ForNum'].group(2)
tup = r1,r1,r2,r1
out = 'for (0 => int %s; %s<%s; %s++) {' % tup
elif res['ForLen']:
r1 = res['ForLen'].group(1)
r2 = res['ForLen'].group(2)
tup = r1,r1,r2,r1
out ='for (0 => int %s; %s<%s.cap(); %s++) {' % tup
elif res['While']:
r1 = res['While'].group(1)
out = 'while (%s) {' % r1
elif res['If']:
r1 = res['If'].group(1)
out = 'if (%s) {' % r1
elif res['Fun']:
r1 = res['Fun'].group(1)
out = 'fun %s {' % r1
elif res['Else']:
out = 'else {'
elif res['Elif']:
r1 = res['Elif'].group(1)
out = 'else if (%s) {' % r1
else:
print('I do not know what you want:')
sys.exit(-1)
elif s[:5] == 'time(':
resultT = re.match(Time,s)
r1 = resultT.group(1)
out = '%s => now;' % r1
elif s.find('=')<0: out = '%s;' % s
else:
resultArr = re.match(Array,s)
if resultArr:
r1 = resultArr.group(1)
r2 = resultArr.group(2)
out = '%s @=> %s;' % (r2,r1)
else:
result = s.split('=')
tup = result[1].strip(),result[0].strip()
out = '%s => %s;' % tup
out = ' '*indent[i] + out
fw.append(out+'\n')
for ivar in range(u[i]//-4):
out = ' '*(indent[i]-4*(ivar+1)) + '}\n'
fw.append(out)
if rec == 'stereo': fw.insert(2,'dac => WvOut2 w => blackhole;\n')
else: fw.insert(2,'dac => WvOut w => blackhole;\n')
fw.insert(3,'"%s.wav" => w.wavFilename;\n' % prefix)
fw.insert(4,'\n')
fout = open('%s.ck' % prefix,'w')
fout.writelines(fw)
fout.close()
os.system('chuck %s.ck' % prefix)
if __name__ == '__main__':
try: rec = sys.argv[2]
except: rec = 'mono'
prefix = sys.argv[1]
createWav(rec,prefix)
No comments:
Post a Comment