From d179936498452f8ec1ceb3b9be7b063949a96231 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Wed, 24 May 2023 14:58:19 +0200 Subject: [PATCH 1/3] gh-104773: PEP 594: Remove the sunau module --- Doc/library/sunau.rst | 274 --------- Doc/library/superseded.rst | 1 - Doc/tools/.nitignore | 1 - Doc/whatsnew/3.11.rst | 2 +- Doc/whatsnew/3.12.rst | 2 +- Doc/whatsnew/3.13.rst | 3 + Doc/whatsnew/3.4.rst | 8 +- Doc/whatsnew/3.7.rst | 4 +- Lib/sunau.py | 533 ------------------ Lib/test/test_sunau.py | 160 ------ Misc/NEWS.d/3.7.0b3.rst | 2 +- Misc/NEWS.d/3.8.0a1.rst | 2 +- ...-05-24-14-58-13.gh-issue-104773.sQaXrY.rst | 2 + Python/stdlib_module_names.h | 1 - Tools/wasm/wasm_assets.py | 2 +- 15 files changed, 16 insertions(+), 981 deletions(-) delete mode 100644 Doc/library/sunau.rst delete mode 100644 Lib/sunau.py delete mode 100644 Lib/test/test_sunau.py create mode 100644 Misc/NEWS.d/next/Library/2023-05-24-14-58-13.gh-issue-104773.sQaXrY.rst diff --git a/Doc/library/sunau.rst b/Doc/library/sunau.rst deleted file mode 100644 index c7a38d96ade131..00000000000000 --- a/Doc/library/sunau.rst +++ /dev/null @@ -1,274 +0,0 @@ -:mod:`sunau` --- Read and write Sun AU files -============================================ - -.. module:: sunau - :synopsis: Provide an interface to the Sun AU sound format. - :deprecated: - -.. sectionauthor:: Moshe Zadka - -**Source code:** :source:`Lib/sunau.py` - -.. deprecated-removed:: 3.11 3.13 - The :mod:`sunau` module is deprecated - (see :pep:`PEP 594 <594#sunau>` for details). - --------------- - -The :mod:`sunau` module provides a convenient interface to the Sun AU sound -format. Note that this module is interface-compatible with the modules -:mod:`aifc` and :mod:`wave`. - -An audio file consists of a header followed by the data. The fields of the -header are: - -+---------------+-----------------------------------------------+ -| Field | Contents | -+===============+===============================================+ -| magic word | The four bytes ``.snd``. | -+---------------+-----------------------------------------------+ -| header size | Size of the header, including info, in bytes. | -+---------------+-----------------------------------------------+ -| data size | Physical size of the data, in bytes. | -+---------------+-----------------------------------------------+ -| encoding | Indicates how the audio samples are encoded. | -+---------------+-----------------------------------------------+ -| sample rate | The sampling rate. | -+---------------+-----------------------------------------------+ -| # of channels | The number of channels in the samples. | -+---------------+-----------------------------------------------+ -| info | ASCII string giving a description of the | -| | audio file (padded with null bytes). | -+---------------+-----------------------------------------------+ - -Apart from the info field, all header fields are 4 bytes in size. They are all -32-bit unsigned integers encoded in big-endian byte order. - -The :mod:`sunau` module defines the following functions: - - -.. function:: open(file, mode) - - If *file* is a string, open the file by that name, otherwise treat it as a - seekable file-like object. *mode* can be any of - - ``'r'`` - Read only mode. - - ``'w'`` - Write only mode. - - Note that it does not allow read/write files. - - A *mode* of ``'r'`` returns an :class:`AU_read` object, while a *mode* of ``'w'`` - or ``'wb'`` returns an :class:`AU_write` object. - - -The :mod:`sunau` module defines the following exception: - -.. exception:: Error - - An error raised when something is impossible because of Sun AU specs or - implementation deficiency. - - -The :mod:`sunau` module defines the following data items: - -.. data:: AUDIO_FILE_MAGIC - - An integer every valid Sun AU file begins with, stored in big-endian form. This - is the string ``.snd`` interpreted as an integer. - - -.. data:: AUDIO_FILE_ENCODING_MULAW_8 - AUDIO_FILE_ENCODING_LINEAR_8 - AUDIO_FILE_ENCODING_LINEAR_16 - AUDIO_FILE_ENCODING_LINEAR_24 - AUDIO_FILE_ENCODING_LINEAR_32 - AUDIO_FILE_ENCODING_ALAW_8 - - Values of the encoding field from the AU header which are supported by this - module. - - -.. data:: AUDIO_FILE_ENCODING_FLOAT - AUDIO_FILE_ENCODING_DOUBLE - AUDIO_FILE_ENCODING_ADPCM_G721 - AUDIO_FILE_ENCODING_ADPCM_G722 - AUDIO_FILE_ENCODING_ADPCM_G723_3 - AUDIO_FILE_ENCODING_ADPCM_G723_5 - - Additional known values of the encoding field from the AU header, but which are - not supported by this module. - - -.. _au-read-objects: - -AU_read Objects ---------------- - -AU_read objects, as returned by :func:`.open` above, have the following methods: - - -.. method:: AU_read.close() - - Close the stream, and make the instance unusable. (This is called automatically - on deletion.) - - -.. method:: AU_read.getnchannels() - - Returns number of audio channels (1 for mono, 2 for stereo). - - -.. method:: AU_read.getsampwidth() - - Returns sample width in bytes. - - -.. method:: AU_read.getframerate() - - Returns sampling frequency. - - -.. method:: AU_read.getnframes() - - Returns number of audio frames. - - -.. method:: AU_read.getcomptype() - - Returns compression type. Supported compression types are ``'ULAW'``, ``'ALAW'`` - and ``'NONE'``. - - -.. method:: AU_read.getcompname() - - Human-readable version of :meth:`getcomptype`. The supported types have the - respective names ``'CCITT G.711 u-law'``, ``'CCITT G.711 A-law'`` and ``'not - compressed'``. - - -.. method:: AU_read.getparams() - - Returns a :func:`~collections.namedtuple` ``(nchannels, sampwidth, - framerate, nframes, comptype, compname)``, equivalent to output of the - :meth:`get\*` methods. - - -.. method:: AU_read.readframes(n) - - Reads and returns at most *n* frames of audio, as a :class:`bytes` object. The data - will be returned in linear format. If the original data is in u-LAW format, it - will be converted. - - -.. method:: AU_read.rewind() - - Rewind the file pointer to the beginning of the audio stream. - -The following two methods define a term "position" which is compatible between -them, and is otherwise implementation dependent. - - -.. method:: AU_read.setpos(pos) - - Set the file pointer to the specified position. Only values returned from - :meth:`tell` should be used for *pos*. - - -.. method:: AU_read.tell() - - Return current file pointer position. Note that the returned value has nothing - to do with the actual position in the file. - -The following two functions are defined for compatibility with the :mod:`aifc`, -and don't do anything interesting. - - -.. method:: AU_read.getmarkers() - - Returns ``None``. - - -.. method:: AU_read.getmark(id) - - Raise an error. - - -.. _au-write-objects: - -AU_write Objects ----------------- - -AU_write objects, as returned by :func:`.open` above, have the following methods: - - -.. method:: AU_write.setnchannels(n) - - Set the number of channels. - - -.. method:: AU_write.setsampwidth(n) - - Set the sample width (in bytes.) - - .. versionchanged:: 3.4 - Added support for 24-bit samples. - - -.. method:: AU_write.setframerate(n) - - Set the frame rate. - - -.. method:: AU_write.setnframes(n) - - Set the number of frames. This can be later changed, when and if more frames - are written. - - -.. method:: AU_write.setcomptype(type, name) - - Set the compression type and description. Only ``'NONE'`` and ``'ULAW'`` are - supported on output. - - -.. method:: AU_write.setparams(tuple) - - The *tuple* should be ``(nchannels, sampwidth, framerate, nframes, comptype, - compname)``, with values valid for the :meth:`set\*` methods. Set all - parameters. - - -.. method:: AU_write.tell() - - Return current position in the file, with the same disclaimer for the - :meth:`AU_read.tell` and :meth:`AU_read.setpos` methods. - - -.. method:: AU_write.writeframesraw(data) - - Write audio frames, without correcting *nframes*. - - .. versionchanged:: 3.4 - Any :term:`bytes-like object` is now accepted. - - -.. method:: AU_write.writeframes(data) - - Write audio frames and make sure *nframes* is correct. - - .. versionchanged:: 3.4 - Any :term:`bytes-like object` is now accepted. - - -.. method:: AU_write.close() - - Make sure *nframes* is correct, and close the file. - - This method is called upon deletion. - -Note that it is invalid to set any parameters after calling :meth:`writeframes` -or :meth:`writeframesraw`. - diff --git a/Doc/library/superseded.rst b/Doc/library/superseded.rst index a655c09c956fb2..1ab7b08d4d202c 100644 --- a/Doc/library/superseded.rst +++ b/Doc/library/superseded.rst @@ -21,6 +21,5 @@ backwards compatibility. They have been superseded by other modules. nntplib.rst optparse.rst spwd.rst - sunau.rst uu.rst xdrlib.rst diff --git a/Doc/tools/.nitignore b/Doc/tools/.nitignore index b8d3e7d0374a4e..cdd896eda1aa5e 100644 --- a/Doc/tools/.nitignore +++ b/Doc/tools/.nitignore @@ -207,7 +207,6 @@ Doc/library/stdtypes.rst Doc/library/string.rst Doc/library/struct.rst Doc/library/subprocess.rst -Doc/library/sunau.rst Doc/library/sys.rst Doc/library/sys_path_init.rst Doc/library/sysconfig.rst diff --git a/Doc/whatsnew/3.11.rst b/Doc/whatsnew/3.11.rst index e59604e7778f7b..9734d43ef87d25 100644 --- a/Doc/whatsnew/3.11.rst +++ b/Doc/whatsnew/3.11.rst @@ -1737,7 +1737,7 @@ Modules +---------------------+---------------------+---------------------+---------------------+---------------------+ | :mod:`!cgi` | :mod:`imghdr` | :mod:`nntplib` | :mod:`spwd` | :mod:`xdrlib` | +---------------------+---------------------+---------------------+---------------------+---------------------+ - | :mod:`!cgitb` | :mod:`mailcap` | :mod:`!ossaudiodev` | :mod:`sunau` | | + | :mod:`!cgitb` | :mod:`mailcap` | :mod:`!ossaudiodev` | :mod:`!sunau` | | +---------------------+---------------------+---------------------+---------------------+---------------------+ (Contributed by Brett Cannon in :issue:`47061` and Victor Stinner in diff --git a/Doc/whatsnew/3.12.rst b/Doc/whatsnew/3.12.rst index 844d063dbab62f..316296ae038e4e 100644 --- a/Doc/whatsnew/3.12.rst +++ b/Doc/whatsnew/3.12.rst @@ -901,7 +901,7 @@ Modules (see :pep:`594`): * :mod:`!pipes` * :mod:`!sndhdr` * :mod:`spwd` -* :mod:`sunau` +* :mod:`!sunau` * :mod:`!telnetlib` * :mod:`uu` * :mod:`xdrlib` diff --git a/Doc/whatsnew/3.13.rst b/Doc/whatsnew/3.13.rst index d086f3c12e5e3a..83d539b6fc3d9a 100644 --- a/Doc/whatsnew/3.13.rst +++ b/Doc/whatsnew/3.13.rst @@ -161,6 +161,9 @@ Removed use the `pygame project `_ for audio playback. (Contributed by Victor Stinner in :gh:`104780`.) +* :pep:`594`: Remove the :mod:`!sunau` module, deprecated in Python 3.11. + (Contributed by Victor Stinner in :gh:`104773`.) + Porting to Python 3.13 ====================== diff --git a/Doc/whatsnew/3.4.rst b/Doc/whatsnew/3.4.rst index d4ed8abe772aaf..47eb328ec48477 100644 --- a/Doc/whatsnew/3.4.rst +++ b/Doc/whatsnew/3.4.rst @@ -1528,10 +1528,10 @@ work on Windows. This change was actually inadvertently made in 3.3.4. sunau ----- -The :meth:`~sunau.getparams` method now returns a namedtuple rather than a +The :meth:`!~sunau.getparams` method now returns a namedtuple rather than a plain tuple. (Contributed by Claudiu Popa in :issue:`18901`.) -:meth:`sunau.open` now supports the context management protocol: when used in a +:meth:`!sunau.open` now supports the context management protocol: when used in a :keyword:`with` block, the ``close`` method of the returned object will be called automatically at the end of the block. (Contributed by Serhiy Storchaka in :issue:`18878`.) @@ -1540,8 +1540,8 @@ in :issue:`18878`.) support for writing 24 sample using the module. (Contributed by Serhiy Storchaka in :issue:`19261`.) -The :meth:`~sunau.AU_write.writeframesraw` and -:meth:`~sunau.AU_write.writeframes` methods now accept any :term:`bytes-like +The :meth:`!~sunau.AU_write.writeframesraw` and +:meth:`!~sunau.AU_write.writeframes` methods now accept any :term:`bytes-like object`. (Contributed by Serhiy Storchaka in :issue:`8311`.) diff --git a/Doc/whatsnew/3.7.rst b/Doc/whatsnew/3.7.rst index 41d7e08f2b39aa..967608d512f1d5 100644 --- a/Doc/whatsnew/3.7.rst +++ b/Doc/whatsnew/3.7.rst @@ -2061,8 +2061,8 @@ ssl sunau ----- -:func:`sunau.openfp` has been deprecated and will be removed in Python 3.9. -Use :func:`sunau.open` instead. +:func:`!sunau.openfp` has been deprecated and will be removed in Python 3.9. +Use :func:`!sunau.open` instead. (Contributed by Brian Curtin in :issue:`31985`.) diff --git a/Lib/sunau.py b/Lib/sunau.py deleted file mode 100644 index c6caab959abd0c..00000000000000 --- a/Lib/sunau.py +++ /dev/null @@ -1,533 +0,0 @@ -"""Stuff to parse Sun and NeXT audio files. - -An audio file consists of a header followed by the data. The structure -of the header is as follows. - - +---------------+ - | magic word | - +---------------+ - | header size | - +---------------+ - | data size | - +---------------+ - | encoding | - +---------------+ - | sample rate | - +---------------+ - | # of channels | - +---------------+ - | info | - | | - +---------------+ - -The magic word consists of the 4 characters '.snd'. Apart from the -info field, all header fields are 4 bytes in size. They are all -32-bit unsigned integers encoded in big-endian byte order. - -The header size really gives the start of the data. -The data size is the physical size of the data. From the other -parameters the number of frames can be calculated. -The encoding gives the way in which audio samples are encoded. -Possible values are listed below. -The info field currently consists of an ASCII string giving a -human-readable description of the audio file. The info field is -padded with NUL bytes to the header size. - -Usage. - -Reading audio files: - f = sunau.open(file, 'r') -where file is either the name of a file or an open file pointer. -The open file pointer must have methods read(), seek(), and close(). -When the setpos() and rewind() methods are not used, the seek() -method is not necessary. - -This returns an instance of a class with the following public methods: - getnchannels() -- returns number of audio channels (1 for - mono, 2 for stereo) - getsampwidth() -- returns sample width in bytes - getframerate() -- returns sampling frequency - getnframes() -- returns number of audio frames - getcomptype() -- returns compression type ('NONE' or 'ULAW') - getcompname() -- returns human-readable version of - compression type ('not compressed' matches 'NONE') - getparams() -- returns a namedtuple consisting of all of the - above in the above order - getmarkers() -- returns None (for compatibility with the - aifc module) - getmark(id) -- raises an error since the mark does not - exist (for compatibility with the aifc module) - readframes(n) -- returns at most n frames of audio - rewind() -- rewind to the beginning of the audio stream - setpos(pos) -- seek to the specified position - tell() -- return the current position - close() -- close the instance (make it unusable) -The position returned by tell() and the position given to setpos() -are compatible and have nothing to do with the actual position in the -file. -The close() method is called automatically when the class instance -is destroyed. - -Writing audio files: - f = sunau.open(file, 'w') -where file is either the name of a file or an open file pointer. -The open file pointer must have methods write(), tell(), seek(), and -close(). - -This returns an instance of a class with the following public methods: - setnchannels(n) -- set the number of channels - setsampwidth(n) -- set the sample width - setframerate(n) -- set the frame rate - setnframes(n) -- set the number of frames - setcomptype(type, name) - -- set the compression type and the - human-readable compression type - setparams(tuple)-- set all parameters at once - tell() -- return current position in output file - writeframesraw(data) - -- write audio frames without pathing up the - file header - writeframes(data) - -- write audio frames and patch up the file header - close() -- patch up the file header and close the - output file -You should set the parameters before the first writeframesraw or -writeframes. The total number of frames does not need to be set, -but when it is set to the correct value, the header does not have to -be patched up. -It is best to first set all parameters, perhaps possibly the -compression type, and then write audio frames using writeframesraw. -When all frames have been written, either call writeframes(b'') or -close() to patch up the sizes in the header. -The close() method is called automatically when the class instance -is destroyed. -""" - -from collections import namedtuple -import warnings - -warnings._deprecated(__name__, remove=(3, 13)) - - -_sunau_params = namedtuple('_sunau_params', - 'nchannels sampwidth framerate nframes comptype compname') - -# from -AUDIO_FILE_MAGIC = 0x2e736e64 -AUDIO_FILE_ENCODING_MULAW_8 = 1 -AUDIO_FILE_ENCODING_LINEAR_8 = 2 -AUDIO_FILE_ENCODING_LINEAR_16 = 3 -AUDIO_FILE_ENCODING_LINEAR_24 = 4 -AUDIO_FILE_ENCODING_LINEAR_32 = 5 -AUDIO_FILE_ENCODING_FLOAT = 6 -AUDIO_FILE_ENCODING_DOUBLE = 7 -AUDIO_FILE_ENCODING_ADPCM_G721 = 23 -AUDIO_FILE_ENCODING_ADPCM_G722 = 24 -AUDIO_FILE_ENCODING_ADPCM_G723_3 = 25 -AUDIO_FILE_ENCODING_ADPCM_G723_5 = 26 -AUDIO_FILE_ENCODING_ALAW_8 = 27 - -# from -AUDIO_UNKNOWN_SIZE = 0xFFFFFFFF # ((unsigned)(~0)) - -_simple_encodings = [AUDIO_FILE_ENCODING_MULAW_8, - AUDIO_FILE_ENCODING_LINEAR_8, - AUDIO_FILE_ENCODING_LINEAR_16, - AUDIO_FILE_ENCODING_LINEAR_24, - AUDIO_FILE_ENCODING_LINEAR_32, - AUDIO_FILE_ENCODING_ALAW_8] - -class Error(Exception): - pass - -def _read_u32(file): - x = 0 - for i in range(4): - byte = file.read(1) - if not byte: - raise EOFError - x = x*256 + ord(byte) - return x - -def _write_u32(file, x): - data = [] - for i in range(4): - d, m = divmod(x, 256) - data.insert(0, int(m)) - x = d - file.write(bytes(data)) - -class Au_read: - - def __init__(self, f): - if isinstance(f, str): - import builtins - f = builtins.open(f, 'rb') - self._opened = True - else: - self._opened = False - self.initfp(f) - - def __del__(self): - if self._file: - self.close() - - def __enter__(self): - return self - - def __exit__(self, *args): - self.close() - - def initfp(self, file): - self._file = file - self._soundpos = 0 - magic = int(_read_u32(file)) - if magic != AUDIO_FILE_MAGIC: - raise Error('bad magic number') - self._hdr_size = int(_read_u32(file)) - if self._hdr_size < 24: - raise Error('header size too small') - if self._hdr_size > 100: - raise Error('header size ridiculously large') - self._data_size = _read_u32(file) - if self._data_size != AUDIO_UNKNOWN_SIZE: - self._data_size = int(self._data_size) - self._encoding = int(_read_u32(file)) - if self._encoding not in _simple_encodings: - raise Error('encoding not (yet) supported') - if self._encoding in (AUDIO_FILE_ENCODING_MULAW_8, - AUDIO_FILE_ENCODING_ALAW_8): - self._sampwidth = 2 - self._framesize = 1 - elif self._encoding == AUDIO_FILE_ENCODING_LINEAR_8: - self._framesize = self._sampwidth = 1 - elif self._encoding == AUDIO_FILE_ENCODING_LINEAR_16: - self._framesize = self._sampwidth = 2 - elif self._encoding == AUDIO_FILE_ENCODING_LINEAR_24: - self._framesize = self._sampwidth = 3 - elif self._encoding == AUDIO_FILE_ENCODING_LINEAR_32: - self._framesize = self._sampwidth = 4 - else: - raise Error('unknown encoding') - self._framerate = int(_read_u32(file)) - self._nchannels = int(_read_u32(file)) - if not self._nchannels: - raise Error('bad # of channels') - self._framesize = self._framesize * self._nchannels - if self._hdr_size > 24: - self._info = file.read(self._hdr_size - 24) - self._info, _, _ = self._info.partition(b'\0') - else: - self._info = b'' - try: - self._data_pos = file.tell() - except (AttributeError, OSError): - self._data_pos = None - - def getfp(self): - return self._file - - def getnchannels(self): - return self._nchannels - - def getsampwidth(self): - return self._sampwidth - - def getframerate(self): - return self._framerate - - def getnframes(self): - if self._data_size == AUDIO_UNKNOWN_SIZE: - return AUDIO_UNKNOWN_SIZE - if self._encoding in _simple_encodings: - return self._data_size // self._framesize - return 0 # XXX--must do some arithmetic here - - def getcomptype(self): - if self._encoding == AUDIO_FILE_ENCODING_MULAW_8: - return 'ULAW' - elif self._encoding == AUDIO_FILE_ENCODING_ALAW_8: - return 'ALAW' - else: - return 'NONE' - - def getcompname(self): - if self._encoding == AUDIO_FILE_ENCODING_MULAW_8: - return 'CCITT G.711 u-law' - elif self._encoding == AUDIO_FILE_ENCODING_ALAW_8: - return 'CCITT G.711 A-law' - else: - return 'not compressed' - - def getparams(self): - return _sunau_params(self.getnchannels(), self.getsampwidth(), - self.getframerate(), self.getnframes(), - self.getcomptype(), self.getcompname()) - - def getmarkers(self): - return None - - def getmark(self, id): - raise Error('no marks') - - def readframes(self, nframes): - if self._encoding in _simple_encodings: - if nframes == AUDIO_UNKNOWN_SIZE: - data = self._file.read() - else: - data = self._file.read(nframes * self._framesize) - self._soundpos += len(data) // self._framesize - if self._encoding == AUDIO_FILE_ENCODING_MULAW_8: - with warnings.catch_warnings(): - warnings.simplefilter('ignore', category=DeprecationWarning) - import audioop - data = audioop.ulaw2lin(data, self._sampwidth) - return data - return None # XXX--not implemented yet - - def rewind(self): - if self._data_pos is None: - raise OSError('cannot seek') - self._file.seek(self._data_pos) - self._soundpos = 0 - - def tell(self): - return self._soundpos - - def setpos(self, pos): - if pos < 0 or pos > self.getnframes(): - raise Error('position not in range') - if self._data_pos is None: - raise OSError('cannot seek') - self._file.seek(self._data_pos + pos * self._framesize) - self._soundpos = pos - - def close(self): - file = self._file - if file: - self._file = None - if self._opened: - file.close() - -class Au_write: - - def __init__(self, f): - if isinstance(f, str): - import builtins - f = builtins.open(f, 'wb') - self._opened = True - else: - self._opened = False - self.initfp(f) - - def __del__(self): - if self._file: - self.close() - self._file = None - - def __enter__(self): - return self - - def __exit__(self, *args): - self.close() - - def initfp(self, file): - self._file = file - self._framerate = 0 - self._nchannels = 0 - self._sampwidth = 0 - self._framesize = 0 - self._nframes = AUDIO_UNKNOWN_SIZE - self._nframeswritten = 0 - self._datawritten = 0 - self._datalength = 0 - self._info = b'' - self._comptype = 'ULAW' # default is U-law - - def setnchannels(self, nchannels): - if self._nframeswritten: - raise Error('cannot change parameters after starting to write') - if nchannels not in (1, 2, 4): - raise Error('only 1, 2, or 4 channels supported') - self._nchannels = nchannels - - def getnchannels(self): - if not self._nchannels: - raise Error('number of channels not set') - return self._nchannels - - def setsampwidth(self, sampwidth): - if self._nframeswritten: - raise Error('cannot change parameters after starting to write') - if sampwidth not in (1, 2, 3, 4): - raise Error('bad sample width') - self._sampwidth = sampwidth - - def getsampwidth(self): - if not self._framerate: - raise Error('sample width not specified') - return self._sampwidth - - def setframerate(self, framerate): - if self._nframeswritten: - raise Error('cannot change parameters after starting to write') - self._framerate = framerate - - def getframerate(self): - if not self._framerate: - raise Error('frame rate not set') - return self._framerate - - def setnframes(self, nframes): - if self._nframeswritten: - raise Error('cannot change parameters after starting to write') - if nframes < 0: - raise Error('# of frames cannot be negative') - self._nframes = nframes - - def getnframes(self): - return self._nframeswritten - - def setcomptype(self, type, name): - if type in ('NONE', 'ULAW'): - self._comptype = type - else: - raise Error('unknown compression type') - - def getcomptype(self): - return self._comptype - - def getcompname(self): - if self._comptype == 'ULAW': - return 'CCITT G.711 u-law' - elif self._comptype == 'ALAW': - return 'CCITT G.711 A-law' - else: - return 'not compressed' - - def setparams(self, params): - nchannels, sampwidth, framerate, nframes, comptype, compname = params - self.setnchannels(nchannels) - self.setsampwidth(sampwidth) - self.setframerate(framerate) - self.setnframes(nframes) - self.setcomptype(comptype, compname) - - def getparams(self): - return _sunau_params(self.getnchannels(), self.getsampwidth(), - self.getframerate(), self.getnframes(), - self.getcomptype(), self.getcompname()) - - def tell(self): - return self._nframeswritten - - def writeframesraw(self, data): - if not isinstance(data, (bytes, bytearray)): - data = memoryview(data).cast('B') - self._ensure_header_written() - if self._comptype == 'ULAW': - with warnings.catch_warnings(): - warnings.simplefilter('ignore', category=DeprecationWarning) - import audioop - data = audioop.lin2ulaw(data, self._sampwidth) - nframes = len(data) // self._framesize - self._file.write(data) - self._nframeswritten = self._nframeswritten + nframes - self._datawritten = self._datawritten + len(data) - - def writeframes(self, data): - self.writeframesraw(data) - if self._nframeswritten != self._nframes or \ - self._datalength != self._datawritten: - self._patchheader() - - def close(self): - if self._file: - try: - self._ensure_header_written() - if self._nframeswritten != self._nframes or \ - self._datalength != self._datawritten: - self._patchheader() - self._file.flush() - finally: - file = self._file - self._file = None - if self._opened: - file.close() - - # - # private methods - # - - def _ensure_header_written(self): - if not self._nframeswritten: - if not self._nchannels: - raise Error('# of channels not specified') - if not self._sampwidth: - raise Error('sample width not specified') - if not self._framerate: - raise Error('frame rate not specified') - self._write_header() - - def _write_header(self): - if self._comptype == 'NONE': - if self._sampwidth == 1: - encoding = AUDIO_FILE_ENCODING_LINEAR_8 - self._framesize = 1 - elif self._sampwidth == 2: - encoding = AUDIO_FILE_ENCODING_LINEAR_16 - self._framesize = 2 - elif self._sampwidth == 3: - encoding = AUDIO_FILE_ENCODING_LINEAR_24 - self._framesize = 3 - elif self._sampwidth == 4: - encoding = AUDIO_FILE_ENCODING_LINEAR_32 - self._framesize = 4 - else: - raise Error('internal error') - elif self._comptype == 'ULAW': - encoding = AUDIO_FILE_ENCODING_MULAW_8 - self._framesize = 1 - else: - raise Error('internal error') - self._framesize = self._framesize * self._nchannels - _write_u32(self._file, AUDIO_FILE_MAGIC) - header_size = 25 + len(self._info) - header_size = (header_size + 7) & ~7 - _write_u32(self._file, header_size) - if self._nframes == AUDIO_UNKNOWN_SIZE: - length = AUDIO_UNKNOWN_SIZE - else: - length = self._nframes * self._framesize - try: - self._form_length_pos = self._file.tell() - except (AttributeError, OSError): - self._form_length_pos = None - _write_u32(self._file, length) - self._datalength = length - _write_u32(self._file, encoding) - _write_u32(self._file, self._framerate) - _write_u32(self._file, self._nchannels) - self._file.write(self._info) - self._file.write(b'\0'*(header_size - len(self._info) - 24)) - - def _patchheader(self): - if self._form_length_pos is None: - raise OSError('cannot seek') - self._file.seek(self._form_length_pos) - _write_u32(self._file, self._datawritten) - self._datalength = self._datawritten - self._file.seek(0, 2) - -def open(f, mode=None): - if mode is None: - if hasattr(f, 'mode'): - mode = f.mode - else: - mode = 'rb' - if mode in ('r', 'rb'): - return Au_read(f) - elif mode in ('w', 'wb'): - return Au_write(f) - else: - raise Error("mode must be 'r', 'rb', 'w', or 'wb'") diff --git a/Lib/test/test_sunau.py b/Lib/test/test_sunau.py deleted file mode 100644 index 40408b01eda9ac..00000000000000 --- a/Lib/test/test_sunau.py +++ /dev/null @@ -1,160 +0,0 @@ -import unittest -from test import audiotests -import io -import struct -import sys -from test.support import warnings_helper - -sunau = warnings_helper.import_deprecated("sunau") -audioop = warnings_helper.import_deprecated("audioop") - - -class SunauTest(audiotests.AudioWriteTests, - audiotests.AudioTestsWithSourceFile): - module = sunau - - -class SunauPCM8Test(SunauTest, unittest.TestCase): - sndfilename = 'pluck-pcm8.au' - sndfilenframes = 3307 - nchannels = 2 - sampwidth = 1 - framerate = 11025 - nframes = 48 - comptype = 'NONE' - compname = 'not compressed' - frames = bytes.fromhex("""\ - 02FF 4B00 3104 8008 CB06 4803 BF01 03FE B8FA B4F3 29EB 1AE6 \ - EDE4 C6E2 0EE0 EFE0 57E2 FBE8 13EF D8F7 97FB F5FC 08FB DFFB \ - 11FA 3EFB BCFC 66FF CF04 4309 C10E 5112 EE17 8216 7F14 8012 \ - 490E 520D EF0F CE0F E40C 630A 080A 2B0B 510E 8B11 B60E 440A \ - """) - - -class SunauPCM16Test(SunauTest, unittest.TestCase): - sndfilename = 'pluck-pcm16.au' - sndfilenframes = 3307 - nchannels = 2 - sampwidth = 2 - framerate = 11025 - nframes = 48 - comptype = 'NONE' - compname = 'not compressed' - frames = bytes.fromhex("""\ - 022EFFEA 4B5C00F9 311404EF 80DB0844 CBE006B0 48AB03F3 BFE601B5 0367FE80 \ - B853FA42 B4AFF351 2997EBCD 1A5AE6DC EDF9E492 C627E277 0E06E0B7 EF29E029 \ - 5759E271 FB34E83F 1377EF85 D82CF727 978EFB79 F5F7FC12 0864FB9E DF30FB40 \ - 1183FA30 3EEAFB59 BC78FCB4 66D5FF60 CF130415 431A097D C1BA0EC7 512312A0 \ - EEE11754 82071666 7FFE1448 80001298 49990EB7 52B40DC1 EFAD0F65 CE3A0FBE \ - E4B70CE6 63490A57 08CC0A1D 2BBC0B09 51480E46 8BCB113C B6F60EE9 44150A5A \ - """) - - -class SunauPCM24Test(SunauTest, unittest.TestCase): - sndfilename = 'pluck-pcm24.au' - 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 \ - """) - - -class SunauPCM32Test(SunauTest, unittest.TestCase): - sndfilename = 'pluck-pcm32.au' - sndfilenframes = 3307 - nchannels = 2 - sampwidth = 4 - framerate = 11025 - nframes = 48 - comptype = 'NONE' - compname = 'not compressed' - frames = bytes.fromhex("""\ - 022D65BCFFEB9D92 4B5A0F8000FA549C 3113C34004EE2BC0 80DCD680084303E0 \ - CBDEC0C006B26140 48A9980003F2F8FC BFE8248001B07D92 036BFB60FE7B5D34 \ - B8575600FA3EC920 B4B05500F3502BC0 29983000EBCB6240 1A5CA7A0E6D99A60 \ - EDFA3E80E491BD40 C625EB80E27884A0 0E05A9A0E0B6CFE0 EF292940E0292280 \ - 5758D800E2706700 FB3557D8E83E1640 1377BF00EF840280 D82C5B80F7272A80 \ - 978F1600FB774560 F5F86510FC101364 086635A0FB9C4E20 DF30FC40FB40EE28 \ - 117FE0A0FA3438B0 3EE6B840FB5AC3F0 BC77A380FCB2F454 66D6DA80FF5F32B4 \ - CF13B980041275B0 431D6980097A8C00 C1BB60000EC74E00 5120B98012A2BAA0 \ - EEDF64C01754C060 820700001664B780 7FFFFFFF14453F40 800000001294E6E0 \ - 499C1B000EB3B270 52B73E000DBCA020 EFB2B2E00F5FD880 CE3CDB400FBE1270 \ - E4B49CC00CEA2D90 6344A8800A5A7CA0 08C8FE800A1FFEE0 2BB986C00B0A0E00 \ - 51486F800E44E190 8BCC6480113B0580 B6F4EC000EEB3630 441317800A5B48A0 \ - """) - - -class SunauULAWTest(SunauTest, unittest.TestCase): - sndfilename = 'pluck-ulaw.au' - sndfilenframes = 3307 - nchannels = 2 - sampwidth = 2 - framerate = 11025 - nframes = 48 - comptype = 'ULAW' - compname = 'CCITT G.711 u-law' - frames = bytes.fromhex("""\ - 022CFFE8 497C00F4 307C04DC 8284083C CB84069C 497C03DC BE8401AC 036CFE74 \ - B684FA24 B684F344 2A7CEC04 19FCE704 EE04E504 C584E204 0E3CE104 EF04DF84 \ - 557CE204 FB24E804 12FCEF04 D784F744 9684FB64 F5C4FC24 083CFBA4 DF84FB24 \ - 11FCFA24 3E7CFB64 BA84FCB4 657CFF5C CF84041C 417C09BC C1840EBC 517C12FC \ - EF0416FC 828415FC 7D7C13FC 828412FC 497C0EBC 517C0DBC F0040F3C CD840FFC \ - E5040CBC 617C0A3C 08BC0A3C 2C7C0B3C 517C0E3C 8A8410FC B6840EBC 457C0A3C \ - """) - if sys.byteorder != 'big': - frames = audioop.byteswap(frames, 2) - - -class SunauLowLevelTest(unittest.TestCase): - - def test_read_bad_magic_number(self): - b = b'SPA' - with self.assertRaises(EOFError): - sunau.open(io.BytesIO(b)) - b = b'SPAM' - with self.assertRaisesRegex(sunau.Error, 'bad magic number'): - sunau.open(io.BytesIO(b)) - - def test_read_too_small_header(self): - b = struct.pack('>LLLLL', sunau.AUDIO_FILE_MAGIC, 20, 0, - sunau.AUDIO_FILE_ENCODING_LINEAR_8, 11025) - with self.assertRaisesRegex(sunau.Error, 'header size too small'): - sunau.open(io.BytesIO(b)) - - def test_read_too_large_header(self): - b = struct.pack('>LLLLLL', sunau.AUDIO_FILE_MAGIC, 124, 0, - sunau.AUDIO_FILE_ENCODING_LINEAR_8, 11025, 1) - b += b'\0' * 100 - with self.assertRaisesRegex(sunau.Error, 'header size ridiculously large'): - sunau.open(io.BytesIO(b)) - - def test_read_wrong_encoding(self): - b = struct.pack('>LLLLLL', sunau.AUDIO_FILE_MAGIC, 24, 0, 0, 11025, 1) - with self.assertRaisesRegex(sunau.Error, r'encoding not \(yet\) supported'): - sunau.open(io.BytesIO(b)) - - def test_read_wrong_number_of_channels(self): - b = struct.pack('>LLLLLL', sunau.AUDIO_FILE_MAGIC, 24, 0, - sunau.AUDIO_FILE_ENCODING_LINEAR_8, 11025, 0) - with self.assertRaisesRegex(sunau.Error, 'bad # of channels'): - sunau.open(io.BytesIO(b)) - - -if __name__ == "__main__": - unittest.main() diff --git a/Misc/NEWS.d/3.7.0b3.rst b/Misc/NEWS.d/3.7.0b3.rst index 547fb50f5ecfdd..980110646b2940 100644 --- a/Misc/NEWS.d/3.7.0b3.rst +++ b/Misc/NEWS.d/3.7.0b3.rst @@ -326,7 +326,7 @@ documentation. Improved exceptions raised for invalid number of channels and sample width when read an audio file in modules :mod:`aifc`, :mod:`wave` and -:mod:`sunau`. +:mod:`!sunau`. .. diff --git a/Misc/NEWS.d/3.8.0a1.rst b/Misc/NEWS.d/3.8.0a1.rst index 2564167cdf0895..75902b47169419 100644 --- a/Misc/NEWS.d/3.8.0a1.rst +++ b/Misc/NEWS.d/3.8.0a1.rst @@ -5577,7 +5577,7 @@ documentation. Improved exceptions raised for invalid number of channels and sample width when read an audio file in modules :mod:`aifc`, :mod:`wave` and -:mod:`sunau`. +:mod:`!sunau`. .. diff --git a/Misc/NEWS.d/next/Library/2023-05-24-14-58-13.gh-issue-104773.sQaXrY.rst b/Misc/NEWS.d/next/Library/2023-05-24-14-58-13.gh-issue-104773.sQaXrY.rst new file mode 100644 index 00000000000000..fc103cd9aa3982 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2023-05-24-14-58-13.gh-issue-104773.sQaXrY.rst @@ -0,0 +1,2 @@ +:pep:`594`: Remove the :mod:`!sunau` module, deprecated in Python 3.11. +Patch by Victor Stinner. diff --git a/Python/stdlib_module_names.h b/Python/stdlib_module_names.h index fe396a896ce34e..37d5c05579ebe1 100644 --- a/Python/stdlib_module_names.h +++ b/Python/stdlib_module_names.h @@ -248,7 +248,6 @@ static const char* _Py_stdlib_module_names[] = { "stringprep", "struct", "subprocess", -"sunau", "symtable", "sys", "sysconfig", diff --git a/Tools/wasm/wasm_assets.py b/Tools/wasm/wasm_assets.py index a2ec54ec9867a2..47bc238c64819f 100755 --- a/Tools/wasm/wasm_assets.py +++ b/Tools/wasm/wasm_assets.py @@ -84,7 +84,7 @@ OMIT_MODULE_FILES = { "_asyncio": ["asyncio/"], - "audioop": ["aifc.py", "sunau.py", "wave.py"], + "audioop": ["aifc.py", "wave.py"], "_crypt": ["crypt.py"], "_curses": ["curses/"], "_ctypes": ["ctypes/"], From ce931ef64b7a94a2f69536ce0dead627f58ca22a Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Wed, 24 May 2023 15:20:06 +0200 Subject: [PATCH 2/3] Fix Sphinx syntax --- Doc/whatsnew/3.4.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Doc/whatsnew/3.4.rst b/Doc/whatsnew/3.4.rst index 47eb328ec48477..b9008328b49fd5 100644 --- a/Doc/whatsnew/3.4.rst +++ b/Doc/whatsnew/3.4.rst @@ -1528,7 +1528,7 @@ work on Windows. This change was actually inadvertently made in 3.3.4. sunau ----- -The :meth:`!~sunau.getparams` method now returns a namedtuple rather than a +The :meth:`~!sunau.getparams` method now returns a namedtuple rather than a plain tuple. (Contributed by Claudiu Popa in :issue:`18901`.) :meth:`!sunau.open` now supports the context management protocol: when used in a @@ -1540,8 +1540,8 @@ in :issue:`18878`.) support for writing 24 sample using the module. (Contributed by Serhiy Storchaka in :issue:`19261`.) -The :meth:`!~sunau.AU_write.writeframesraw` and -:meth:`!~sunau.AU_write.writeframes` methods now accept any :term:`bytes-like +The :meth:`~!sunau.AU_write.writeframesraw` and +:meth:`~!sunau.AU_write.writeframes` methods now accept any :term:`bytes-like object`. (Contributed by Serhiy Storchaka in :issue:`8311`.) From 28c48daa505b7e93ddd586b1e370bc1006969fe1 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Wed, 24 May 2023 15:25:47 +0200 Subject: [PATCH 3/3] Remove audio test files * Remove all Lib/test/audiodata/pluck-*.au files. * Remove Lib/test/audiotest.au file. --- Lib/test/audiodata/pluck-pcm16.au | Bin 13252 -> 0 bytes Lib/test/audiodata/pluck-pcm24.au | Bin 19866 -> 0 bytes Lib/test/audiodata/pluck-pcm32.au | Bin 26480 -> 0 bytes Lib/test/audiodata/pluck-pcm8.au | Bin 6638 -> 0 bytes Lib/test/audiodata/pluck-ulaw.au | Bin 6638 -> 0 bytes Lib/test/audiotest.au | Bin 28144 -> 0 bytes 6 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 Lib/test/audiodata/pluck-pcm16.au delete mode 100644 Lib/test/audiodata/pluck-pcm24.au delete mode 100644 Lib/test/audiodata/pluck-pcm32.au delete mode 100644 Lib/test/audiodata/pluck-pcm8.au delete mode 100644 Lib/test/audiodata/pluck-ulaw.au delete mode 100644 Lib/test/audiotest.au diff --git a/Lib/test/audiodata/pluck-pcm16.au b/Lib/test/audiodata/pluck-pcm16.au deleted file mode 100644 index 398f07f071974314161f1f364d005586921eba1d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13252 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 Sc_W7FgxYhTfS>2TI`IF$J<(PG diff --git a/Lib/test/audiodata/pluck-pcm24.au b/Lib/test/audiodata/pluck-pcm24.au deleted file mode 100644 index 0bb230418a3844b81637c7b4b1ea3f18f3bfe2d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19866 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 Q5k_cPsXyxS68(SuFDCQN5C8xG diff --git a/Lib/test/audiodata/pluck-pcm32.au b/Lib/test/audiodata/pluck-pcm32.au deleted file mode 100644 index 92ee5965e40197bd2a086841f37f0d7ca681a03b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26480 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 z 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 z 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 diff --git a/Lib/test/audiodata/pluck-ulaw.au b/Lib/test/audiodata/pluck-ulaw.au deleted file mode 100644 index 11103535c6b6a401da742a3c76db68baf2c38ba1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6638 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 diff --git a/Lib/test/audiotest.au b/Lib/test/audiotest.au deleted file mode 100644 index f76b0501b8c61b4fabbb3715b69a9434a42469cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28144 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 Xh!X_U;M@RG_pPOQ?cxro7n}YcFvyK}