Guido van Rossum | f06ee5f | 1996-11-27 19:52:01 +0000 | [diff] [blame] | 1 | #! /usr/bin/env python |
Guido van Rossum | 715a653 | 1992-03-30 11:39:53 +0000 | [diff] [blame] | 2 | |
| 3 | import sys |
| 4 | import audio |
| 5 | |
| 6 | import string |
| 7 | import getopt |
| 8 | import auds |
| 9 | |
| 10 | debug = [] |
| 11 | |
| 12 | DEF_RATE = 3 |
| 13 | |
| 14 | def main(): |
| 15 | # |
| 16 | gain = 100 |
| 17 | rate = 0 |
| 18 | starter = audio.write |
| 19 | stopper = 0 |
| 20 | # |
| 21 | optlist, args = getopt.getopt(sys.argv[1:], 'adg:r:') |
| 22 | # |
| 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 |
| 39 | # |
| 40 | audio.setoutgain(gain) |
| 41 | audio.setrate(rate) |
| 42 | # |
| 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 |
| 52 | |
| 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) |
| 70 | |
| 71 | try: |
| 72 | main() |
| 73 | finally: |
| 74 | audio.setoutgain(0) |
| 75 | audio.done() |