From 859770f0ff9d410a2d1c160a55c950bc7de367d1 Mon Sep 17 00:00:00 2001 From: Zackery Spytz Date: Sun, 23 Sep 2018 07:47:43 -0600 Subject: [PATCH 1/3] bpo-32990: Support WAVE_FORMAT_EXTENSIBLE in the wave module The test file, a modified version of Lib/test/audiodata/pluck-pcm24.wav, was provided by Andrea Celletti on the bug tracker. --- Lib/test/audiodata/pluck-pcm24-ext.wav | Bin 0 -> 19922 bytes Lib/test/test_wave.py | 30 +++++++++++++++++- Lib/wave.py | 24 ++++++++------ .../2018-09-23-07-47-29.bpo-32990.2FVVTU.rst | 2 ++ 4 files changed, 45 insertions(+), 11 deletions(-) create mode 100644 Lib/test/audiodata/pluck-pcm24-ext.wav create mode 100644 Misc/NEWS.d/next/Library/2018-09-23-07-47-29.bpo-32990.2FVVTU.rst diff --git a/Lib/test/audiodata/pluck-pcm24-ext.wav b/Lib/test/audiodata/pluck-pcm24-ext.wav new file mode 100644 index 0000000000000000000000000000000000000000..e4c2d133597d85079671147e52bacffef232995d GIT binary patch literal 19922 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 Q)*8Hv*qfH;RsUcA1BAud=l}o! literal 0 HcmV?d00001 diff --git a/Lib/test/test_wave.py b/Lib/test/test_wave.py index 0cc94e88b437d7..676328f52af37a 100644 --- a/Lib/test/test_wave.py +++ b/Lib/test/test_wave.py @@ -77,6 +77,33 @@ class WavePCM24Test(WaveTest, unittest.TestCase): frames = wave._byteswap(frames, 3) +class WavePCM24ExtTest(WaveTest, unittest.TestCase): + sndfilename = 'pluck-pcm24-ext.wav' + sndfilenframes = 3307 + nchannels = 2 + sampwidth = 3 + framerate = 11025 + nframes = 48 + comptype = 'NONE' + compname = 'not compressed' + frames = bytes.fromhex("""\ + 022D65FFEB9D 4B5A0F00FA54 3113C304EE2B 80DCD6084303 \ + CBDEC006B261 48A99803F2F8 BFE82401B07D 036BFBFE7B5D \ + B85756FA3EC9 B4B055F3502B 299830EBCB62 1A5CA7E6D99A \ + EDFA3EE491BD C625EBE27884 0E05A9E0B6CF EF2929E02922 \ + 5758D8E27067 FB3557E83E16 1377BFEF8402 D82C5BF7272A \ + 978F16FB7745 F5F865FC1013 086635FB9C4E DF30FCFB40EE \ + 117FE0FA3438 3EE6B8FB5AC3 BC77A3FCB2F4 66D6DAFF5F32 \ + CF13B9041275 431D69097A8C C1BB600EC74E 5120B912A2BA \ + EEDF641754C0 8207001664B7 7FFFFF14453F 8000001294E6 \ + 499C1B0EB3B2 52B73E0DBCA0 EFB2B20F5FD8 CE3CDB0FBE12 \ + E4B49C0CEA2D 6344A80A5A7C 08C8FE0A1FFE 2BB9860B0A0E \ + 51486F0E44E1 8BCC64113B05 B6F4EC0EEB36 4413170A5B48 \ + """) + if sys.byteorder != 'big': + frames = byteswap(frames, 3) + + class WavePCM32Test(WaveTest, unittest.TestCase): sndfilename = 'pluck-pcm32.wav' sndfilenframes = 3307 @@ -106,7 +133,8 @@ class WavePCM32Test(WaveTest, unittest.TestCase): class MiscTestCase(unittest.TestCase): def test__all__(self): - support.check__all__(self, wave, not_exported={'WAVE_FORMAT_PCM'}) + blacklist = {'WAVE_FORMAT_PCM', 'WAVE_FORMAT_EXTENSIBLE'} + support.check__all__(self, wave, blacklist=blacklist) class WaveLowLevelTest(unittest.TestCase): diff --git a/Lib/wave.py b/Lib/wave.py index 9a4557487b6e63..d1c498c1508f85 100644 --- a/Lib/wave.py +++ b/Lib/wave.py @@ -83,6 +83,7 @@ class Error(Exception): pass WAVE_FORMAT_PCM = 0x0001 +WAVE_FORMAT_EXTENSIBLE = 0xFFFE _array_fmts = None, 'b', 'h', None, 'i' @@ -374,19 +375,22 @@ def readframes(self, nframes): def _read_fmt_chunk(self, chunk): try: - wFormatTag, self._nchannels, self._framerate, dwAvgBytesPerSec, wBlockAlign = struct.unpack_from(' Date: Mon, 12 Sep 2022 23:58:14 +0900 Subject: [PATCH 2/3] Replace blacklist with not_exported --- Lib/test/test_wave.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Lib/test/test_wave.py b/Lib/test/test_wave.py index 676328f52af37a..35660fd4d34e18 100644 --- a/Lib/test/test_wave.py +++ b/Lib/test/test_wave.py @@ -101,7 +101,7 @@ class WavePCM24ExtTest(WaveTest, unittest.TestCase): 51486F0E44E1 8BCC64113B05 B6F4EC0EEB36 4413170A5B48 \ """) if sys.byteorder != 'big': - frames = byteswap(frames, 3) + frames = wave._byteswap(frames, 3) class WavePCM32Test(WaveTest, unittest.TestCase): @@ -133,8 +133,8 @@ class WavePCM32Test(WaveTest, unittest.TestCase): class MiscTestCase(unittest.TestCase): def test__all__(self): - blacklist = {'WAVE_FORMAT_PCM', 'WAVE_FORMAT_EXTENSIBLE'} - support.check__all__(self, wave, blacklist=blacklist) + not_exported = {'WAVE_FORMAT_PCM', 'WAVE_FORMAT_EXTENSIBLE'} + support.check__all__(self, wave, not_exported=not_exported) class WaveLowLevelTest(unittest.TestCase): From 5426e369233ef39391c01f9c5a0d540530c89f01 Mon Sep 17 00:00:00 2001 From: Yusuke Kadowaki Date: Tue, 13 Sep 2022 01:33:26 +0900 Subject: [PATCH 3/3] Refactor wave.py --- Lib/wave.py | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/Lib/wave.py b/Lib/wave.py index d1c498c1508f85..e446174b4b22b9 100644 --- a/Lib/wave.py +++ b/Lib/wave.py @@ -375,20 +375,24 @@ def readframes(self, nframes): def _read_fmt_chunk(self, chunk): try: - wFormatTag, self._nchannels, self._framerate, dwAvgBytesPerSec, \ - wBlockAlign, wBitsPerSample = \ - struct.unpack_from('