OUTPUT_RATE = 8125
MAX = 95
-def gen_sine(freq, secs):
+def gen_sine(freq, secs, volume):
filename = 'beep%s.pcm' % freq
# We generate freq cycles and sample that OUTPUT_RATE times
per_cycle = OUTPUT_RATE / freq
data = []
for x in range(per_cycle):
rad = float(x) / per_cycle * 2 * math.pi
- y = 256 * int(MAX * math.sin(rad))
+ y = 256 * int(volume * math.sin(rad))
data.extend([struct.pack('<i', y)] * 4)
output = open(filename, 'w')
# This is correct because OUTPUT_RATE = CDDA rate / 4 and we repeat
def usage():
print 'Unexpected input'
- print 'Usage gen_sound <freq> [<length>]'
+ print 'Usage gen_sound <freq> [<length>] [<volume>]'
print ' where <freq> is the frequency in Hz (int)'
- print ' and [<length>] is the time in seconds (float) - default 0.25'
+ print ' [<length>] is the time in seconds (float) - default 0.25'
+ print ' and [<volume>] is the volume (integer between 0 and 127) - default %s' % MAX
if __name__ == "__main__":
secs = float(sys.argv[2])
else:
secs = 0.25
+ if len(sys.argv) > 3:
+ volume = int(sys.argv[3])
+ else:
+ volume = MAX
except Exception, exc:
usage()
print 'Error was', exc
sys.exit(1)
- gen_sine(freq, secs)
+ if volume > 128 or volume < 0:
+ usage()
+ print 'Invalid volume: %s' % volume
+ sys.exit(1)
+
+ if freq > 2000 or freq < 100:
+ usage()
+ print 'Invalid freq: %s' % volume
+ sys.exit(1)
+
+
+ gen_sine(freq, secs, volume)