1e7b146fb3bdca62a0d5ecc06dbf3348e5a4fe757Guido van Rossum"""Interpret sun audio headers.""" 21e8fba729e218bc4b2e1ed3104f8cdbd88fdb21aBrett Cannonfrom warnings import warnpy3k 31e8fba729e218bc4b2e1ed3104f8cdbd88fdb21aBrett Cannonwarnpy3k("the sunaudio module has been removed in Python 3.0; " 41e8fba729e218bc4b2e1ed3104f8cdbd88fdb21aBrett Cannon "use the sunau module instead", stacklevel=2) 51e8fba729e218bc4b2e1ed3104f8cdbd88fdb21aBrett Cannondel warnpy3k 61e8fba729e218bc4b2e1ed3104f8cdbd88fdb21aBrett Cannon 7217a5fa3c33ae58c1fe420f94eeb7e806961c3c1Guido van Rossum 8217a5fa3c33ae58c1fe420f94eeb7e806961c3c1Guido van RossumMAGIC = '.snd' 9217a5fa3c33ae58c1fe420f94eeb7e806961c3c1Guido van Rossum 109b8d801c37fa29420848ebc1b50c601893b36287Fred Drakeclass error(Exception): 11495ad3c8ccb9ed3554177a3e8687676c78e667deTim Peters pass 12217a5fa3c33ae58c1fe420f94eeb7e806961c3c1Guido van Rossum 13217a5fa3c33ae58c1fe420f94eeb7e806961c3c1Guido van Rossum 14d482e8ad4a11c7cbe9374f449da036ad21a5ee55Guido van Rossumdef get_long_be(s): 15495ad3c8ccb9ed3554177a3e8687676c78e667deTim Peters """Convert a 4-char value to integer.""" 16495ad3c8ccb9ed3554177a3e8687676c78e667deTim Peters return (ord(s[0])<<24) | (ord(s[1])<<16) | (ord(s[2])<<8) | ord(s[3]) 17217a5fa3c33ae58c1fe420f94eeb7e806961c3c1Guido van Rossum 18217a5fa3c33ae58c1fe420f94eeb7e806961c3c1Guido van Rossum 19217a5fa3c33ae58c1fe420f94eeb7e806961c3c1Guido van Rossumdef gethdr(fp): 20495ad3c8ccb9ed3554177a3e8687676c78e667deTim Peters """Read a sound header from an open file.""" 21495ad3c8ccb9ed3554177a3e8687676c78e667deTim Peters if fp.read(4) != MAGIC: 22495ad3c8ccb9ed3554177a3e8687676c78e667deTim Peters raise error, 'gethdr: bad magic word' 23495ad3c8ccb9ed3554177a3e8687676c78e667deTim Peters hdr_size = get_long_be(fp.read(4)) 24495ad3c8ccb9ed3554177a3e8687676c78e667deTim Peters data_size = get_long_be(fp.read(4)) 25495ad3c8ccb9ed3554177a3e8687676c78e667deTim Peters encoding = get_long_be(fp.read(4)) 26495ad3c8ccb9ed3554177a3e8687676c78e667deTim Peters sample_rate = get_long_be(fp.read(4)) 27495ad3c8ccb9ed3554177a3e8687676c78e667deTim Peters channels = get_long_be(fp.read(4)) 28495ad3c8ccb9ed3554177a3e8687676c78e667deTim Peters excess = hdr_size - 24 29495ad3c8ccb9ed3554177a3e8687676c78e667deTim Peters if excess < 0: 30495ad3c8ccb9ed3554177a3e8687676c78e667deTim Peters raise error, 'gethdr: bad hdr_size' 31495ad3c8ccb9ed3554177a3e8687676c78e667deTim Peters if excess > 0: 32495ad3c8ccb9ed3554177a3e8687676c78e667deTim Peters info = fp.read(excess) 33495ad3c8ccb9ed3554177a3e8687676c78e667deTim Peters else: 34495ad3c8ccb9ed3554177a3e8687676c78e667deTim Peters info = '' 35495ad3c8ccb9ed3554177a3e8687676c78e667deTim Peters return (data_size, encoding, sample_rate, channels, info) 36217a5fa3c33ae58c1fe420f94eeb7e806961c3c1Guido van Rossum 37217a5fa3c33ae58c1fe420f94eeb7e806961c3c1Guido van Rossum 38217a5fa3c33ae58c1fe420f94eeb7e806961c3c1Guido van Rossumdef printhdr(file): 39495ad3c8ccb9ed3554177a3e8687676c78e667deTim Peters """Read and print the sound header of a named file.""" 40495ad3c8ccb9ed3554177a3e8687676c78e667deTim Peters hdr = gethdr(open(file, 'r')) 41495ad3c8ccb9ed3554177a3e8687676c78e667deTim Peters data_size, encoding, sample_rate, channels, info = hdr 42495ad3c8ccb9ed3554177a3e8687676c78e667deTim Peters while info[-1:] == '\0': 43495ad3c8ccb9ed3554177a3e8687676c78e667deTim Peters info = info[:-1] 44495ad3c8ccb9ed3554177a3e8687676c78e667deTim Peters print 'File name: ', file 45495ad3c8ccb9ed3554177a3e8687676c78e667deTim Peters print 'Data size: ', data_size 46495ad3c8ccb9ed3554177a3e8687676c78e667deTim Peters print 'Encoding: ', encoding 47495ad3c8ccb9ed3554177a3e8687676c78e667deTim Peters print 'Sample rate:', sample_rate 48495ad3c8ccb9ed3554177a3e8687676c78e667deTim Peters print 'Channels: ', channels 4970a6b49821a3226f55e9716f32d802d06640cb89Walter Dörwald print 'Info: ', repr(info) 50