diff options
author | Guido van Rossum <guido@python.org> | 1999-02-05 22:28:17 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 1999-02-05 22:28:17 (GMT) |
commit | ebb9c922cb1f1b72fe929cfba223e42df7492a1c (patch) | |
tree | 31601368e369dcef203d7bcb7c1245741548868c /Lib | |
parent | 2aaeb52665fb297b3d65006b8b22eee290f17e7f (diff) | |
download | cpython-ebb9c922cb1f1b72fe929cfba223e42df7492a1c.zip cpython-ebb9c922cb1f1b72fe929cfba223e42df7492a1c.tar.gz cpython-ebb9c922cb1f1b72fe929cfba223e42df7492a1c.tar.bz2 |
Two important fixes:
(1) on a little-endian platform, don't byteswap;
(2) in _patchheader(), there was a missing self._file argument to a
_write_long() call.
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/wave.py | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/Lib/wave.py b/Lib/wave.py index 35e3b6b..c34830a 100644 --- a/Lib/wave.py +++ b/Lib/wave.py @@ -78,6 +78,13 @@ WAVE_FORMAT_PCM = 0x0001 _array_fmts = None, 'b', 'h', None, 'l' +# Determine endian-ness +import struct +if struct.pack("h", 1) == "\000\001": + big_endian = 1 +else: + big_endian = 0 + def _read_long(file): x = 0L for i in range(4): @@ -309,7 +316,8 @@ class Wave_read: nitems = (self._data_chunk.chunksize - self._data_chunk.size_read) / self._sampwidth data.fromfile(self._data_chunk.file, nitems) self._data_chunk.size_read = self._data_chunk.size_read + nitems * self._sampwidth - data.byteswap() + if big_endian: + data.byteswap() data = data.tostring() else: data = self._data_chunk.read(nframes * self._framesize) @@ -482,7 +490,8 @@ class Wave_write: if self._sampwidth > 1: import array data = array.array(_array_fmts[self._sampwidth], data) - data.byteswap() + if big_endian: + data.byteswap() data.tofile(self._file) self._datawritten = self._datawritten + len(data) * self._sampwidth else: @@ -542,7 +551,7 @@ class Wave_write: return curpos = self._file.tell() self._file.seek(self._form_length_pos, 0) - _write_long(36 + self._datawritten) + _write_long(self._file, 36 + self._datawritten) self._file.seek(self._data_length_pos, 0) _write_long(self._file, self._datawritten) self._file.seek(curpos, 0) |