Closes #16461: Wave library should be able to deal with 4GB wav files, and sample rate of 44100 Hz.

This commit is contained in:
Jesus Cea 2012-11-17 03:38:17 +01:00
parent 526b553608
commit f34e4de3f5
2 changed files with 9 additions and 6 deletions

View file

@ -261,9 +261,9 @@ class Wave_read:
# #
def _read_fmt_chunk(self, chunk): 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: 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 self._sampwidth = (sampwidth + 7) // 8
else: else:
raise Error, 'unknown format: %r' % (wFormatTag,) raise Error, 'unknown format: %r' % (wFormatTag,)
@ -466,14 +466,14 @@ class Wave_write:
self._nframes = initlength / (self._nchannels * self._sampwidth) self._nframes = initlength / (self._nchannels * self._sampwidth)
self._datalength = self._nframes * self._nchannels * self._sampwidth self._datalength = self._nframes * self._nchannels * self._sampwidth
self._form_length_pos = self._file.tell() 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, 36 + self._datalength, 'WAVE', 'fmt ', 16,
WAVE_FORMAT_PCM, self._nchannels, self._framerate, WAVE_FORMAT_PCM, self._nchannels, self._framerate,
self._nchannels * self._framerate * self._sampwidth, self._nchannels * self._framerate * self._sampwidth,
self._nchannels * self._sampwidth, self._nchannels * self._sampwidth,
self._sampwidth * 8, 'data')) self._sampwidth * 8, 'data'))
self._data_length_pos = self._file.tell() 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 self._headerwritten = True
def _patchheader(self): def _patchheader(self):
@ -482,9 +482,9 @@ class Wave_write:
return return
curpos = self._file.tell() curpos = self._file.tell()
self._file.seek(self._form_length_pos, 0) 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.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._file.seek(curpos, 0)
self._datalength = self._datawritten self._datalength = self._datawritten

View file

@ -188,6 +188,9 @@ Library
- Issue #16220: wsgiref now always calls close() on an iterable response. - Issue #16220: wsgiref now always calls close() on an iterable response.
Patch by Brent Tubbs. 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 #16176: Properly identify Windows 8 via platform.platform()
- Issue #15756: subprocess.poll() now properly handles errno.ECHILD to - Issue #15756: subprocess.poll() now properly handles errno.ECHILD to