sine_table_generator.py 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. #!/usr/bin/env python3
  2. import math
  3. import sys
  4. # 1HZ == 1 sine
  5. # sample rate at 44100Hz, sine at 441Hz -> 441 sines in 44100 samples -> 44100/441 samples/sine
  6. sine_array = '''
  7. // input signal: pre-computed int16 sine wave, {sine_sample_rate} Hz at {sine_frequency} Hz
  8. static const int16_t sine_int16[] = {{'''
  9. VALUES_PER_LINE = 10
  10. sine_sample_rate = 44100
  11. sine_frequency = 441
  12. if __name__ == "__main__":
  13. usage = '''
  14. Usage: ./sine_table_generator.py sine_frequency sine_sample_rate
  15. '''
  16. if (len(sys.argv) < 3):
  17. print(usage)
  18. sys.exit(1)
  19. sine_frequency = int(sys.argv[1])
  20. sine_sample_rate = int(sys.argv[2])
  21. if sine_frequency <= 0:
  22. print(usage)
  23. sys.exit(1)
  24. if sine_sample_rate <= 0:
  25. print(usage)
  26. sys.exit(1)
  27. sine_num_samples = int(sine_sample_rate/sine_frequency)
  28. print(type(sine_num_samples).__name__)
  29. print(sine_array.format(sine_sample_rate=sine_sample_rate, sine_frequency=sine_frequency))
  30. items = 0
  31. for sample in range(0,sine_num_samples):
  32. items = items + 1
  33. angle = (sample * 360.0) / sine_num_samples
  34. sine = math.sin(math.radians(angle))
  35. rescaled = int(round(sine * 32767))
  36. print ("%6d, " % rescaled, end=''),
  37. if items == VALUES_PER_LINE:
  38. items = 0
  39. print("")
  40. print( "};")