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