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
+ per_cycle = OUTPUT_RATE // freq
data = []
for x in range(per_cycle):
rad = float(x) / per_cycle * 2 * math.pi
y = 256 * int(volume * math.sin(rad))
data.extend([struct.pack('<i', y)] * 4)
- output = open(filename, 'w')
+ output = open(filename, 'wb')
# This is correct because OUTPUT_RATE = CDDA rate / 4 and we repeat
# the samples 4 times, so this works out to CDDA rate
for x in range(int(freq * secs)):
- output.write(''.join(data))
+ output.write(b''.join(data))
output.close()
- print 'Wrote output to %s' % filename
+ print ('Wrote output to %s' % filename)
def usage():
- print 'Unexpected input'
- print 'Usage gen_sound <freq> [<length>] [<volume>]'
- print ' where <freq> is the frequency in Hz (int)'
- print ' [<length>] is the time in seconds (float) - default 0.25'
+ print ('Unexpected input')
+ print ('Usage gen_sound <freq> [<length>] [<volume>]')
+ print (' where <freq> is the frequency in Hz (int)')
+ print (' [<length>] is the time in seconds (float) - default 0.25')
print (' and [<volume>] is the volume (integer between 0 and 127)'
' - default %s' % DEFAULT_VOL)
volume = int(sys.argv[3])
else:
volume = DEFAULT_VOL
- except Exception, exc:
+ except Exception as exc:
usage()
- print 'Error was', exc
+ print ('Error was: %s' % exc)
sys.exit(1)
if volume > 128 or volume < 0:
usage()
- print 'Invalid volume: %s' % volume
+ print ('Invalid volume: %s' % volume)
sys.exit(1)
if freq > 2000 or freq < 100:
usage()
- print 'Invalid freq: %s' % volume
+ print ('Invalid freq: %s' % volume)
sys.exit(1)
gen_sine(freq, secs, volume)