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()