]> granicus.if.org Git - python/commitdiff
Closes #16461: Wave library should be able to deal with 4GB wav files, and sample...
authorJesus Cea <jcea@jcea.es>
Sat, 17 Nov 2012 02:38:17 +0000 (03:38 +0100)
committerJesus Cea <jcea@jcea.es>
Sat, 17 Nov 2012 02:38:17 +0000 (03:38 +0100)
Lib/wave.py
Misc/NEWS

index 2016a2a69703cf5ba099a5f6dabdbf87a7238d72..16b11dcfcd2bd413bc5b8758dcdd129b035e6c99 100644 (file)
@@ -261,9 +261,9 @@ class Wave_read:
     #
 
     def _read_fmt_chunk(self, chunk):
-        wFormatTag, self._nchannels, self._framerate, dwAvgBytesPerSec, wBlockAlign = struct.unpack('<hhllh', chunk.read(14))
+        wFormatTag, self._nchannels, self._framerate, dwAvgBytesPerSec, wBlockAlign = struct.unpack('<HHLLH', chunk.read(14))
         if wFormatTag == WAVE_FORMAT_PCM:
-            sampwidth = struct.unpack('<h', chunk.read(2))[0]
+            sampwidth = struct.unpack('<H', chunk.read(2))[0]
             self._sampwidth = (sampwidth + 7) // 8
         else:
             raise Error, 'unknown format: %r' % (wFormatTag,)
@@ -466,14 +466,14 @@ class Wave_write:
             self._nframes = initlength / (self._nchannels * self._sampwidth)
         self._datalength = self._nframes * self._nchannels * self._sampwidth
         self._form_length_pos = self._file.tell()
-        self._file.write(struct.pack('<l4s4slhhllhh4s',
+        self._file.write(struct.pack('<L4s4sLHHLLHH4s',
             36 + self._datalength, 'WAVE', 'fmt ', 16,
             WAVE_FORMAT_PCM, self._nchannels, self._framerate,
             self._nchannels * self._framerate * self._sampwidth,
             self._nchannels * self._sampwidth,
             self._sampwidth * 8, 'data'))
         self._data_length_pos = self._file.tell()
-        self._file.write(struct.pack('<l', self._datalength))
+        self._file.write(struct.pack('<L', self._datalength))
         self._headerwritten = True
 
     def _patchheader(self):
@@ -482,9 +482,9 @@ class Wave_write:
             return
         curpos = self._file.tell()
         self._file.seek(self._form_length_pos, 0)
-        self._file.write(struct.pack('<l', 36 + self._datawritten))
+        self._file.write(struct.pack('<L', 36 + self._datawritten))
         self._file.seek(self._data_length_pos, 0)
-        self._file.write(struct.pack('<l', self._datawritten))
+        self._file.write(struct.pack('<L', self._datawritten))
         self._file.seek(curpos, 0)
         self._datalength = self._datawritten
 
index c96ea91b2a4490c67a21b85ae45ee542d53a9b01..0b1de3011633ecc93d722706fc715732565f0659 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -188,6 +188,9 @@ Library
 - Issue #16220: wsgiref now always calls close() on an iterable response.
   Patch by Brent Tubbs.
 
+- Issue #16461: Wave library should be able to deal with 4GB wav files,
+  and sample rate of 44100 Hz.
+
 - Issue #16176: Properly identify Windows 8 via platform.platform()
 
 - Issue #15756: subprocess.poll() now properly handles errno.ECHILD to