annotate pyntnclick/tools/gen_sound.py @ 589:ebc48b397fd5 pyntnclick

Turn rect_drawer into a command line option
author Neil Muller <neil@dip.sun.ac.za>
date Sat, 11 Feb 2012 17:07:52 +0200
parents tools/gen_sound.py@15713dfe555d
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
245
f87a3485d927 Add tool for making beeps
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
1 # Generate 'perfect' sine wave sounds
f87a3485d927 Add tool for making beeps
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
2
537
5b9f371c2bb8 PEP-8 cleanup of tools
Stefano Rivera <stefano@rivera.za.net>
parents: 249
diff changeset
3 # Design notes: produces ~= (use requested) s raw CDDA audio - 44100 Hz
5b9f371c2bb8 PEP-8 cleanup of tools
Stefano Rivera <stefano@rivera.za.net>
parents: 249
diff changeset
4 # 16 bit signed values
245
f87a3485d927 Add tool for making beeps
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
5 # Input is freq in Hz - 440 for A, etc. - must be an integer
f87a3485d927 Add tool for making beeps
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
6 # Output is written the file beep<freq>.pcm
f87a3485d927 Add tool for making beeps
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
7 # Convert to ogg with oggenc -r <file>
f87a3485d927 Add tool for making beeps
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
8
f87a3485d927 Add tool for making beeps
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
9 import sys
f87a3485d927 Add tool for making beeps
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
10 import math
f87a3485d927 Add tool for making beeps
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
11 import struct
f87a3485d927 Add tool for making beeps
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
12
537
5b9f371c2bb8 PEP-8 cleanup of tools
Stefano Rivera <stefano@rivera.za.net>
parents: 249
diff changeset
13 CDDA_RATE = 44100
5b9f371c2bb8 PEP-8 cleanup of tools
Stefano Rivera <stefano@rivera.za.net>
parents: 249
diff changeset
14 MAX = 105 * 256 # Max value for sine wave
245
f87a3485d927 Add tool for making beeps
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
15
f87a3485d927 Add tool for making beeps
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
16
249
913257638e6f Add length parameter
Neil Muller <neil@dip.sun.ac.za>
parents: 245
diff changeset
17 def gen_sine(freq, secs):
245
f87a3485d927 Add tool for making beeps
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
18 filename = 'beep%s.pcm' % freq
f87a3485d927 Add tool for making beeps
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
19 # We need to generate freq cycles and sample that CDDA_RATE times
f87a3485d927 Add tool for making beeps
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
20 samples_per_cycle = CDDA_RATE / freq
f87a3485d927 Add tool for making beeps
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
21 data = []
f87a3485d927 Add tool for making beeps
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
22 for x in range(samples_per_cycle):
f87a3485d927 Add tool for making beeps
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
23 rad = float(x) / samples_per_cycle * 2 * math.pi
f87a3485d927 Add tool for making beeps
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
24 y = MAX * math.sin(rad)
f87a3485d927 Add tool for making beeps
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
25 data.append(struct.pack('<i', y))
f87a3485d927 Add tool for making beeps
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
26 output = open(filename, 'w')
249
913257638e6f Add length parameter
Neil Muller <neil@dip.sun.ac.za>
parents: 245
diff changeset
27 for x in range(int(freq * secs)):
245
f87a3485d927 Add tool for making beeps
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
28 output.write(''.join(data))
f87a3485d927 Add tool for making beeps
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
29 output.close()
552
15713dfe555d The new, friendlier gen_sound helper
Neil Muller <neil@dip.sun.ac.za>
parents: 537
diff changeset
30 return filename
245
f87a3485d927 Add tool for making beeps
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
31
f87a3485d927 Add tool for making beeps
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
32
552
15713dfe555d The new, friendlier gen_sound helper
Neil Muller <neil@dip.sun.ac.za>
parents: 537
diff changeset
33 def usage():
15713dfe555d The new, friendlier gen_sound helper
Neil Muller <neil@dip.sun.ac.za>
parents: 537
diff changeset
34 print 'Unexpected input'
15713dfe555d The new, friendlier gen_sound helper
Neil Muller <neil@dip.sun.ac.za>
parents: 537
diff changeset
35 print 'Usage: gen_sound.py <freq> [<length>]'
15713dfe555d The new, friendlier gen_sound helper
Neil Muller <neil@dip.sun.ac.za>
parents: 537
diff changeset
36 print ' where <freq> is the frequency in Hz (integer)'
15713dfe555d The new, friendlier gen_sound helper
Neil Muller <neil@dip.sun.ac.za>
parents: 537
diff changeset
37 print ' and [<length>] is the time is seconds (float)'
15713dfe555d The new, friendlier gen_sound helper
Neil Muller <neil@dip.sun.ac.za>
parents: 537
diff changeset
38
245
f87a3485d927 Add tool for making beeps
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
39 if __name__ == "__main__":
552
15713dfe555d The new, friendlier gen_sound helper
Neil Muller <neil@dip.sun.ac.za>
parents: 537
diff changeset
40 try:
15713dfe555d The new, friendlier gen_sound helper
Neil Muller <neil@dip.sun.ac.za>
parents: 537
diff changeset
41 freq = int(sys.argv[1])
15713dfe555d The new, friendlier gen_sound helper
Neil Muller <neil@dip.sun.ac.za>
parents: 537
diff changeset
42 except Exception, exc:
15713dfe555d The new, friendlier gen_sound helper
Neil Muller <neil@dip.sun.ac.za>
parents: 537
diff changeset
43 usage()
15713dfe555d The new, friendlier gen_sound helper
Neil Muller <neil@dip.sun.ac.za>
parents: 537
diff changeset
44 print 'Error was: %s' % exc
15713dfe555d The new, friendlier gen_sound helper
Neil Muller <neil@dip.sun.ac.za>
parents: 537
diff changeset
45 sys.exit(1)
15713dfe555d The new, friendlier gen_sound helper
Neil Muller <neil@dip.sun.ac.za>
parents: 537
diff changeset
46
249
913257638e6f Add length parameter
Neil Muller <neil@dip.sun.ac.za>
parents: 245
diff changeset
47 if len(sys.argv) > 2:
552
15713dfe555d The new, friendlier gen_sound helper
Neil Muller <neil@dip.sun.ac.za>
parents: 537
diff changeset
48 try:
15713dfe555d The new, friendlier gen_sound helper
Neil Muller <neil@dip.sun.ac.za>
parents: 537
diff changeset
49 secs = float(sys.argv[2])
15713dfe555d The new, friendlier gen_sound helper
Neil Muller <neil@dip.sun.ac.za>
parents: 537
diff changeset
50 except Exception, exc:
15713dfe555d The new, friendlier gen_sound helper
Neil Muller <neil@dip.sun.ac.za>
parents: 537
diff changeset
51 usage()
15713dfe555d The new, friendlier gen_sound helper
Neil Muller <neil@dip.sun.ac.za>
parents: 537
diff changeset
52 print 'Error was: %s' % exc
15713dfe555d The new, friendlier gen_sound helper
Neil Muller <neil@dip.sun.ac.za>
parents: 537
diff changeset
53 sys.exit(1)
249
913257638e6f Add length parameter
Neil Muller <neil@dip.sun.ac.za>
parents: 245
diff changeset
54 else:
913257638e6f Add length parameter
Neil Muller <neil@dip.sun.ac.za>
parents: 245
diff changeset
55 secs = 0.25
552
15713dfe555d The new, friendlier gen_sound helper
Neil Muller <neil@dip.sun.ac.za>
parents: 537
diff changeset
56 output = gen_sine(freq, secs)
15713dfe555d The new, friendlier gen_sound helper
Neil Muller <neil@dip.sun.ac.za>
parents: 537
diff changeset
57 print 'Wrote sample to %s' % output