Mercurial > boomslang
annotate pyntnclick/tools/gen_sound.py @ 637:c27087877c84 pyntnclick
Mouse events propagate! Crashes galore!
author | Jeremy Thurgood <firxen@gmail.com> |
---|---|
date | Sun, 12 Feb 2012 00:59:49 +0200 |
parents | ebc48b397fd5 |
children |
rev | line source |
---|---|
245 | 1 # Generate 'perfect' sine wave sounds |
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 | 5 # Input is freq in Hz - 440 for A, etc. - must be an integer |
6 # Output is written the file beep<freq>.pcm | |
7 # Convert to ogg with oggenc -r <file> | |
8 | |
9 import sys | |
10 import math | |
11 import struct | |
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 | 15 |
16 | |
249 | 17 def gen_sine(freq, secs): |
245 | 18 filename = 'beep%s.pcm' % freq |
19 # We need to generate freq cycles and sample that CDDA_RATE times | |
20 samples_per_cycle = CDDA_RATE / freq | |
21 data = [] | |
22 for x in range(samples_per_cycle): | |
23 rad = float(x) / samples_per_cycle * 2 * math.pi | |
24 y = MAX * math.sin(rad) | |
25 data.append(struct.pack('<i', y)) | |
26 output = open(filename, 'w') | |
249 | 27 for x in range(int(freq * secs)): |
245 | 28 output.write(''.join(data)) |
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 | 31 |
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 | 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 | 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 | 54 else: |
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 |