annotate tools/gen_sound.py @ 245:f87a3485d927

Add tool for making beeps
author Neil Muller <neil@dip.sun.ac.za>
date Fri, 27 Aug 2010 13:22:32 +0200
parents
children 913257638e6f
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
f87a3485d927 Add tool for making beeps
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
3 # Design notes: produces ~= 0.5s raw CDDA audio - 44100 Hz, 16 bit signed values
f87a3485d927 Add tool for making beeps
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
4 # 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
5 # Output is written the file beep<freq>.pcm
f87a3485d927 Add tool for making beeps
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
6 # Convert to ogg with oggenc -r <file>
f87a3485d927 Add tool for making beeps
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
7
f87a3485d927 Add tool for making beeps
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
8 import sys
f87a3485d927 Add tool for making beeps
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
9 import math
f87a3485d927 Add tool for making beeps
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
10 import struct
f87a3485d927 Add tool for making beeps
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
11
f87a3485d927 Add tool for making beeps
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
12
f87a3485d927 Add tool for making beeps
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
13 CDDA_RATE = 44100
f87a3485d927 Add tool for making beeps
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
14 MAX = 105*256 # Max value for sine wave
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 def gen_sine(freq):
f87a3485d927 Add tool for making beeps
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
17 filename = 'beep%s.pcm' % freq
f87a3485d927 Add tool for making beeps
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
18 # 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
19 samples_per_cycle = CDDA_RATE / freq
f87a3485d927 Add tool for making beeps
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
20 data = []
f87a3485d927 Add tool for making beeps
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
21 for x in range(samples_per_cycle):
f87a3485d927 Add tool for making beeps
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
22 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
23 y = MAX * math.sin(rad)
f87a3485d927 Add tool for making beeps
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
24 data.append(struct.pack('<i', y))
f87a3485d927 Add tool for making beeps
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
25 output = open(filename, 'w')
f87a3485d927 Add tool for making beeps
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
26 for x in range(freq/2):
f87a3485d927 Add tool for making beeps
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
27 output.write(''.join(data))
f87a3485d927 Add tool for making beeps
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
28 output.close()
f87a3485d927 Add tool for making beeps
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
29
f87a3485d927 Add tool for making beeps
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
30
f87a3485d927 Add tool for making beeps
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
31 if __name__ == "__main__":
f87a3485d927 Add tool for making beeps
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
32 freq = int(sys.argv[1])
f87a3485d927 Add tool for making beeps
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
33 gen_sine(freq)