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)
|
---|