2007-08-15 22:28:22 +08:00
|
|
|
:mod:`sunau` --- Read and write Sun AU files
|
|
|
|
============================================
|
|
|
|
|
|
|
|
.. module:: sunau
|
|
|
|
:synopsis: Provide an interface to the Sun AU sound format.
|
2016-06-12 03:02:54 +08:00
|
|
|
|
2007-08-15 22:28:22 +08:00
|
|
|
.. sectionauthor:: Moshe Zadka <moshez@zadka.site.co.il>
|
|
|
|
|
2011-01-28 04:38:46 +08:00
|
|
|
**Source code:** :source:`Lib/sunau.py`
|
|
|
|
|
|
|
|
--------------
|
2007-08-15 22:28:22 +08:00
|
|
|
|
|
|
|
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.
|
|
|
|
|
2015-11-02 11:37:02 +08:00
|
|
|
A *mode* of ``'r'`` returns an :class:`AU_read` object, while a *mode* of ``'w'``
|
|
|
|
or ``'wb'`` returns an :class:`AU_write` object.
|
2007-08-15 22:28:22 +08:00
|
|
|
|
|
|
|
|
2009-07-26 23:02:41 +08:00
|
|
|
The :mod:`sunau` module defines the following exception:
|
2007-08-15 22:28:22 +08:00
|
|
|
|
|
|
|
.. exception:: Error
|
|
|
|
|
|
|
|
An error raised when something is impossible because of Sun AU specs or
|
|
|
|
implementation deficiency.
|
|
|
|
|
|
|
|
|
2009-07-26 23:02:41 +08:00
|
|
|
The :mod:`sunau` module defines the following data items:
|
2007-08-15 22:28:22 +08:00
|
|
|
|
|
|
|
.. 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
|
|
|
|
---------------
|
|
|
|
|
2009-07-26 23:02:41 +08:00
|
|
|
AU_read objects, as returned by :func:`.open` above, have the following methods:
|
2007-08-15 22:28:22 +08:00
|
|
|
|
|
|
|
|
|
|
|
.. method:: AU_read.close()
|
|
|
|
|
|
|
|
Close the stream, and make the instance unusable. (This is called automatically
|
|
|
|
on deletion.)
|
|
|
|
|
|
|
|
|
|
|
|
.. method:: AU_read.getnchannels()
|
|
|
|
|
2017-05-20 04:37:57 +08:00
|
|
|
Returns number of audio channels (1 for mono, 2 for stereo).
|
2007-08-15 22:28:22 +08:00
|
|
|
|
|
|
|
|
|
|
|
.. 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()
|
|
|
|
|
2013-09-04 05:43:03 +08:00
|
|
|
Returns a :func:`~collections.namedtuple` ``(nchannels, sampwidth,
|
|
|
|
framerate, nframes, comptype, compname)``, equivalent to output of the
|
|
|
|
:meth:`get\*` methods.
|
2007-08-15 22:28:22 +08:00
|
|
|
|
|
|
|
|
|
|
|
.. method:: AU_read.readframes(n)
|
|
|
|
|
2016-08-24 08:43:56 +08:00
|
|
|
Reads and returns at most *n* frames of audio, as a :class:`bytes` object. The data
|
2007-08-15 22:28:22 +08:00
|
|
|
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
|
|
|
|
----------------
|
|
|
|
|
2009-07-26 23:02:41 +08:00
|
|
|
AU_write objects, as returned by :func:`.open` above, have the following methods:
|
2007-08-15 22:28:22 +08:00
|
|
|
|
|
|
|
|
|
|
|
.. method:: AU_write.setnchannels(n)
|
|
|
|
|
|
|
|
Set the number of channels.
|
|
|
|
|
|
|
|
|
|
|
|
.. method:: AU_write.setsampwidth(n)
|
|
|
|
|
|
|
|
Set the sample width (in bytes.)
|
|
|
|
|
2013-11-11 03:02:53 +08:00
|
|
|
.. versionchanged:: 3.4
|
|
|
|
Added support for 24-bit samples.
|
|
|
|
|
2007-08-15 22:28:22 +08:00
|
|
|
|
|
|
|
.. 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*.
|
|
|
|
|
2013-11-16 20:01:31 +08:00
|
|
|
.. versionchanged:: 3.4
|
2014-03-16 12:13:56 +08:00
|
|
|
Any :term:`bytes-like object` is now accepted.
|
2013-11-16 20:01:31 +08:00
|
|
|
|
2007-08-15 22:28:22 +08:00
|
|
|
|
|
|
|
.. method:: AU_write.writeframes(data)
|
|
|
|
|
|
|
|
Write audio frames and make sure *nframes* is correct.
|
|
|
|
|
2013-11-16 20:01:31 +08:00
|
|
|
.. versionchanged:: 3.4
|
2014-03-16 12:13:56 +08:00
|
|
|
Any :term:`bytes-like object` is now accepted.
|
2013-11-16 20:01:31 +08:00
|
|
|
|
2007-08-15 22:28:22 +08:00
|
|
|
|
|
|
|
.. 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`.
|
|
|
|
|