sonnum/snm.py

55 lines
No EOL
1.5 KiB
Python

import argparse
import os
from pysonnum.compiler import *
# USAGE
# python snm.py path_to.snm output.wav
parser = argparse.ArgumentParser(description="Sonnum - the additive synthesizer.")
parser.add_argument('input_snm_fn', metavar="INPUT", nargs='?', type=str, help="Input *.snm source file", default='')
parser.add_argument('-b', '--bytecode', help="View the resulting bytecode", action='store_true')
parser.add_argument('-r', '--rebuild', help="Rebuild the executable", action='store_true')
parser.add_argument('-z', '--zigrun', help="Zig run instead of executable", action='store_true')
parser.add_argument('-o', '--output', metavar='FN', help="Synthesize to given wav filenames", type=str)
def run():
args = parser.parse_args()
C = SonnumCompiler()
if args.rebuild:
os.system(f'zig build-exe zigsonnum/sonnum.zig -lc -OReleaseFast')
else:
fn = args.input_snm_fn
with open(fn, 'r', encoding = 'utf-8') as fl:
snm = fl.read()
if args.bytecode:
py_snm = C.transpile_snm_to_py(snm)
C.run_transpiled_code(py_snm)
C.sort_activities()
C.list_activities()
elif args.output:
C.compile_to_smnb(snm, 'source.snmb')
os.system(f'./sonnum > {args.output}')
elif args.zigrun:
C.compile_to_smnb(snm, 'source.snmb')
os.system(f'zig run zigsonnum/sonnum.zig -lc > {fn}.wav')
else:
C.compile_to_smnb(snm, 'source.snmb')
os.system(f'./sonnum > {fn}.wav')
#os.system(f'zig run zigsonnum/sonnum.zig -lc > {fn}.wav')
if __name__ == '__main__':
run()