#!/usr/bin/env python3 """Pre-render functions into a file. Uses the pickle module to serialize the render. There are some caveats to this: - Audio filepaths are stored absolutely, so this should be run on the system that will be running the show, or take care to ensure that the directory structure is identical - Audio lengths are ignored """ import pickle import sys from blc.workspace import Workspace, PreRenderable if len(sys.argv) not in (3,4,): print("Usage: %s [output file]" % sys.argv[0]) sys.exit(1) minnx = 10 w = Workspace.load(sys.argv[1]) func = w.functions[int(sys.argv[2])] if not issubclass(type(func), PreRenderable): raise ValueError("The given function may not be rendered") if len(sys.argv) == 4: ofname = sys.argv[3] else: ofname = func.name+".pickle" print("Storing to", ofname) with open(ofname, "wb") as f: print("Rendering", func.name) p = pickle.Pickler(f) try: render = func.render_all(minnx=minnx) except ValueError: print("Cannot render", func.name) else: print("Storing render") p.dump(render) print("Done!")