17db96d56Sopenharmony_ci:mod:`sunau` --- Read and write Sun AU files
27db96d56Sopenharmony_ci============================================
37db96d56Sopenharmony_ci
47db96d56Sopenharmony_ci.. module:: sunau
57db96d56Sopenharmony_ci   :synopsis: Provide an interface to the Sun AU sound format.
67db96d56Sopenharmony_ci   :deprecated:
77db96d56Sopenharmony_ci
87db96d56Sopenharmony_ci.. sectionauthor:: Moshe Zadka <moshez@zadka.site.co.il>
97db96d56Sopenharmony_ci
107db96d56Sopenharmony_ci**Source code:** :source:`Lib/sunau.py`
117db96d56Sopenharmony_ci
127db96d56Sopenharmony_ci.. deprecated-removed:: 3.11 3.13
137db96d56Sopenharmony_ci   The :mod:`sunau` module is deprecated
147db96d56Sopenharmony_ci   (see :pep:`PEP 594 <594#sunau>` for details).
157db96d56Sopenharmony_ci
167db96d56Sopenharmony_ci--------------
177db96d56Sopenharmony_ci
187db96d56Sopenharmony_ciThe :mod:`sunau` module provides a convenient interface to the Sun AU sound
197db96d56Sopenharmony_ciformat.  Note that this module is interface-compatible with the modules
207db96d56Sopenharmony_ci:mod:`aifc` and :mod:`wave`.
217db96d56Sopenharmony_ci
227db96d56Sopenharmony_ciAn audio file consists of a header followed by the data.  The fields of the
237db96d56Sopenharmony_ciheader are:
247db96d56Sopenharmony_ci
257db96d56Sopenharmony_ci+---------------+-----------------------------------------------+
267db96d56Sopenharmony_ci| Field         | Contents                                      |
277db96d56Sopenharmony_ci+===============+===============================================+
287db96d56Sopenharmony_ci| magic word    | The four bytes ``.snd``.                      |
297db96d56Sopenharmony_ci+---------------+-----------------------------------------------+
307db96d56Sopenharmony_ci| header size   | Size of the header, including info, in bytes. |
317db96d56Sopenharmony_ci+---------------+-----------------------------------------------+
327db96d56Sopenharmony_ci| data size     | Physical size of the data, in bytes.          |
337db96d56Sopenharmony_ci+---------------+-----------------------------------------------+
347db96d56Sopenharmony_ci| encoding      | Indicates how the audio samples are encoded.  |
357db96d56Sopenharmony_ci+---------------+-----------------------------------------------+
367db96d56Sopenharmony_ci| sample rate   | The sampling rate.                            |
377db96d56Sopenharmony_ci+---------------+-----------------------------------------------+
387db96d56Sopenharmony_ci| # of channels | The number of channels in the samples.        |
397db96d56Sopenharmony_ci+---------------+-----------------------------------------------+
407db96d56Sopenharmony_ci| info          | ASCII string giving a description of the      |
417db96d56Sopenharmony_ci|               | audio file (padded with null bytes).          |
427db96d56Sopenharmony_ci+---------------+-----------------------------------------------+
437db96d56Sopenharmony_ci
447db96d56Sopenharmony_ciApart from the info field, all header fields are 4 bytes in size. They are all
457db96d56Sopenharmony_ci32-bit unsigned integers encoded in big-endian byte order.
467db96d56Sopenharmony_ci
477db96d56Sopenharmony_ciThe :mod:`sunau` module defines the following functions:
487db96d56Sopenharmony_ci
497db96d56Sopenharmony_ci
507db96d56Sopenharmony_ci.. function:: open(file, mode)
517db96d56Sopenharmony_ci
527db96d56Sopenharmony_ci   If *file* is a string, open the file by that name, otherwise treat it as a
537db96d56Sopenharmony_ci   seekable file-like object. *mode* can be any of
547db96d56Sopenharmony_ci
557db96d56Sopenharmony_ci   ``'r'``
567db96d56Sopenharmony_ci      Read only mode.
577db96d56Sopenharmony_ci
587db96d56Sopenharmony_ci   ``'w'``
597db96d56Sopenharmony_ci      Write only mode.
607db96d56Sopenharmony_ci
617db96d56Sopenharmony_ci   Note that it does not allow read/write files.
627db96d56Sopenharmony_ci
637db96d56Sopenharmony_ci   A *mode* of ``'r'`` returns an :class:`AU_read` object, while a *mode* of ``'w'``
647db96d56Sopenharmony_ci   or ``'wb'`` returns an :class:`AU_write` object.
657db96d56Sopenharmony_ci
667db96d56Sopenharmony_ci
677db96d56Sopenharmony_ciThe :mod:`sunau` module defines the following exception:
687db96d56Sopenharmony_ci
697db96d56Sopenharmony_ci.. exception:: Error
707db96d56Sopenharmony_ci
717db96d56Sopenharmony_ci   An error raised when something is impossible because of Sun AU specs or
727db96d56Sopenharmony_ci   implementation deficiency.
737db96d56Sopenharmony_ci
747db96d56Sopenharmony_ci
757db96d56Sopenharmony_ciThe :mod:`sunau` module defines the following data items:
767db96d56Sopenharmony_ci
777db96d56Sopenharmony_ci.. data:: AUDIO_FILE_MAGIC
787db96d56Sopenharmony_ci
797db96d56Sopenharmony_ci   An integer every valid Sun AU file begins with, stored in big-endian form.  This
807db96d56Sopenharmony_ci   is the string ``.snd`` interpreted as an integer.
817db96d56Sopenharmony_ci
827db96d56Sopenharmony_ci
837db96d56Sopenharmony_ci.. data:: AUDIO_FILE_ENCODING_MULAW_8
847db96d56Sopenharmony_ci          AUDIO_FILE_ENCODING_LINEAR_8
857db96d56Sopenharmony_ci          AUDIO_FILE_ENCODING_LINEAR_16
867db96d56Sopenharmony_ci          AUDIO_FILE_ENCODING_LINEAR_24
877db96d56Sopenharmony_ci          AUDIO_FILE_ENCODING_LINEAR_32
887db96d56Sopenharmony_ci          AUDIO_FILE_ENCODING_ALAW_8
897db96d56Sopenharmony_ci
907db96d56Sopenharmony_ci   Values of the encoding field from the AU header which are supported by this
917db96d56Sopenharmony_ci   module.
927db96d56Sopenharmony_ci
937db96d56Sopenharmony_ci
947db96d56Sopenharmony_ci.. data:: AUDIO_FILE_ENCODING_FLOAT
957db96d56Sopenharmony_ci          AUDIO_FILE_ENCODING_DOUBLE
967db96d56Sopenharmony_ci          AUDIO_FILE_ENCODING_ADPCM_G721
977db96d56Sopenharmony_ci          AUDIO_FILE_ENCODING_ADPCM_G722
987db96d56Sopenharmony_ci          AUDIO_FILE_ENCODING_ADPCM_G723_3
997db96d56Sopenharmony_ci          AUDIO_FILE_ENCODING_ADPCM_G723_5
1007db96d56Sopenharmony_ci
1017db96d56Sopenharmony_ci   Additional known values of the encoding field from the AU header, but which are
1027db96d56Sopenharmony_ci   not supported by this module.
1037db96d56Sopenharmony_ci
1047db96d56Sopenharmony_ci
1057db96d56Sopenharmony_ci.. _au-read-objects:
1067db96d56Sopenharmony_ci
1077db96d56Sopenharmony_ciAU_read Objects
1087db96d56Sopenharmony_ci---------------
1097db96d56Sopenharmony_ci
1107db96d56Sopenharmony_ciAU_read objects, as returned by :func:`.open` above, have the following methods:
1117db96d56Sopenharmony_ci
1127db96d56Sopenharmony_ci
1137db96d56Sopenharmony_ci.. method:: AU_read.close()
1147db96d56Sopenharmony_ci
1157db96d56Sopenharmony_ci   Close the stream, and make the instance unusable. (This is  called automatically
1167db96d56Sopenharmony_ci   on deletion.)
1177db96d56Sopenharmony_ci
1187db96d56Sopenharmony_ci
1197db96d56Sopenharmony_ci.. method:: AU_read.getnchannels()
1207db96d56Sopenharmony_ci
1217db96d56Sopenharmony_ci   Returns number of audio channels (1 for mono, 2 for stereo).
1227db96d56Sopenharmony_ci
1237db96d56Sopenharmony_ci
1247db96d56Sopenharmony_ci.. method:: AU_read.getsampwidth()
1257db96d56Sopenharmony_ci
1267db96d56Sopenharmony_ci   Returns sample width in bytes.
1277db96d56Sopenharmony_ci
1287db96d56Sopenharmony_ci
1297db96d56Sopenharmony_ci.. method:: AU_read.getframerate()
1307db96d56Sopenharmony_ci
1317db96d56Sopenharmony_ci   Returns sampling frequency.
1327db96d56Sopenharmony_ci
1337db96d56Sopenharmony_ci
1347db96d56Sopenharmony_ci.. method:: AU_read.getnframes()
1357db96d56Sopenharmony_ci
1367db96d56Sopenharmony_ci   Returns number of audio frames.
1377db96d56Sopenharmony_ci
1387db96d56Sopenharmony_ci
1397db96d56Sopenharmony_ci.. method:: AU_read.getcomptype()
1407db96d56Sopenharmony_ci
1417db96d56Sopenharmony_ci   Returns compression type. Supported compression types are ``'ULAW'``, ``'ALAW'``
1427db96d56Sopenharmony_ci   and ``'NONE'``.
1437db96d56Sopenharmony_ci
1447db96d56Sopenharmony_ci
1457db96d56Sopenharmony_ci.. method:: AU_read.getcompname()
1467db96d56Sopenharmony_ci
1477db96d56Sopenharmony_ci   Human-readable version of :meth:`getcomptype`.  The supported types have the
1487db96d56Sopenharmony_ci   respective names ``'CCITT G.711 u-law'``, ``'CCITT G.711 A-law'`` and ``'not
1497db96d56Sopenharmony_ci   compressed'``.
1507db96d56Sopenharmony_ci
1517db96d56Sopenharmony_ci
1527db96d56Sopenharmony_ci.. method:: AU_read.getparams()
1537db96d56Sopenharmony_ci
1547db96d56Sopenharmony_ci   Returns a :func:`~collections.namedtuple` ``(nchannels, sampwidth,
1557db96d56Sopenharmony_ci   framerate, nframes, comptype, compname)``, equivalent to output of the
1567db96d56Sopenharmony_ci   :meth:`get\*` methods.
1577db96d56Sopenharmony_ci
1587db96d56Sopenharmony_ci
1597db96d56Sopenharmony_ci.. method:: AU_read.readframes(n)
1607db96d56Sopenharmony_ci
1617db96d56Sopenharmony_ci   Reads and returns at most *n* frames of audio, as a :class:`bytes` object.  The data
1627db96d56Sopenharmony_ci   will be returned in linear format.  If the original data is in u-LAW format, it
1637db96d56Sopenharmony_ci   will be converted.
1647db96d56Sopenharmony_ci
1657db96d56Sopenharmony_ci
1667db96d56Sopenharmony_ci.. method:: AU_read.rewind()
1677db96d56Sopenharmony_ci
1687db96d56Sopenharmony_ci   Rewind the file pointer to the beginning of the audio stream.
1697db96d56Sopenharmony_ci
1707db96d56Sopenharmony_ciThe following two methods define a term "position" which is compatible between
1717db96d56Sopenharmony_cithem, and is otherwise implementation dependent.
1727db96d56Sopenharmony_ci
1737db96d56Sopenharmony_ci
1747db96d56Sopenharmony_ci.. method:: AU_read.setpos(pos)
1757db96d56Sopenharmony_ci
1767db96d56Sopenharmony_ci   Set the file pointer to the specified position.  Only values returned from
1777db96d56Sopenharmony_ci   :meth:`tell` should be used for *pos*.
1787db96d56Sopenharmony_ci
1797db96d56Sopenharmony_ci
1807db96d56Sopenharmony_ci.. method:: AU_read.tell()
1817db96d56Sopenharmony_ci
1827db96d56Sopenharmony_ci   Return current file pointer position.  Note that the returned value has nothing
1837db96d56Sopenharmony_ci   to do with the actual position in the file.
1847db96d56Sopenharmony_ci
1857db96d56Sopenharmony_ciThe following two functions are defined for compatibility with the  :mod:`aifc`,
1867db96d56Sopenharmony_ciand don't do anything interesting.
1877db96d56Sopenharmony_ci
1887db96d56Sopenharmony_ci
1897db96d56Sopenharmony_ci.. method:: AU_read.getmarkers()
1907db96d56Sopenharmony_ci
1917db96d56Sopenharmony_ci   Returns ``None``.
1927db96d56Sopenharmony_ci
1937db96d56Sopenharmony_ci
1947db96d56Sopenharmony_ci.. method:: AU_read.getmark(id)
1957db96d56Sopenharmony_ci
1967db96d56Sopenharmony_ci   Raise an error.
1977db96d56Sopenharmony_ci
1987db96d56Sopenharmony_ci
1997db96d56Sopenharmony_ci.. _au-write-objects:
2007db96d56Sopenharmony_ci
2017db96d56Sopenharmony_ciAU_write Objects
2027db96d56Sopenharmony_ci----------------
2037db96d56Sopenharmony_ci
2047db96d56Sopenharmony_ciAU_write objects, as returned by :func:`.open` above, have the following methods:
2057db96d56Sopenharmony_ci
2067db96d56Sopenharmony_ci
2077db96d56Sopenharmony_ci.. method:: AU_write.setnchannels(n)
2087db96d56Sopenharmony_ci
2097db96d56Sopenharmony_ci   Set the number of channels.
2107db96d56Sopenharmony_ci
2117db96d56Sopenharmony_ci
2127db96d56Sopenharmony_ci.. method:: AU_write.setsampwidth(n)
2137db96d56Sopenharmony_ci
2147db96d56Sopenharmony_ci   Set the sample width (in bytes.)
2157db96d56Sopenharmony_ci
2167db96d56Sopenharmony_ci   .. versionchanged:: 3.4
2177db96d56Sopenharmony_ci      Added support for 24-bit samples.
2187db96d56Sopenharmony_ci
2197db96d56Sopenharmony_ci
2207db96d56Sopenharmony_ci.. method:: AU_write.setframerate(n)
2217db96d56Sopenharmony_ci
2227db96d56Sopenharmony_ci   Set the frame rate.
2237db96d56Sopenharmony_ci
2247db96d56Sopenharmony_ci
2257db96d56Sopenharmony_ci.. method:: AU_write.setnframes(n)
2267db96d56Sopenharmony_ci
2277db96d56Sopenharmony_ci   Set the number of frames. This can be later changed, when and if more  frames
2287db96d56Sopenharmony_ci   are written.
2297db96d56Sopenharmony_ci
2307db96d56Sopenharmony_ci
2317db96d56Sopenharmony_ci.. method:: AU_write.setcomptype(type, name)
2327db96d56Sopenharmony_ci
2337db96d56Sopenharmony_ci   Set the compression type and description. Only ``'NONE'`` and ``'ULAW'`` are
2347db96d56Sopenharmony_ci   supported on output.
2357db96d56Sopenharmony_ci
2367db96d56Sopenharmony_ci
2377db96d56Sopenharmony_ci.. method:: AU_write.setparams(tuple)
2387db96d56Sopenharmony_ci
2397db96d56Sopenharmony_ci   The *tuple* should be ``(nchannels, sampwidth, framerate, nframes, comptype,
2407db96d56Sopenharmony_ci   compname)``, with values valid for the :meth:`set\*` methods.  Set all
2417db96d56Sopenharmony_ci   parameters.
2427db96d56Sopenharmony_ci
2437db96d56Sopenharmony_ci
2447db96d56Sopenharmony_ci.. method:: AU_write.tell()
2457db96d56Sopenharmony_ci
2467db96d56Sopenharmony_ci   Return current position in the file, with the same disclaimer for the
2477db96d56Sopenharmony_ci   :meth:`AU_read.tell` and :meth:`AU_read.setpos` methods.
2487db96d56Sopenharmony_ci
2497db96d56Sopenharmony_ci
2507db96d56Sopenharmony_ci.. method:: AU_write.writeframesraw(data)
2517db96d56Sopenharmony_ci
2527db96d56Sopenharmony_ci   Write audio frames, without correcting *nframes*.
2537db96d56Sopenharmony_ci
2547db96d56Sopenharmony_ci   .. versionchanged:: 3.4
2557db96d56Sopenharmony_ci      Any :term:`bytes-like object` is now accepted.
2567db96d56Sopenharmony_ci
2577db96d56Sopenharmony_ci
2587db96d56Sopenharmony_ci.. method:: AU_write.writeframes(data)
2597db96d56Sopenharmony_ci
2607db96d56Sopenharmony_ci   Write audio frames and make sure *nframes* is correct.
2617db96d56Sopenharmony_ci
2627db96d56Sopenharmony_ci   .. versionchanged:: 3.4
2637db96d56Sopenharmony_ci      Any :term:`bytes-like object` is now accepted.
2647db96d56Sopenharmony_ci
2657db96d56Sopenharmony_ci
2667db96d56Sopenharmony_ci.. method:: AU_write.close()
2677db96d56Sopenharmony_ci
2687db96d56Sopenharmony_ci   Make sure *nframes* is correct, and close the file.
2697db96d56Sopenharmony_ci
2707db96d56Sopenharmony_ci   This method is called upon deletion.
2717db96d56Sopenharmony_ci
2727db96d56Sopenharmony_ciNote that it is invalid to set any parameters after calling  :meth:`writeframes`
2737db96d56Sopenharmony_cior :meth:`writeframesraw`.
2747db96d56Sopenharmony_ci
275