| 
									
										
										
										
											2000-02-04 15:28:42 +00:00
										 |  |  | """Interpret sun audio headers.""" | 
					
						
							| 
									
										
										
										
											1990-12-26 15:40:07 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-08-21 22:49:52 +00:00
										 |  |  | MAGIC = b'.snd' | 
					
						
							| 
									
										
										
										
											1990-12-26 15:40:07 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-08-17 04:45:13 +00:00
										 |  |  | class error(Exception): | 
					
						
							| 
									
										
										
										
											2001-01-15 01:36:40 +00:00
										 |  |  |     pass | 
					
						
							| 
									
										
										
										
											1990-12-26 15:40:07 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1992-06-03 16:47:49 +00:00
										 |  |  | def get_long_be(s): | 
					
						
							| 
									
										
										
										
											2007-08-21 22:49:52 +00:00
										 |  |  |     """Convert a 4-byte value to integer.""" | 
					
						
							|  |  |  |     return (s[0]<<24) | (s[1]<<16) | (s[2]<<8) | s[3] | 
					
						
							| 
									
										
										
										
											1990-12-26 15:40:07 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def gethdr(fp): | 
					
						
							| 
									
										
										
										
											2001-01-15 01:36:40 +00:00
										 |  |  |     """Read a sound header from an open file.""" | 
					
						
							|  |  |  |     if fp.read(4) != MAGIC: | 
					
						
							|  |  |  |         raise error, 'gethdr: bad magic word' | 
					
						
							|  |  |  |     hdr_size = get_long_be(fp.read(4)) | 
					
						
							|  |  |  |     data_size = get_long_be(fp.read(4)) | 
					
						
							|  |  |  |     encoding = get_long_be(fp.read(4)) | 
					
						
							|  |  |  |     sample_rate = get_long_be(fp.read(4)) | 
					
						
							|  |  |  |     channels = get_long_be(fp.read(4)) | 
					
						
							|  |  |  |     excess = hdr_size - 24 | 
					
						
							|  |  |  |     if excess < 0: | 
					
						
							|  |  |  |         raise error, 'gethdr: bad hdr_size' | 
					
						
							|  |  |  |     if excess > 0: | 
					
						
							|  |  |  |         info = fp.read(excess) | 
					
						
							|  |  |  |     else: | 
					
						
							| 
									
										
										
										
											2007-08-21 22:49:52 +00:00
										 |  |  |         info = b'' | 
					
						
							| 
									
										
										
										
											2001-01-15 01:36:40 +00:00
										 |  |  |     return (data_size, encoding, sample_rate, channels, info) | 
					
						
							| 
									
										
										
										
											1990-12-26 15:40:07 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def printhdr(file): | 
					
						
							| 
									
										
										
										
											2001-01-15 01:36:40 +00:00
										 |  |  |     """Read and print the sound header of a named file.""" | 
					
						
							| 
									
										
										
										
											2007-08-21 22:49:52 +00:00
										 |  |  |     f = open(file, 'rb') | 
					
						
							|  |  |  |     try: | 
					
						
							|  |  |  |         hdr = gethdr(f) | 
					
						
							|  |  |  |     finally: | 
					
						
							|  |  |  |         f.close() | 
					
						
							| 
									
										
										
										
											2001-01-15 01:36:40 +00:00
										 |  |  |     data_size, encoding, sample_rate, channels, info = hdr | 
					
						
							| 
									
										
										
										
											2007-08-21 22:49:52 +00:00
										 |  |  |     while info.endswith(b'\0'): | 
					
						
							| 
									
										
										
										
											2001-01-15 01:36:40 +00:00
										 |  |  |         info = info[:-1] | 
					
						
							| 
									
										
										
										
											2007-02-09 05:37:30 +00:00
										 |  |  |     print('File name:  ', file) | 
					
						
							|  |  |  |     print('Data size:  ', data_size) | 
					
						
							|  |  |  |     print('Encoding:   ', encoding) | 
					
						
							|  |  |  |     print('Sample rate:', sample_rate) | 
					
						
							|  |  |  |     print('Channels:   ', channels) | 
					
						
							|  |  |  |     print('Info:       ', repr(info)) |