| 
									
										
										
										
											1996-11-27 19:52:01 +00:00
										 |  |  | #! /usr/bin/env python | 
					
						
							| 
									
										
										
										
											1992-03-30 11:39:53 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | import sys | 
					
						
							|  |  |  | import audio | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import string | 
					
						
							|  |  |  | import getopt | 
					
						
							|  |  |  | import auds | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | debug = [] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | DEF_RATE = 3 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def main(): | 
					
						
							|  |  |  | 	# | 
					
						
							|  |  |  | 	gain = 100 | 
					
						
							|  |  |  | 	rate = 0 | 
					
						
							|  |  |  | 	starter = audio.write | 
					
						
							|  |  |  | 	stopper = 0 | 
					
						
							|  |  |  | 	# | 
					
						
							|  |  |  | 	optlist, args = getopt.getopt(sys.argv[1:], 'adg:r:') | 
					
						
							|  |  |  | 	# | 
					
						
							|  |  |  | 	for optname, optarg in optlist: | 
					
						
							|  |  |  | 		if 0: | 
					
						
							|  |  |  | 			pass | 
					
						
							|  |  |  | 		elif optname == '-d': | 
					
						
							|  |  |  | 			debug.append(1) | 
					
						
							|  |  |  | 		elif optname == '-g': | 
					
						
							|  |  |  | 			gain = string.atoi(optarg) | 
					
						
							|  |  |  | 			if not (0 < gain < 256): | 
					
						
							|  |  |  | 				raise optarg.error, '-g gain out of range' | 
					
						
							|  |  |  | 		elif optname == '-r': | 
					
						
							|  |  |  | 			rate = string.atoi(optarg) | 
					
						
							|  |  |  | 			if not (1 <= rate <= 3): | 
					
						
							|  |  |  | 				raise optarg.error, '-r rate out of range' | 
					
						
							|  |  |  | 		elif optname == '-a': | 
					
						
							|  |  |  | 			starter = audio.start_playing | 
					
						
							|  |  |  | 			stopper = audio.wait_playing | 
					
						
							|  |  |  | 	# | 
					
						
							|  |  |  | 	audio.setoutgain(gain) | 
					
						
							|  |  |  | 	audio.setrate(rate) | 
					
						
							|  |  |  | 	# | 
					
						
							|  |  |  | 	if not args: | 
					
						
							|  |  |  | 		play(starter, rate, auds.loadfp(sys.stdin)) | 
					
						
							|  |  |  | 	else: | 
					
						
							|  |  |  | 		real_stopper = 0 | 
					
						
							|  |  |  | 		for file in args: | 
					
						
							|  |  |  | 			if real_stopper: | 
					
						
							|  |  |  | 				real_stopper() | 
					
						
							|  |  |  | 			play(starter, rate, auds.load(file)) | 
					
						
							|  |  |  | 			real_stopper = stopper | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def play(starter, rate, data): | 
					
						
							|  |  |  | 	magic = data[:4] | 
					
						
							|  |  |  | 	if magic == '0008': | 
					
						
							|  |  |  | 		mrate = 3 | 
					
						
							|  |  |  | 	elif magic == '0016': | 
					
						
							|  |  |  | 		mrate = 2 | 
					
						
							|  |  |  | 	elif magic == '0032': | 
					
						
							|  |  |  | 		mrate = 1 | 
					
						
							|  |  |  | 	else: | 
					
						
							|  |  |  | 		mrate = 0 | 
					
						
							|  |  |  | 	if mrate: | 
					
						
							|  |  |  | 		data = data[4:] | 
					
						
							|  |  |  | 	else: | 
					
						
							|  |  |  | 		mrate = DEF_RATE | 
					
						
							|  |  |  | 	if not rate: rate = mrate | 
					
						
							|  |  |  | 	audio.setrate(rate) | 
					
						
							|  |  |  | 	starter(data) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | try: | 
					
						
							|  |  |  | 	main() | 
					
						
							|  |  |  | finally: | 
					
						
							|  |  |  | 	audio.setoutgain(0) | 
					
						
							|  |  |  | 	audio.done() |