xref: /third_party/python/Doc/library/wave.rst (revision 7db96d56)
17db96d56Sopenharmony_ci:mod:`wave` --- Read and write WAV files
27db96d56Sopenharmony_ci========================================
37db96d56Sopenharmony_ci
47db96d56Sopenharmony_ci.. module:: wave
57db96d56Sopenharmony_ci   :synopsis: Provide an interface to the WAV sound format.
67db96d56Sopenharmony_ci
77db96d56Sopenharmony_ci.. sectionauthor:: Moshe Zadka <moshez@zadka.site.co.il>
87db96d56Sopenharmony_ci.. Documentations stolen from comments in file.
97db96d56Sopenharmony_ci
107db96d56Sopenharmony_ci**Source code:** :source:`Lib/wave.py`
117db96d56Sopenharmony_ci
127db96d56Sopenharmony_ci--------------
137db96d56Sopenharmony_ci
147db96d56Sopenharmony_ciThe :mod:`wave` module provides a convenient interface to the Waveform Audio
157db96d56Sopenharmony_ci"WAVE" (or "WAV") file format.
167db96d56Sopenharmony_ciOnly files using ``WAVE_FORMAT_PCM`` are supported. Note that this does not
177db96d56Sopenharmony_ciinclude files using ``WAVE_FORMAT_EXTENSIBLE`` even if the subformat is PCM.
187db96d56Sopenharmony_ci
197db96d56Sopenharmony_ciThe :mod:`wave` module defines the following function and exception:
207db96d56Sopenharmony_ci
217db96d56Sopenharmony_ci
227db96d56Sopenharmony_ci.. function:: open(file, mode=None)
237db96d56Sopenharmony_ci
247db96d56Sopenharmony_ci   If *file* is a string, open the file by that name, otherwise treat it as a
257db96d56Sopenharmony_ci   file-like object.  *mode* can be:
267db96d56Sopenharmony_ci
277db96d56Sopenharmony_ci   ``'rb'``
287db96d56Sopenharmony_ci      Read only mode.
297db96d56Sopenharmony_ci
307db96d56Sopenharmony_ci   ``'wb'``
317db96d56Sopenharmony_ci      Write only mode.
327db96d56Sopenharmony_ci
337db96d56Sopenharmony_ci   Note that it does not allow read/write WAV files.
347db96d56Sopenharmony_ci
357db96d56Sopenharmony_ci   A *mode* of ``'rb'`` returns a :class:`Wave_read` object, while a *mode* of
367db96d56Sopenharmony_ci   ``'wb'`` returns a :class:`Wave_write` object.  If *mode* is omitted and a
377db96d56Sopenharmony_ci   file-like object is passed as *file*, ``file.mode`` is used as the default
387db96d56Sopenharmony_ci   value for *mode*.
397db96d56Sopenharmony_ci
407db96d56Sopenharmony_ci   If you pass in a file-like object, the wave object will not close it when its
417db96d56Sopenharmony_ci   ``close()`` method is called; it is the caller's responsibility to close
427db96d56Sopenharmony_ci   the file object.
437db96d56Sopenharmony_ci
447db96d56Sopenharmony_ci   The :func:`.open` function may be used in a :keyword:`with` statement.  When
457db96d56Sopenharmony_ci   the :keyword:`!with` block completes, the :meth:`Wave_read.close()` or
467db96d56Sopenharmony_ci   :meth:`Wave_write.close()` method is called.
477db96d56Sopenharmony_ci
487db96d56Sopenharmony_ci   .. versionchanged:: 3.4
497db96d56Sopenharmony_ci      Added support for unseekable files.
507db96d56Sopenharmony_ci
517db96d56Sopenharmony_ci.. exception:: Error
527db96d56Sopenharmony_ci
537db96d56Sopenharmony_ci   An error raised when something is impossible because it violates the WAV
547db96d56Sopenharmony_ci   specification or hits an implementation deficiency.
557db96d56Sopenharmony_ci
567db96d56Sopenharmony_ci
577db96d56Sopenharmony_ci.. _wave-read-objects:
587db96d56Sopenharmony_ci
597db96d56Sopenharmony_ciWave_read Objects
607db96d56Sopenharmony_ci-----------------
617db96d56Sopenharmony_ci
627db96d56Sopenharmony_ci.. class:: Wave_read
637db96d56Sopenharmony_ci
647db96d56Sopenharmony_ci   Read a WAV file.
657db96d56Sopenharmony_ci
667db96d56Sopenharmony_ci   Wave_read objects, as returned by :func:`.open`, have the following methods:
677db96d56Sopenharmony_ci
687db96d56Sopenharmony_ci
697db96d56Sopenharmony_ci   .. method:: close()
707db96d56Sopenharmony_ci
717db96d56Sopenharmony_ci      Close the stream if it was opened by :mod:`wave`, and make the instance
727db96d56Sopenharmony_ci      unusable.  This is called automatically on object collection.
737db96d56Sopenharmony_ci
747db96d56Sopenharmony_ci
757db96d56Sopenharmony_ci   .. method:: getnchannels()
767db96d56Sopenharmony_ci
777db96d56Sopenharmony_ci      Returns number of audio channels (``1`` for mono, ``2`` for stereo).
787db96d56Sopenharmony_ci
797db96d56Sopenharmony_ci
807db96d56Sopenharmony_ci   .. method:: getsampwidth()
817db96d56Sopenharmony_ci
827db96d56Sopenharmony_ci      Returns sample width in bytes.
837db96d56Sopenharmony_ci
847db96d56Sopenharmony_ci
857db96d56Sopenharmony_ci   .. method:: getframerate()
867db96d56Sopenharmony_ci
877db96d56Sopenharmony_ci      Returns sampling frequency.
887db96d56Sopenharmony_ci
897db96d56Sopenharmony_ci
907db96d56Sopenharmony_ci   .. method:: getnframes()
917db96d56Sopenharmony_ci
927db96d56Sopenharmony_ci      Returns number of audio frames.
937db96d56Sopenharmony_ci
947db96d56Sopenharmony_ci
957db96d56Sopenharmony_ci   .. method:: getcomptype()
967db96d56Sopenharmony_ci
977db96d56Sopenharmony_ci      Returns compression type (``'NONE'`` is the only supported type).
987db96d56Sopenharmony_ci
997db96d56Sopenharmony_ci
1007db96d56Sopenharmony_ci   .. method:: getcompname()
1017db96d56Sopenharmony_ci
1027db96d56Sopenharmony_ci      Human-readable version of :meth:`getcomptype`. Usually ``'not compressed'``
1037db96d56Sopenharmony_ci      parallels ``'NONE'``.
1047db96d56Sopenharmony_ci
1057db96d56Sopenharmony_ci
1067db96d56Sopenharmony_ci   .. method:: getparams()
1077db96d56Sopenharmony_ci
1087db96d56Sopenharmony_ci      Returns a :func:`~collections.namedtuple` ``(nchannels, sampwidth,
1097db96d56Sopenharmony_ci      framerate, nframes, comptype, compname)``, equivalent to output of the
1107db96d56Sopenharmony_ci      ``get*()`` methods.
1117db96d56Sopenharmony_ci
1127db96d56Sopenharmony_ci
1137db96d56Sopenharmony_ci   .. method:: readframes(n)
1147db96d56Sopenharmony_ci
1157db96d56Sopenharmony_ci      Reads and returns at most *n* frames of audio, as a :class:`bytes` object.
1167db96d56Sopenharmony_ci
1177db96d56Sopenharmony_ci
1187db96d56Sopenharmony_ci   .. method:: rewind()
1197db96d56Sopenharmony_ci
1207db96d56Sopenharmony_ci      Rewind the file pointer to the beginning of the audio stream.
1217db96d56Sopenharmony_ci
1227db96d56Sopenharmony_ci   The following two methods are defined for compatibility with the :mod:`aifc`
1237db96d56Sopenharmony_ci   module, and don't do anything interesting.
1247db96d56Sopenharmony_ci
1257db96d56Sopenharmony_ci
1267db96d56Sopenharmony_ci   .. method:: getmarkers()
1277db96d56Sopenharmony_ci
1287db96d56Sopenharmony_ci      Returns ``None``.
1297db96d56Sopenharmony_ci
1307db96d56Sopenharmony_ci
1317db96d56Sopenharmony_ci   .. method:: getmark(id)
1327db96d56Sopenharmony_ci
1337db96d56Sopenharmony_ci      Raise an error.
1347db96d56Sopenharmony_ci
1357db96d56Sopenharmony_ci   The following two methods define a term "position" which is compatible between
1367db96d56Sopenharmony_ci   them, and is otherwise implementation dependent.
1377db96d56Sopenharmony_ci
1387db96d56Sopenharmony_ci
1397db96d56Sopenharmony_ci   .. method:: setpos(pos)
1407db96d56Sopenharmony_ci
1417db96d56Sopenharmony_ci      Set the file pointer to the specified position.
1427db96d56Sopenharmony_ci
1437db96d56Sopenharmony_ci
1447db96d56Sopenharmony_ci   .. method:: tell()
1457db96d56Sopenharmony_ci
1467db96d56Sopenharmony_ci      Return current file pointer position.
1477db96d56Sopenharmony_ci
1487db96d56Sopenharmony_ci
1497db96d56Sopenharmony_ci.. _wave-write-objects:
1507db96d56Sopenharmony_ci
1517db96d56Sopenharmony_ciWave_write Objects
1527db96d56Sopenharmony_ci------------------
1537db96d56Sopenharmony_ci
1547db96d56Sopenharmony_ci.. class:: Wave_write
1557db96d56Sopenharmony_ci
1567db96d56Sopenharmony_ci   Write a WAV file.
1577db96d56Sopenharmony_ci
1587db96d56Sopenharmony_ci   Wave_write objects, as returned by :func:`.open`.
1597db96d56Sopenharmony_ci
1607db96d56Sopenharmony_ci   For seekable output streams, the ``wave`` header will automatically be updated
1617db96d56Sopenharmony_ci   to reflect the number of frames actually written.  For unseekable streams, the
1627db96d56Sopenharmony_ci   *nframes* value must be accurate when the first frame data is written.  An
1637db96d56Sopenharmony_ci   accurate *nframes* value can be achieved either by calling
1647db96d56Sopenharmony_ci   :meth:`setnframes` or :meth:`setparams` with the number
1657db96d56Sopenharmony_ci   of frames that will be written before :meth:`close` is called and
1667db96d56Sopenharmony_ci   then using :meth:`writeframesraw` to write the frame data, or by
1677db96d56Sopenharmony_ci   calling :meth:`writeframes` with all of the frame data to be
1687db96d56Sopenharmony_ci   written.  In the latter case :meth:`writeframes` will calculate
1697db96d56Sopenharmony_ci   the number of frames in the data and set *nframes* accordingly before writing
1707db96d56Sopenharmony_ci   the frame data.
1717db96d56Sopenharmony_ci
1727db96d56Sopenharmony_ci   .. versionchanged:: 3.4
1737db96d56Sopenharmony_ci      Added support for unseekable files.
1747db96d56Sopenharmony_ci
1757db96d56Sopenharmony_ci   Wave_write objects have the following methods:
1767db96d56Sopenharmony_ci
1777db96d56Sopenharmony_ci   .. method:: close()
1787db96d56Sopenharmony_ci
1797db96d56Sopenharmony_ci      Make sure *nframes* is correct, and close the file if it was opened by
1807db96d56Sopenharmony_ci      :mod:`wave`.  This method is called upon object collection.  It will raise
1817db96d56Sopenharmony_ci      an exception if the output stream is not seekable and *nframes* does not
1827db96d56Sopenharmony_ci      match the number of frames actually written.
1837db96d56Sopenharmony_ci
1847db96d56Sopenharmony_ci
1857db96d56Sopenharmony_ci   .. method:: setnchannels(n)
1867db96d56Sopenharmony_ci
1877db96d56Sopenharmony_ci      Set the number of channels.
1887db96d56Sopenharmony_ci
1897db96d56Sopenharmony_ci
1907db96d56Sopenharmony_ci   .. method:: setsampwidth(n)
1917db96d56Sopenharmony_ci
1927db96d56Sopenharmony_ci      Set the sample width to *n* bytes.
1937db96d56Sopenharmony_ci
1947db96d56Sopenharmony_ci
1957db96d56Sopenharmony_ci   .. method:: setframerate(n)
1967db96d56Sopenharmony_ci
1977db96d56Sopenharmony_ci      Set the frame rate to *n*.
1987db96d56Sopenharmony_ci
1997db96d56Sopenharmony_ci      .. versionchanged:: 3.2
2007db96d56Sopenharmony_ci         A non-integral input to this method is rounded to the nearest
2017db96d56Sopenharmony_ci         integer.
2027db96d56Sopenharmony_ci
2037db96d56Sopenharmony_ci
2047db96d56Sopenharmony_ci   .. method:: setnframes(n)
2057db96d56Sopenharmony_ci
2067db96d56Sopenharmony_ci      Set the number of frames to *n*.  This will be changed later if the number
2077db96d56Sopenharmony_ci      of frames actually written is different (this update attempt will
2087db96d56Sopenharmony_ci      raise an error if the output stream is not seekable).
2097db96d56Sopenharmony_ci
2107db96d56Sopenharmony_ci
2117db96d56Sopenharmony_ci   .. method:: setcomptype(type, name)
2127db96d56Sopenharmony_ci
2137db96d56Sopenharmony_ci      Set the compression type and description. At the moment, only compression type
2147db96d56Sopenharmony_ci      ``NONE`` is supported, meaning no compression.
2157db96d56Sopenharmony_ci
2167db96d56Sopenharmony_ci
2177db96d56Sopenharmony_ci   .. method:: setparams(tuple)
2187db96d56Sopenharmony_ci
2197db96d56Sopenharmony_ci      The *tuple* should be ``(nchannels, sampwidth, framerate, nframes, comptype,
2207db96d56Sopenharmony_ci      compname)``, with values valid for the ``set*()`` methods.  Sets all
2217db96d56Sopenharmony_ci      parameters.
2227db96d56Sopenharmony_ci
2237db96d56Sopenharmony_ci
2247db96d56Sopenharmony_ci   .. method:: tell()
2257db96d56Sopenharmony_ci
2267db96d56Sopenharmony_ci      Return current position in the file, with the same disclaimer for the
2277db96d56Sopenharmony_ci      :meth:`Wave_read.tell` and :meth:`Wave_read.setpos` methods.
2287db96d56Sopenharmony_ci
2297db96d56Sopenharmony_ci
2307db96d56Sopenharmony_ci   .. method:: writeframesraw(data)
2317db96d56Sopenharmony_ci
2327db96d56Sopenharmony_ci      Write audio frames, without correcting *nframes*.
2337db96d56Sopenharmony_ci
2347db96d56Sopenharmony_ci      .. versionchanged:: 3.4
2357db96d56Sopenharmony_ci         Any :term:`bytes-like object` is now accepted.
2367db96d56Sopenharmony_ci
2377db96d56Sopenharmony_ci
2387db96d56Sopenharmony_ci   .. method:: writeframes(data)
2397db96d56Sopenharmony_ci
2407db96d56Sopenharmony_ci      Write audio frames and make sure *nframes* is correct.  It will raise an
2417db96d56Sopenharmony_ci      error if the output stream is not seekable and the total number of frames
2427db96d56Sopenharmony_ci      that have been written after *data* has been written does not match the
2437db96d56Sopenharmony_ci      previously set value for *nframes*.
2447db96d56Sopenharmony_ci
2457db96d56Sopenharmony_ci      .. versionchanged:: 3.4
2467db96d56Sopenharmony_ci         Any :term:`bytes-like object` is now accepted.
2477db96d56Sopenharmony_ci
2487db96d56Sopenharmony_ci      Note that it is invalid to set any parameters after calling :meth:`writeframes`
2497db96d56Sopenharmony_ci      or :meth:`writeframesraw`, and any attempt to do so will raise
2507db96d56Sopenharmony_ci      :exc:`wave.Error`.
251