aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/Lib/sunau.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/sunau.py')
-rw-r--r--Lib/sunau.py84
1 files changed, 47 insertions, 37 deletions
diff --git a/Lib/sunau.py b/Lib/sunau.py
index a04d8c01314..6775a53cf73 100644
--- a/Lib/sunau.py
+++ b/Lib/sunau.py
@@ -119,7 +119,7 @@ AUDIO_FILE_ENCODING_ADPCM_G723_5 = 26
AUDIO_FILE_ENCODING_ALAW_8 = 27
# from <multimedia/audio_hdr.h>
-AUDIO_UNKNOWN_SIZE = 0xFFFFFFFFL # ((unsigned)(~0))
+AUDIO_UNKNOWN_SIZE = 0xFFFFFFFF # ((unsigned)(~0))
_simple_encodings = [AUDIO_FILE_ENCODING_MULAW_8,
AUDIO_FILE_ENCODING_LINEAR_8,
@@ -132,10 +132,10 @@ class Error(Exception):
pass
def _read_u32(file):
- x = 0L
+ x = 0
for i in range(4):
byte = file.read(1)
- if byte == '':
+ if not byte:
raise EOFError
x = x*256 + ord(byte)
return x
@@ -144,17 +144,19 @@ def _write_u32(file, x):
data = []
for i in range(4):
d, m = divmod(x, 256)
- data.insert(0, m)
+ data.insert(0, int(m))
x = d
- for i in range(4):
- file.write(chr(int(data[i])))
+ file.write(bytes(data))
class Au_read:
def __init__(self, f):
if type(f) == type(''):
- import __builtin__
- f = __builtin__.open(f, 'rb')
+ import builtins
+ f = builtins.open(f, 'rb')
+ self._opened = True
+ else:
+ self._opened = False
self.initfp(f)
def __del__(self):
@@ -166,18 +168,18 @@ class Au_read:
self._soundpos = 0
magic = int(_read_u32(file))
if magic != AUDIO_FILE_MAGIC:
- raise Error, 'bad magic number'
+ raise Error('bad magic number')
self._hdr_size = int(_read_u32(file))
if self._hdr_size < 24:
- raise Error, 'header size too small'
+ raise Error('header size too small')
if self._hdr_size > 100:
- raise Error, 'header size ridiculously large'
+ raise Error('header size ridiculously large')
self._data_size = _read_u32(file)
if self._data_size != AUDIO_UNKNOWN_SIZE:
self._data_size = int(self._data_size)
self._encoding = int(_read_u32(file))
if self._encoding not in _simple_encodings:
- raise Error, 'encoding not (yet) supported'
+ raise Error('encoding not (yet) supported')
if self._encoding in (AUDIO_FILE_ENCODING_MULAW_8,
AUDIO_FILE_ENCODING_ALAW_8):
self._sampwidth = 2
@@ -191,14 +193,14 @@ class Au_read:
elif self._encoding == AUDIO_FILE_ENCODING_LINEAR_32:
self._framesize = self._sampwidth = 4
else:
- raise Error, 'unknown encoding'
+ raise Error('unknown encoding')
self._framerate = int(_read_u32(file))
self._nchannels = int(_read_u32(file))
self._framesize = self._framesize * self._nchannels
if self._hdr_size > 24:
self._info = file.read(self._hdr_size - 24)
for i in range(len(self._info)):
- if self._info[i] == '\0':
+ if self._info[i] == b'\0':
self._info = self._info[:i]
break
else:
@@ -248,7 +250,7 @@ class Au_read:
return None
def getmark(self, id):
- raise Error, 'no marks'
+ raise Error('no marks')
def readframes(self, nframes):
if self._encoding in _simple_encodings:
@@ -271,24 +273,30 @@ class Au_read:
def setpos(self, pos):
if pos < 0 or pos > self.getnframes():
- raise Error, 'position not in range'
+ raise Error('position not in range')
self._file.seek(pos * self._framesize + self._hdr_size)
self._soundpos = pos
def close(self):
+ if self._opened and self._file:
+ self._file.close()
self._file = None
class Au_write:
def __init__(self, f):
if type(f) == type(''):
- import __builtin__
- f = __builtin__.open(f, 'wb')
+ import builtins
+ f = builtins.open(f, 'wb')
+ self._opened = True
+ else:
+ self._opened = False
self.initfp(f)
def __del__(self):
if self._file:
self.close()
+ self._file = None
def initfp(self, file):
self._file = file
@@ -300,48 +308,48 @@ class Au_write:
self._nframeswritten = 0
self._datawritten = 0
self._datalength = 0
- self._info = ''
+ self._info = b''
self._comptype = 'ULAW' # default is U-law
def setnchannels(self, nchannels):
if self._nframeswritten:
- raise Error, 'cannot change parameters after starting to write'
+ raise Error('cannot change parameters after starting to write')
if nchannels not in (1, 2, 4):
- raise Error, 'only 1, 2, or 4 channels supported'
+ raise Error('only 1, 2, or 4 channels supported')
self._nchannels = nchannels
def getnchannels(self):
if not self._nchannels:
- raise Error, 'number of channels not set'
+ raise Error('number of channels not set')
return self._nchannels
def setsampwidth(self, sampwidth):
if self._nframeswritten:
- raise Error, 'cannot change parameters after starting to write'
+ raise Error('cannot change parameters after starting to write')
if sampwidth not in (1, 2, 4):
- raise Error, 'bad sample width'
+ raise Error('bad sample width')
self._sampwidth = sampwidth
def getsampwidth(self):
if not self._framerate:
- raise Error, 'sample width not specified'
+ raise Error('sample width not specified')
return self._sampwidth
def setframerate(self, framerate):
if self._nframeswritten:
- raise Error, 'cannot change parameters after starting to write'
+ raise Error('cannot change parameters after starting to write')
self._framerate = framerate
def getframerate(self):
if not self._framerate:
- raise Error, 'frame rate not set'
+ raise Error('frame rate not set')
return self._framerate
def setnframes(self, nframes):
if self._nframeswritten:
- raise Error, 'cannot change parameters after starting to write'
+ raise Error('cannot change parameters after starting to write')
if nframes < 0:
- raise Error, '# of frames cannot be negative'
+ raise Error('# of frames cannot be negative')
self._nframes = nframes
def getnframes(self):
@@ -351,7 +359,7 @@ class Au_write:
if type in ('NONE', 'ULAW'):
self._comptype = type
else:
- raise Error, 'unknown compression type'
+ raise Error('unknown compression type')
def getcomptype(self):
return self._comptype
@@ -402,6 +410,8 @@ class Au_write:
self._datalength != self._datawritten:
self._patchheader()
self._file.flush()
+ if self._opened and self._file:
+ self._file.close()
self._file = None
#
@@ -411,11 +421,11 @@ class Au_write:
def _ensure_header_written(self):
if not self._nframeswritten:
if not self._nchannels:
- raise Error, '# of channels not specified'
+ raise Error('# of channels not specified')
if not self._sampwidth:
- raise Error, 'sample width not specified'
+ raise Error('sample width not specified')
if not self._framerate:
- raise Error, 'frame rate not specified'
+ raise Error('frame rate not specified')
self._write_header()
def _write_header(self):
@@ -430,12 +440,12 @@ class Au_write:
encoding = AUDIO_FILE_ENCODING_LINEAR_32
self._framesize = 4
else:
- raise Error, 'internal error'
+ raise Error('internal error')
elif self._comptype == 'ULAW':
encoding = AUDIO_FILE_ENCODING_MULAW_8
self._framesize = 1
else:
- raise Error, 'internal error'
+ raise Error('internal error')
self._framesize = self._framesize * self._nchannels
_write_u32(self._file, AUDIO_FILE_MAGIC)
header_size = 25 + len(self._info)
@@ -451,7 +461,7 @@ class Au_write:
_write_u32(self._file, self._framerate)
_write_u32(self._file, self._nchannels)
self._file.write(self._info)
- self._file.write('\0'*(header_size - len(self._info) - 24))
+ self._file.write(b'\0'*(header_size - len(self._info) - 24))
def _patchheader(self):
self._file.seek(8)
@@ -470,6 +480,6 @@ def open(f, mode=None):
elif mode in ('w', 'wb'):
return Au_write(f)
else:
- raise Error, "mode must be 'r', 'rb', 'w', or 'wb'"
+ raise Error("mode must be 'r', 'rb', 'w', or 'wb'")
openfp = open