diff options
author | Georg Brandl <georg@python.org> | 2007-08-15 14:28:22 (GMT) |
---|---|---|
committer | Georg Brandl <georg@python.org> | 2007-08-15 14:28:22 (GMT) |
commit | 116aa62bf54a39697e25f21d6cf6799f7faa1349 (patch) | |
tree | 8db5729518ed4ca88e26f1e26cc8695151ca3eb3 /Doc/library/chunk.rst | |
parent | 739c01d47b9118d04e5722333f0e6b4d0c8bdd9e (diff) | |
download | cpython-116aa62bf54a39697e25f21d6cf6799f7faa1349.zip cpython-116aa62bf54a39697e25f21d6cf6799f7faa1349.tar.gz cpython-116aa62bf54a39697e25f21d6cf6799f7faa1349.tar.bz2 |
Move the 3k reST doc tree in place.
Diffstat (limited to 'Doc/library/chunk.rst')
-rw-r--r-- | Doc/library/chunk.rst | 130 |
1 files changed, 130 insertions, 0 deletions
diff --git a/Doc/library/chunk.rst b/Doc/library/chunk.rst new file mode 100644 index 0000000..2e1798d --- /dev/null +++ b/Doc/library/chunk.rst @@ -0,0 +1,130 @@ + +:mod:`chunk` --- Read IFF chunked data +====================================== + +.. module:: chunk + :synopsis: Module to read IFF chunks. +.. moduleauthor:: Sjoerd Mullender <sjoerd@acm.org> +.. sectionauthor:: Sjoerd Mullender <sjoerd@acm.org> + + +.. index:: + single: Audio Interchange File Format + single: AIFF + single: AIFF-C + single: Real Media File Format + single: RMFF + +This module provides an interface for reading files that use EA IFF 85 chunks. +[#]_ This format is used in at least the Audio Interchange File Format +(AIFF/AIFF-C) and the Real Media File Format (RMFF). The WAVE audio file format +is closely related and can also be read using this module. + +A chunk has the following structure: + ++---------+--------+-------------------------------+ +| Offset | Length | Contents | ++=========+========+===============================+ +| 0 | 4 | Chunk ID | ++---------+--------+-------------------------------+ +| 4 | 4 | Size of chunk in big-endian | +| | | byte order, not including the | +| | | header | ++---------+--------+-------------------------------+ +| 8 | *n* | Data bytes, where *n* is the | +| | | size given in the preceding | +| | | field | ++---------+--------+-------------------------------+ +| 8 + *n* | 0 or 1 | Pad byte needed if *n* is odd | +| | | and chunk alignment is used | ++---------+--------+-------------------------------+ + +The ID is a 4-byte string which identifies the type of chunk. + +The size field (a 32-bit value, encoded using big-endian byte order) gives the +size of the chunk data, not including the 8-byte header. + +Usually an IFF-type file consists of one or more chunks. The proposed usage of +the :class:`Chunk` class defined here is to instantiate an instance at the start +of each chunk and read from the instance until it reaches the end, after which a +new instance can be instantiated. At the end of the file, creating a new +instance will fail with a :exc:`EOFError` exception. + + +.. class:: Chunk(file[, align, bigendian, inclheader]) + + Class which represents a chunk. The *file* argument is expected to be a + file-like object. An instance of this class is specifically allowed. The + only method that is needed is :meth:`read`. If the methods :meth:`seek` and + :meth:`tell` are present and don't raise an exception, they are also used. + If these methods are present and raise an exception, they are expected to not + have altered the object. If the optional argument *align* is true, chunks + are assumed to be aligned on 2-byte boundaries. If *align* is false, no + alignment is assumed. The default value is true. If the optional argument + *bigendian* is false, the chunk size is assumed to be in little-endian order. + This is needed for WAVE audio files. The default value is true. If the + optional argument *inclheader* is true, the size given in the chunk header + includes the size of the header. The default value is false. + +A :class:`Chunk` object supports the following methods: + + +.. method:: Chunk.getname() + + Returns the name (ID) of the chunk. This is the first 4 bytes of the chunk. + + +.. method:: Chunk.getsize() + + Returns the size of the chunk. + + +.. method:: Chunk.close() + + Close and skip to the end of the chunk. This does not close the underlying + file. + +The remaining methods will raise :exc:`IOError` if called after the +:meth:`close` method has been called. + + +.. method:: Chunk.isatty() + + Returns ``False``. + + +.. method:: Chunk.seek(pos[, whence]) + + Set the chunk's current position. The *whence* argument is optional and + defaults to ``0`` (absolute file positioning); other values are ``1`` (seek + relative to the current position) and ``2`` (seek relative to the file's end). + There is no return value. If the underlying file does not allow seek, only + forward seeks are allowed. + + +.. method:: Chunk.tell() + + Return the current position into the chunk. + + +.. method:: Chunk.read([size]) + + Read at most *size* bytes from the chunk (less if the read hits the end of the + chunk before obtaining *size* bytes). If the *size* argument is negative or + omitted, read all data until the end of the chunk. The bytes are returned as a + string object. An empty string is returned when the end of the chunk is + encountered immediately. + + +.. method:: Chunk.skip() + + Skip to the end of the chunk. All further calls to :meth:`read` for the chunk + will return ``''``. If you are not interested in the contents of the chunk, + this method should be called so that the file points to the start of the next + chunk. + +.. rubric:: Footnotes + +.. [#] "EA IFF 85" Standard for Interchange Format Files, Jerry Morrison, Electronic + Arts, January 1985. + |