Pipe stdin to soundcard using SDL
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

sin.py 1.5KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. #!/usr/bin/python3
  2. import argparse
  3. import sys
  4. from synth import *
  5. parser = argparse.ArgumentParser(description="Generate sinwaves")
  6. parser.add_argument("--output-freq", "-f", type=int, default=48000)
  7. parser.add_argument("--bit-size", "-B", choices=['8','16','32'], default='8',
  8. help="Output numbers bit size")
  9. parser.add_argument("--endianess", "-e", choices=['big', 'little'],
  10. default='little')
  11. parser.add_argument("--signed", "-S", action="store_true", default=False)
  12. parser.add_argument("--float32", "-F", action="store_true", default=False)
  13. parser.add_argument("--samples", "-s", type=int, default=4096)
  14. parser.add_argument("--channels", "-c", type=int, default=2)
  15. parser.add_argument("--angle-step", "-a", type=float, default=.075)
  16. args = parser.parse_args()
  17. args.bit_size = int(args.bit_size)
  18. print(args, file=sys.stderr)
  19. if args.float32:
  20. samples = sinwave_float32(step=args.angle_step, endianess=args.endianess)
  21. buff = bytearray([0 for _ in range(args.samples*args.channels*4)])
  22. while True:
  23. for i in range(0,args.samples*args.channels,4):
  24. buff[i:i+4] = next(samples)
  25. sys.stdout.buffer.write(buff)
  26. exit(0)
  27. wv0 = sinwave(args.angle_step, bitsz=args.bit_size, signed=args.signed)
  28. samples = output_sampler(wv0, channels=args.channels, samples=args.samples,
  29. freq=args.output_freq, bitsz=args.bit_size,
  30. endianess=args.endianess, signed=args.signed)
  31. while True:
  32. smpl = next(samples)
  33. sys.stdout.buffer.write(smpl)
  34. exit(0)