Commit 5397c974 authored by Serhiy Storchaka's avatar Serhiy Storchaka

Issue #19633: Fixed writing not compressed 16- and 32-bit wave files on

big-endian platforms.

Temporary forbidden test_unseekable_incompleted_write fornot compressed 16-
and 32-bit wave file  on big-endian platforms.
parent 78ecaba4
...@@ -10,7 +10,8 @@ def fromhex(s): ...@@ -10,7 +10,8 @@ def fromhex(s):
return base64.b16decode(s.replace(' ', '')) return base64.b16decode(s.replace(' ', ''))
def byteswap2(data): def byteswap2(data):
a = array.array('h', data) a = array.array('h')
a.fromstring(data)
a.byteswap() a.byteswap()
return a.tostring() return a.tostring()
...@@ -21,7 +22,8 @@ def byteswap3(data): ...@@ -21,7 +22,8 @@ def byteswap3(data):
return bytes(ba) return bytes(ba)
def byteswap4(data): def byteswap4(data):
a = array.array('i', data) a = array.array('i')
a.fromstring(data)
a.byteswap() a.byteswap()
return a.tostring() return a.tostring()
......
...@@ -48,6 +48,12 @@ class WavePCM16Test(audiotests.AudioWriteTests, ...@@ -48,6 +48,12 @@ class WavePCM16Test(audiotests.AudioWriteTests,
if sys.byteorder != 'big': if sys.byteorder != 'big':
frames = audiotests.byteswap2(frames) frames = audiotests.byteswap2(frames)
if sys.byteorder == 'big':
@unittest.expectedFailure
def test_unseekable_incompleted_write(self):
super().test_unseekable_incompleted_write()
class WavePCM24Test(audiotests.AudioWriteTests, class WavePCM24Test(audiotests.AudioWriteTests,
audiotests.AudioTestsWithSourceFile, audiotests.AudioTestsWithSourceFile,
...@@ -108,6 +114,11 @@ class WavePCM32Test(audiotests.AudioWriteTests, ...@@ -108,6 +114,11 @@ class WavePCM32Test(audiotests.AudioWriteTests,
if sys.byteorder != 'big': if sys.byteorder != 'big':
frames = audiotests.byteswap4(frames) frames = audiotests.byteswap4(frames)
if sys.byteorder == 'big':
@unittest.expectedFailure
def test_unseekable_incompleted_write(self):
super().test_unseekable_incompleted_write()
def test_main(): def test_main():
run_unittest(WavePCM8Test, WavePCM16Test, WavePCM24Test, WavePCM32Test) run_unittest(WavePCM8Test, WavePCM16Test, WavePCM24Test, WavePCM32Test)
......
...@@ -424,7 +424,9 @@ class Wave_write: ...@@ -424,7 +424,9 @@ class Wave_write:
data = self._convert(data) data = self._convert(data)
if self._sampwidth in (2, 4) and sys.byteorder == 'big': if self._sampwidth in (2, 4) and sys.byteorder == 'big':
import array import array
data = array.array(_array_fmts[self._sampwidth], data) a = array.array(_array_fmts[self._sampwidth])
a.fromstring(data)
data = a
assert data.itemsize == self._sampwidth assert data.itemsize == self._sampwidth
data.byteswap() data.byteswap()
data.tofile(self._file) data.tofile(self._file)
......
...@@ -12,6 +12,9 @@ Core and Builtins ...@@ -12,6 +12,9 @@ Core and Builtins
Library Library
------- -------
- Issue #19633: Fixed writing not compressed 16- and 32-bit wave files on
big-endian platforms.
- Issue #19449: in csv's writerow, handle non-string keys when generating the - Issue #19449: in csv's writerow, handle non-string keys when generating the
error message that certain keys are not in the 'fieldnames' list. error message that certain keys are not in the 'fieldnames' list.
......
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