The 0.5 release happened on 2/15, not on 2/14. :-)
[python/dscho.git] / Demo / sgi / audio / play.py
blob68a6a31bbbbffb81e553da0c6455d41f802d7197
1 #! /usr/bin/env python
3 import sys
4 import audio
6 import string
7 import getopt
8 import auds
10 debug = []
12 DEF_RATE = 3
14 def main():
16 gain = 100
17 rate = 0
18 starter = audio.write
19 stopper = 0
21 optlist, args = getopt.getopt(sys.argv[1:], 'adg:r:')
23 for optname, optarg in optlist:
24 if 0:
25 pass
26 elif optname == '-d':
27 debug.append(1)
28 elif optname == '-g':
29 gain = string.atoi(optarg)
30 if not (0 < gain < 256):
31 raise optarg.error, '-g gain out of range'
32 elif optname == '-r':
33 rate = string.atoi(optarg)
34 if not (1 <= rate <= 3):
35 raise optarg.error, '-r rate out of range'
36 elif optname == '-a':
37 starter = audio.start_playing
38 stopper = audio.wait_playing
40 audio.setoutgain(gain)
41 audio.setrate(rate)
43 if not args:
44 play(starter, rate, auds.loadfp(sys.stdin))
45 else:
46 real_stopper = 0
47 for file in args:
48 if real_stopper:
49 real_stopper()
50 play(starter, rate, auds.load(file))
51 real_stopper = stopper
53 def play(starter, rate, data):
54 magic = data[:4]
55 if magic == '0008':
56 mrate = 3
57 elif magic == '0016':
58 mrate = 2
59 elif magic == '0032':
60 mrate = 1
61 else:
62 mrate = 0
63 if mrate:
64 data = data[4:]
65 else:
66 mrate = DEF_RATE
67 if not rate: rate = mrate
68 audio.setrate(rate)
69 starter(data)
71 try:
72 main()
73 finally:
74 audio.setoutgain(0)
75 audio.done()