]> git.lizzy.rs Git - plan9front.git/blob - sys/lib/python/sunaudio.py
aux/cpuid: decode family and model bitfields
[plan9front.git] / sys / lib / python / sunaudio.py
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)