mirror of
				https://github.com/python/cpython.git
				synced 2025-10-30 01:47:38 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			111 lines
		
	
	
	
		
			4.5 KiB
		
	
	
	
		
			TeX
		
	
	
	
	
	
			
		
		
	
	
			111 lines
		
	
	
	
		
			4.5 KiB
		
	
	
	
		
			TeX
		
	
	
	
	
	
| \section{\module{chunk} ---
 | |
| 	 Read IFF chunked data}
 | |
| 
 | |
| \declaremodule{standard}{chunk}
 | |
| \modulesynopsis{Module to read IFF chunks.}
 | |
| \moduleauthor{Sjoerd Mullender}{sjoerd@acm.org}
 | |
| \sectionauthor{Sjoerd Mullender}{sjoerd@acm.org}
 | |
| 
 | |
| 
 | |
| 
 | |
| This module provides an interface for reading files that use EA IFF 85
 | |
| chunks.\footnote{``EA IFF 85'' Standard for Interchange Format Files,
 | |
| Jerry Morrison, Electronic Arts, January 1985.}  This format is used
 | |
| in at least the Audio\index{Audio Interchange File
 | |
| Format}\index{AIFF}\index{AIFF-C} Interchange File Format
 | |
| (AIFF/AIFF-C) and the Real\index{Real Media File Format} Media File
 | |
| Format\index{RMFF} (RMFF).  The WAVE audio file format is closely
 | |
| related and can also be read using this module.
 | |
| 
 | |
| A chunk has the following structure:
 | |
| 
 | |
| \begin{tableiii}{c|c|l}{textrm}{Offset}{Length}{Contents}
 | |
|   \lineiii{0}{4}{Chunk ID}
 | |
|   \lineiii{4}{4}{Size of chunk in big-endian byte order, not including the 
 | |
|                  header}
 | |
|   \lineiii{8}{\var{n}}{Data bytes, where \var{n} is the size given in
 | |
|                        the preceding field}
 | |
|   \lineiii{8 + \var{n}}{0 or 1}{Pad byte needed if \var{n} is odd and
 | |
|                                 chunk alignment is used}
 | |
| \end{tableiii}
 | |
| 
 | |
| 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
 | |
| \exception{EOFError} exception.
 | |
| 
 | |
| \begin{classdesc}{Chunk}{file\optional{, align, bigendian, inclheader}}
 | |
| Class which represents a chunk.  The \var{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 \method{read()}.  If the
 | |
| methods \method{seek()} and \method{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 \var{align} is true, chunks are
 | |
| assumed to be aligned on 2-byte boundaries.  If \var{align} is
 | |
| false, no alignment is assumed.  The default value is true.  If the
 | |
| optional argument \var{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 \var{inclheader}
 | |
| is true, the size given in the chunk header includes the size of the
 | |
| header.  The default value is false.
 | |
| \end{classdesc}
 | |
| 
 | |
| A \class{Chunk} object supports the following methods:
 | |
| 
 | |
| \begin{methoddesc}{getname}{}
 | |
| Returns the name (ID) of the chunk.  This is the first 4 bytes of the
 | |
| chunk.
 | |
| \end{methoddesc}
 | |
| 
 | |
| \begin{methoddesc}{getsize}{}
 | |
| Returns the size of the chunk.
 | |
| \end{methoddesc}
 | |
| 
 | |
| \begin{methoddesc}{close}{}
 | |
| Close and skip to the end of the chunk.  This does not close the
 | |
| underlying file.
 | |
| \end{methoddesc}
 | |
| 
 | |
| The remaining methods will raise \exception{IOError} if called after
 | |
| the \method{close()} method has been called.
 | |
| 
 | |
| \begin{methoddesc}{isatty}{}
 | |
| Returns \code{False}.
 | |
| \end{methoddesc}
 | |
| 
 | |
| \begin{methoddesc}{seek}{pos\optional{, whence}}
 | |
| Set the chunk's current position.  The \var{whence} argument is
 | |
| optional and defaults to \code{0} (absolute file positioning); other
 | |
| values are \code{1} (seek relative to the current position) and
 | |
| \code{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.
 | |
| \end{methoddesc}
 | |
| 
 | |
| \begin{methoddesc}{tell}{}
 | |
| Return the current position into the chunk.
 | |
| \end{methoddesc}
 | |
| 
 | |
| \begin{methoddesc}{read}{\optional{size}}
 | |
| Read at most \var{size} bytes from the chunk (less if the read hits
 | |
| the end of the chunk before obtaining \var{size} bytes).  If the
 | |
| \var{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.
 | |
| \end{methoddesc}
 | |
| 
 | |
| \begin{methoddesc}{skip}{}
 | |
| Skip to the end of the chunk.  All further calls to \method{read()}
 | |
| for the chunk will return \code{''}.  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.
 | |
| \end{methoddesc}
 | 
