|  | :mod:`sunau` --- Read and write Sun AU files | 
|  | ============================================ | 
|  |  | 
|  | .. module:: sunau | 
|  | :synopsis: Provide an interface to the Sun AU sound format. | 
|  |  | 
|  | .. sectionauthor:: Moshe Zadka <moshez@zadka.site.co.il> | 
|  |  | 
|  | **Source code:** :source:`Lib/sunau.py` | 
|  |  | 
|  | -------------- | 
|  |  | 
|  | 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. | 
|  |  | 
|  |  | 
|  | .. function:: openfp(file, mode) | 
|  |  | 
|  | A synonym for :func:`.open`, maintained for backwards compatibility. | 
|  |  | 
|  |  | 
|  | 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 mone, 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`. | 
|  |  |