| """Interpret sun audio headers.""" | 
 |  | 
 | MAGIC = '.snd' | 
 |  | 
 | class error(Exception): | 
 |     pass | 
 |  | 
 |  | 
 | def get_long_be(s): | 
 |     """Convert a 4-char value to integer.""" | 
 |     return (ord(s[0])<<24) | (ord(s[1])<<16) | (ord(s[2])<<8) | ord(s[3]) | 
 |  | 
 |  | 
 | def gethdr(fp): | 
 |     """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: | 
 |         info = '' | 
 |     return (data_size, encoding, sample_rate, channels, info) | 
 |  | 
 |  | 
 | def printhdr(file): | 
 |     """Read and print the sound header of a named file.""" | 
 |     hdr = gethdr(open(file, 'r')) | 
 |     data_size, encoding, sample_rate, channels, info = hdr | 
 |     while info[-1:] == '\0': | 
 |         info = info[:-1] | 
 |     print 'File name:  ', file | 
 |     print 'Data size:  ', data_size | 
 |     print 'Encoding:   ', encoding | 
 |     print 'Sample rate:', sample_rate | 
 |     print 'Channels:   ', channels | 
 |     print 'Info:       ', `info` |