\section{\module{sndhdr} ---
         Determine type of sound file}

\declaremodule{standard}{sndhdr}
\modulesynopsis{Determine type of a sound file.}
\sectionauthor{Fred L. Drake, Jr.}{fdrake@acm.org}
% Based on comments in the module source file.


The \module{sndhdr} provides utility functions which attempt to
determine the type of sound data which is in a file.  When these
functions are able to determine what type of sound data is stored in a
file, they return a tuple \code{(\var{type}, \var{sampling_rate},
\var{channels}, \var{frames}, \var{bits_per_sample})}.  The value for
\var{type} indicates the data type and will be one of the strings
\code{'aifc'}, \code{'aiff'}, \code{'au'}, \code{'hcom'},
\code{'sndr'}, \code{'sndt'}, \code{'voc'}, \code{'wav'},
\code{'8svx'}, \code{'sb'}, \code{'ub'}, or \code{'ul'}.  The
\var{sampling_rate} will be either the actual value or \code{0} if
unknown or difficult to decode.  Similarly, \var{channels} will be
either the number of channels or \code{0} if it cannot be determined
or if the value is difficult to decode.  The value for \var{frames}
will be either the number of frames or \code{-1}.  The last item in
the tuple, \var{bits_per_sample}, will either be the sample size in
bits or \code{'A'} for A-LAW\index{A-LAW} or \code{'U'} for
u-LAW\index{u-LAW}.


\begin{funcdesc}{what}{filename}
  Determines the type of sound data stored in the file \var{filename}
  using \function{whathdr()}.  If it succeeds, returns a tuple as
  described above, otherwise \code{None} is returned.
\end{funcdesc}


\begin{funcdesc}{whathdr}{filename}
  Determines the type of sound data stored in a file based on the file 
  header.  The name of the file is given by \var{filename}.  This
  function returns a tuple as described above on success, or
  \code{None}.
\end{funcdesc}
