Ehm, when we don't need to byteswap the data, don't go through an
array object at all.
diff --git a/Lib/wave.py b/Lib/wave.py
index c34830a..1353b51 100644
--- a/Lib/wave.py
+++ b/Lib/wave.py
@@ -305,7 +305,7 @@
 			self._data_seek_needed = 0
 		if nframes == 0:
 			return ''
-		if self._sampwidth > 1:
+		if self._sampwidth > 1 and big_endian:
 			# unfortunately the fromfile() method does not take
 			# something that only looks like a file object, so
 			# we have to reach into the innards of the chunk object
@@ -316,8 +316,7 @@
 				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
-			if big_endian:
-				data.byteswap()
+			data.byteswap()
 			data = data.tostring()
 		else:
 			data = self._data_chunk.read(nframes * self._framesize)
@@ -487,11 +486,10 @@
 		nframes = len(data) / (self._sampwidth * self._nchannels)
 		if self._convert:
 			data = self._convert(data)
-		if self._sampwidth > 1:
+		if self._sampwidth > 1 and big_endian:
 			import array
 			data = array.array(_array_fmts[self._sampwidth], data)
-			if big_endian:
-				data.byteswap()
+			data.byteswap()
 			data.tofile(self._file)
 			self._datawritten = self._datawritten + len(data) * self._sampwidth
 		else: