| 
									
										
										
										
											1991-09-15 21:05:15 +00:00
										 |  |  | import aiff | 
					
						
							|  |  |  | import al | 
					
						
							|  |  |  | import sys | 
					
						
							|  |  |  | import time | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def main(): | 
					
						
							|  |  |  | 	v = 1 | 
					
						
							|  |  |  | 	c = al.newconfig() | 
					
						
							|  |  |  | 	nchannels = c.getchannels() | 
					
						
							|  |  |  | 	nsampframes = 0 # ??? | 
					
						
							|  |  |  | 	sampwidth = c.getwidth() | 
					
						
							|  |  |  | 	samprate = 0.0 # unknown | 
					
						
							|  |  |  | 	filename = sys.argv[1] | 
					
						
							|  |  |  | 	f = open(filename, 'r') | 
					
						
							|  |  |  | 	type, totalsize = aiff.read_chunk_header(f) | 
					
						
							|  |  |  | 	if type <> 'FORM': | 
					
						
							|  |  |  | 		raise aiff.Error, 'FORM chunk expected at start of file' | 
					
						
							|  |  |  | 	aiff.read_form_chunk(f) | 
					
						
							|  |  |  | 	while 1: | 
					
						
							|  |  |  | 		try: | 
					
						
							|  |  |  | 			type, size = aiff.read_chunk_header(f) | 
					
						
							|  |  |  | 		except EOFError: | 
					
						
							|  |  |  | 			break | 
					
						
							|  |  |  | 		if v: print 'header:', `type`, size | 
					
						
							| 
									
										
										
										
											1992-03-30 13:30:03 +00:00
										 |  |  | 		if type == 'COMM': | 
					
						
							| 
									
										
										
										
											1991-09-15 21:05:15 +00:00
										 |  |  | 			nchannels, nsampframes, sampwidth, samprate = \ | 
					
						
							|  |  |  | 				aiff.read_comm_chunk(f) | 
					
						
							|  |  |  | 			if v: print nchannels, nsampframes, sampwidth, samprate | 
					
						
							| 
									
										
										
										
											1992-03-30 13:30:03 +00:00
										 |  |  | 		elif type == 'SSND': | 
					
						
							| 
									
										
										
										
											1991-09-15 21:05:15 +00:00
										 |  |  | 			offset, blocksize = aiff.read_ssnd_chunk(f) | 
					
						
							|  |  |  | 			if v: print offset, blocksize | 
					
						
							|  |  |  | 			data = f.read(size-8) | 
					
						
							|  |  |  | 			if size%2: void = f.read(1) | 
					
						
							|  |  |  | 			p = makeport(nchannels, sampwidth, samprate) | 
					
						
							|  |  |  | 			play(p, data, offset, blocksize) | 
					
						
							|  |  |  | 		elif type in aiff.skiplist: | 
					
						
							|  |  |  | 			aiff.skip_chunk(f, size) | 
					
						
							|  |  |  | 		else: | 
					
						
							|  |  |  | 			raise aiff.Error, 'bad chunk type ' + type | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def makeport(nchannels, sampwidth, samprate): | 
					
						
							|  |  |  | 	c = al.newconfig() | 
					
						
							|  |  |  | 	c.setchannels(nchannels) | 
					
						
							|  |  |  | 	c.setwidth(sampwidth/8) | 
					
						
							|  |  |  | 	# can't set the rate... | 
					
						
							|  |  |  | 	p = al.openport('', 'w', c) | 
					
						
							|  |  |  | 	return p | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def play(p, data, offset, blocksize): | 
					
						
							|  |  |  | 	data = data[offset:] | 
					
						
							|  |  |  | 	p.writesamps(data) | 
					
						
							| 
									
										
										
										
											1994-10-07 10:23:49 +00:00
										 |  |  | 	while p.getfilled() > 0: time.sleep(0.01) | 
					
						
							| 
									
										
										
										
											1991-09-15 21:05:15 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | main() |