\section{\module{aifc} ---
         Read and write AIFF and AIFC files}

\declaremodule{standard}{aifc}
\modulesynopsis{Read and write audio files in AIFF or AIFC format.}


This module provides support for reading and writing AIFF and AIFF-C
files.  AIFF is Audio Interchange File Format, a format for storing
digital audio samples in a file.  AIFF-C is a newer version of the
format that includes the ability to compress the audio data.
\index{Audio Interchange File Format}
\index{AIFF}
\index{AIFF-C}

\strong{Caveat:}  Some operations may only work under IRIX; these will
raise \exception{ImportError} when attempting to import the
\module{cl} module, which is only available on IRIX.

Audio files have a number of parameters that describe the audio data.
The sampling rate or frame rate is the number of times per second the
sound is sampled.  The number of channels indicate if the audio is
mono, stereo, or quadro.  Each frame consists of one sample per
channel.  The sample size is the size in bytes of each sample.  Thus a
frame consists of \var{nchannels}*\var{samplesize} bytes, and a
second's worth of audio consists of
\var{nchannels}*\var{samplesize}*\var{framerate} bytes.

For example, CD quality audio has a sample size of two bytes (16
bits), uses two channels (stereo) and has a frame rate of 44,100
frames/second.  This gives a frame size of 4 bytes (2*2), and a
second's worth occupies 2*2*44100 bytes (176,400 bytes).

Module \module{aifc} defines the following function:

\begin{funcdesc}{open}{file\optional{, mode}}
Open an AIFF or AIFF-C file and return an object instance with
methods that are described below.  The argument \var{file} is either a
string naming a file or a file object.  \var{mode} must be \code{'r'}
or \code{'rb'} when the file must be opened for reading, or \code{'w'} 
or \code{'wb'} when the file must be opened for writing.  If omitted,
\code{\var{file}.mode} is used if it exists, otherwise \code{'rb'} is
used.  When used for writing, the file object should be seekable,
unless you know ahead of time how many samples you are going to write
in total and use \method{writeframesraw()} and \method{setnframes()}.
\end{funcdesc}

Objects returned by \function{open()} when a file is opened for
reading have the following methods:

\begin{methoddesc}[aifc]{getnchannels}{}
Return the number of audio channels (1 for mono, 2 for stereo).
\end{methoddesc}

\begin{methoddesc}[aifc]{getsampwidth}{}
Return the size in bytes of individual samples.
\end{methoddesc}

\begin{methoddesc}[aifc]{getframerate}{}
Return the sampling rate (number of audio frames per second).
\end{methoddesc}

\begin{methoddesc}[aifc]{getnframes}{}
Return the number of audio frames in the file.
\end{methoddesc}

\begin{methoddesc}[aifc]{getcomptype}{}
Return a four-character string describing the type of compression used
in the audio file.  For AIFF files, the returned value is
\code{'NONE'}.
\end{methoddesc}

\begin{methoddesc}[aifc]{getcompname}{}
Return a human-readable description of the type of compression used in
the audio file.  For AIFF files, the returned value is \code{'not
compressed'}.
\end{methoddesc}

\begin{methoddesc}[aifc]{getparams}{}
Return a tuple consisting of all of the above values in the above
order.
\end{methoddesc}

\begin{methoddesc}[aifc]{getmarkers}{}
Return a list of markers in the audio file.  A marker consists of a
tuple of three elements.  The first is the mark ID (an integer), the
second is the mark position in frames from the beginning of the data
(an integer), the third is the name of the mark (a string).
\end{methoddesc}

\begin{methoddesc}[aifc]{getmark}{id}
Return the tuple as described in \method{getmarkers()} for the mark
with the given \var{id}.
\end{methoddesc}

\begin{methoddesc}[aifc]{readframes}{nframes}
Read and return the next \var{nframes} frames from the audio file.  The
returned data is a string containing for each frame the uncompressed
samples of all channels.
\end{methoddesc}

\begin{methoddesc}[aifc]{rewind}{}
Rewind the read pointer.  The next \method{readframes()} will start from
the beginning.
\end{methoddesc}

\begin{methoddesc}[aifc]{setpos}{pos}
Seek to the specified frame number.
\end{methoddesc}

\begin{methoddesc}[aifc]{tell}{}
Return the current frame number.
\end{methoddesc}

\begin{methoddesc}[aifc]{close}{}
Close the AIFF file.  After calling this method, the object can no
longer be used.
\end{methoddesc}

Objects returned by \function{open()} when a file is opened for
writing have all the above methods, except for \method{readframes()} and
\method{setpos()}.  In addition the following methods exist.  The
\method{get*()} methods can only be called after the corresponding
\method{set*()} methods have been called.  Before the first
\method{writeframes()} or \method{writeframesraw()}, all parameters
except for the number of frames must be filled in.

\begin{methoddesc}[aifc]{aiff}{}
Create an AIFF file.  The default is that an AIFF-C file is created,
unless the name of the file ends in \code{'.aiff'} in which case the
default is an AIFF file.
\end{methoddesc}

\begin{methoddesc}[aifc]{aifc}{}
Create an AIFF-C file.  The default is that an AIFF-C file is created,
unless the name of the file ends in \code{'.aiff'} in which case the
default is an AIFF file.
\end{methoddesc}

\begin{methoddesc}[aifc]{setnchannels}{nchannels}
Specify the number of channels in the audio file.
\end{methoddesc}

\begin{methoddesc}[aifc]{setsampwidth}{width}
Specify the size in bytes of audio samples.
\end{methoddesc}

\begin{methoddesc}[aifc]{setframerate}{rate}
Specify the sampling frequency in frames per second.
\end{methoddesc}

\begin{methoddesc}[aifc]{setnframes}{nframes}
Specify the number of frames that are to be written to the audio file.
If this parameter is not set, or not set correctly, the file needs to
support seeking.
\end{methoddesc}

\begin{methoddesc}[aifc]{setcomptype}{type, name}
Specify the compression type.  If not specified, the audio data will
not be compressed.  In AIFF files, compression is not possible.  The
name parameter should be a human-readable description of the
compression type, the type parameter should be a four-character
string.  Currently the following compression types are supported:
NONE, ULAW, ALAW, G722.
\index{u-LAW}
\index{A-LAW}
\index{G.722}
\end{methoddesc}

\begin{methoddesc}[aifc]{setparams}{nchannels, sampwidth, framerate, comptype, compname}
Set all the above parameters at once.  The argument is a tuple
consisting of the various parameters.  This means that it is possible
to use the result of a \method{getparams()} call as argument to
\method{setparams()}.
\end{methoddesc}

\begin{methoddesc}[aifc]{setmark}{id, pos, name}
Add a mark with the given id (larger than 0), and the given name at
the given position.  This method can be called at any time before
\method{close()}.
\end{methoddesc}

\begin{methoddesc}[aifc]{tell}{}
Return the current write position in the output file.  Useful in
combination with \method{setmark()}.
\end{methoddesc}

\begin{methoddesc}[aifc]{writeframes}{data}
Write data to the output file.  This method can only be called after
the audio file parameters have been set.
\end{methoddesc}

\begin{methoddesc}[aifc]{writeframesraw}{data}
Like \method{writeframes()}, except that the header of the audio file
is not updated.
\end{methoddesc}

\begin{methoddesc}[aifc]{close}{}
Close the AIFF file.  The header of the file is updated to reflect the
actual size of the audio data. After calling this method, the object
can no longer be used.
\end{methoddesc}
