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