| """Interpret sun audio headers.""" | |
| from warnings import warnpy3k | |
| warnpy3k("the sunaudio module has been removed in Python 3.0; " | |
| "use the sunau module instead", stacklevel=2) | |
| del warnpy3k | |
| 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: ', repr(info) |