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