audiogen.py 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. from __future__ import print_function
  2. import sys
  3. import argparse
  4. from .entrypoints_utils import get_one_entrypoint
  5. import json
  6. from logging import getLogger
  7. log = getLogger("audiogen")
  8. def get_audiogenerator(kind):
  9. """Messes with entrypoints to return an audiogenerator function"""
  10. return get_one_entrypoint("larigira.audiogenerators", kind)
  11. def get_parser():
  12. parser = argparse.ArgumentParser(description="Generate audio and output paths")
  13. parser.add_argument(
  14. "audiospec",
  15. metavar="AUDIOSPEC",
  16. type=str,
  17. nargs=1,
  18. help="filename for audiospec, formatted in json",
  19. )
  20. return parser
  21. def read_spec(fname):
  22. try:
  23. if fname == "-":
  24. return json.load(sys.stdin)
  25. with open(fname) as buf:
  26. return json.load(buf)
  27. except ValueError:
  28. sys.stderr.write("Error: invalid JSON\n")
  29. sys.exit(1)
  30. def check_spec(spec):
  31. if "kind" not in spec:
  32. yield "Missing field 'kind'"
  33. def audiogenerate(spec):
  34. gen = get_audiogenerator(spec["kind"])
  35. return tuple(gen(spec))
  36. def main():
  37. """Main function for the "larigira-audiogen" executable"""
  38. args = get_parser().parse_args()
  39. spec = read_spec(args.audiospec[0])
  40. errors = tuple(check_spec(spec))
  41. if errors:
  42. log.error("Errors in audiospec")
  43. for err in errors:
  44. sys.stderr.write("Error: {}\n".format(err))
  45. sys.exit(1)
  46. for path in audiogenerate(spec):
  47. print(path)
  48. if __name__ == "__main__":
  49. main()