Commit 677bca4d authored by Serhiy Storchaka's avatar Serhiy Storchaka

Issue #19131: The aifc module now correctly reads and writes sampwidth of

compressed streams.
parent ac59bb61
...@@ -480,7 +480,7 @@ class Aifc_read: ...@@ -480,7 +480,7 @@ class Aifc_read:
pass pass
else: else:
self._convert = self._adpcm2lin self._convert = self._adpcm2lin
self._framesize = self._framesize // 4 self._sampwidth = 2
return return
# for ULAW and ALAW try Compression Library # for ULAW and ALAW try Compression Library
try: try:
...@@ -490,21 +490,20 @@ class Aifc_read: ...@@ -490,21 +490,20 @@ class Aifc_read:
try: try:
import audioop import audioop
self._convert = self._ulaw2lin self._convert = self._ulaw2lin
self._framesize = self._framesize // 2 self._sampwidth = 2
return return
except ImportError: except ImportError:
pass pass
raise Error, 'cannot read compressed AIFF-C files' raise Error, 'cannot read compressed AIFF-C files'
if self._comptype == 'ULAW': if self._comptype == 'ULAW':
scheme = cl.G711_ULAW scheme = cl.G711_ULAW
self._framesize = self._framesize // 2
elif self._comptype == 'ALAW': elif self._comptype == 'ALAW':
scheme = cl.G711_ALAW scheme = cl.G711_ALAW
self._framesize = self._framesize // 2
else: else:
raise Error, 'unsupported compression type' raise Error, 'unsupported compression type'
self._decomp = cl.OpenDecompressor(scheme) self._decomp = cl.OpenDecompressor(scheme)
self._convert = self._decomp_data self._convert = self._decomp_data
self._sampwidth = 2
else: else:
self._comptype = 'NONE' self._comptype = 'NONE'
self._compname = 'not compressed' self._compname = 'not compressed'
...@@ -867,7 +866,10 @@ class Aifc_write: ...@@ -867,7 +866,10 @@ class Aifc_write:
_write_short(self._file, self._nchannels) _write_short(self._file, self._nchannels)
self._nframes_pos = self._file.tell() self._nframes_pos = self._file.tell()
_write_ulong(self._file, self._nframes) _write_ulong(self._file, self._nframes)
_write_short(self._file, self._sampwidth * 8) if self._comptype in ('ULAW', 'ALAW', 'G722'):
_write_short(self._file, 8)
else:
_write_short(self._file, self._sampwidth * 8)
_write_float(self._file, self._framerate) _write_float(self._file, self._framerate)
if self._aifc: if self._aifc:
self._file.write(self._comptype) self._file.write(self._comptype)
......
...@@ -32,6 +32,9 @@ Core and Builtins ...@@ -32,6 +32,9 @@ Core and Builtins
Library Library
------- -------
- Issue #19131: The aifc module now correctly reads and writes sampwidth of
compressed streams.
- Issue #19158: a rare race in BoundedSemaphore could allow .release() too - Issue #19158: a rare race in BoundedSemaphore could allow .release() too
often. often.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment