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