Commit | Line | Data |
---|---|---|
86530b38 AT |
1 | """Interpret sun audio headers.""" |
2 | ||
3 | MAGIC = '.snd' | |
4 | ||
5 | class error(Exception): | |
6 | pass | |
7 | ||
8 | ||
9 | def get_long_be(s): | |
10 | """Convert a 4-char value to integer.""" | |
11 | return (ord(s[0])<<24) | (ord(s[1])<<16) | (ord(s[2])<<8) | ord(s[3]) | |
12 | ||
13 | ||
14 | def gethdr(fp): | |
15 | """Read a sound header from an open file.""" | |
16 | if fp.read(4) != MAGIC: | |
17 | raise error, 'gethdr: bad magic word' | |
18 | hdr_size = get_long_be(fp.read(4)) | |
19 | data_size = get_long_be(fp.read(4)) | |
20 | encoding = get_long_be(fp.read(4)) | |
21 | sample_rate = get_long_be(fp.read(4)) | |
22 | channels = get_long_be(fp.read(4)) | |
23 | excess = hdr_size - 24 | |
24 | if excess < 0: | |
25 | raise error, 'gethdr: bad hdr_size' | |
26 | if excess > 0: | |
27 | info = fp.read(excess) | |
28 | else: | |
29 | info = '' | |
30 | return (data_size, encoding, sample_rate, channels, info) | |
31 | ||
32 | ||
33 | def printhdr(file): | |
34 | """Read and print the sound header of a named file.""" | |
35 | hdr = gethdr(open(file, 'r')) | |
36 | data_size, encoding, sample_rate, channels, info = hdr | |
37 | while info[-1:] == '\0': | |
38 | info = info[:-1] | |
39 | print 'File name: ', file | |
40 | print 'Data size: ', data_size | |
41 | print 'Encoding: ', encoding | |
42 | print 'Sample rate:', sample_rate | |
43 | print 'Channels: ', channels | |
44 | print 'Info: ', repr(info) |