1*5c544019SMatthias Ringwald#!/usr/bin/env python3 21c326df3SMilanka Ringwaldimport math 31c326df3SMilanka Ringwaldimport sys 41c326df3SMilanka Ringwald 51c326df3SMilanka Ringwald# 1HZ == 1 sine 61c326df3SMilanka Ringwald# sample rate at 44100Hz, sine at 441Hz -> 441 sines in 44100 samples -> 44100/441 samples/sine 71c326df3SMilanka Ringwald 81c326df3SMilanka Ringwaldsine_array = ''' 91c326df3SMilanka Ringwald// input signal: pre-computed int16 sine wave, {sine_sample_rate} Hz at {sine_frequency} Hz 101c326df3SMilanka Ringwaldstatic const int16_t sine_int16[] = {{''' 111c326df3SMilanka Ringwald 121c326df3SMilanka RingwaldVALUES_PER_LINE = 10 131c326df3SMilanka Ringwaldsine_sample_rate = 44100 141c326df3SMilanka Ringwaldsine_frequency = 441 151c326df3SMilanka Ringwald 161c326df3SMilanka Ringwaldif __name__ == "__main__": 171c326df3SMilanka Ringwald usage = ''' 18293fd5fbSMilanka Ringwald Usage: ./sine_table_generator.py sine_frequency sine_sample_rate 191c326df3SMilanka Ringwald ''' 201c326df3SMilanka Ringwald 211c326df3SMilanka Ringwald if (len(sys.argv) < 3): 221c326df3SMilanka Ringwald print(usage) 231c326df3SMilanka Ringwald sys.exit(1) 241c326df3SMilanka Ringwald 251c326df3SMilanka Ringwald sine_frequency = int(sys.argv[1]) 261c326df3SMilanka Ringwald sine_sample_rate = int(sys.argv[2]) 271c326df3SMilanka Ringwald 281c326df3SMilanka Ringwald if sine_frequency <= 0: 291c326df3SMilanka Ringwald print(usage) 301c326df3SMilanka Ringwald sys.exit(1) 311c326df3SMilanka Ringwald 321c326df3SMilanka Ringwald if sine_sample_rate <= 0: 331c326df3SMilanka Ringwald print(usage) 341c326df3SMilanka Ringwald sys.exit(1) 351c326df3SMilanka Ringwald 36*5c544019SMatthias Ringwald sine_num_samples = int(sine_sample_rate/sine_frequency) 37*5c544019SMatthias Ringwald print(type(sine_num_samples).__name__) 381c326df3SMilanka Ringwald print(sine_array.format(sine_sample_rate=sine_sample_rate, sine_frequency=sine_frequency)) 391c326df3SMilanka Ringwald items = 0 401c326df3SMilanka Ringwald for sample in range(0,sine_num_samples): 411c326df3SMilanka Ringwald items = items + 1 421c326df3SMilanka Ringwald angle = (sample * 360.0) / sine_num_samples 431c326df3SMilanka Ringwald sine = math.sin(math.radians(angle)) 441c326df3SMilanka Ringwald rescaled = int(round(sine * 32767)) 45*5c544019SMatthias Ringwald print ("%6d, " % rescaled, end=''), 461c326df3SMilanka Ringwald if items == VALUES_PER_LINE: 471c326df3SMilanka Ringwald items = 0 48*5c544019SMatthias Ringwald print("") 491c326df3SMilanka Ringwald 501c326df3SMilanka Ringwald print( "};") 51