audiogen.py 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  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(
  13. description='Generate audio and output paths')
  14. parser.add_argument('audiospec', metavar='AUDIOSPEC', type=str, nargs=1,
  15. help='filename for audiospec, formatted in json')
  16. return parser
  17. def read_spec(fname):
  18. try:
  19. if fname == '-':
  20. return json.load(sys.stdin)
  21. with open(fname) as buf:
  22. return json.load(buf)
  23. except ValueError:
  24. sys.stderr.write("Error: invalid JSON\n")
  25. sys.exit(1)
  26. def check_spec(spec):
  27. if 'kind' not in spec:
  28. yield "Missing field 'kind'"
  29. def audiogenerate(spec):
  30. gen = get_audiogenerator(spec['kind'])
  31. return tuple(gen(spec))
  32. def main():
  33. '''Main function for the "larigira-audiogen" executable'''
  34. args = get_parser().parse_args()
  35. spec = read_spec(args.audiospec[0])
  36. errors = tuple(check_spec(spec))
  37. if errors:
  38. log.error("Errors in audiospec")
  39. for err in errors:
  40. sys.stderr.write('Error: {}\n'.format(err))
  41. sys.exit(1)
  42. for path in audiogenerate(spec):
  43. print(path)
  44. if __name__ == '__main__':
  45. main()