\section{Built-in Module \sectcode{cd}}
\bimodindex{cd}

This module provides an interface to the Silicon Graphics CD library.
It is available only on Silicon Graphics systems.

The way the library works is as follows.  A program opens the CD-ROM
device with \code{cd.open()} and creates a parser to parse the data
from the CD with \code{cd.createparser()}.  The object returned by
\code{cd.open()} can be used to read data from the CD, but also to get
status information for the CD-ROM device, and to get information about
the CD, such as the table of contents.  Data from the CD is passed to
the parser, which parses the frames, and calls any callback
functions that have previously been added.

An audio CD is divided into \dfn{tracks} or \dfn{programs} (the terms
are used interchangeably).  Tracks can be subdivided into
\dfn{indices}.  An audio CD contains a \dfn{table of contents} which
gives the starts of the tracks on the CD.  Index 0 is usually the
pause before the start of a track.  The start of the track as given by
the table of contents is normally the start of index 1.

Positions on a CD can be represented in two ways.  Either a frame
number or a tuple of three values, minutes, seconds and frames.  Most
functions use the latter representation.  Positions can be both
relative to the beginning of the CD, and to the beginning of the
track.

Module \code{cd} defines the following functions and constants:

\renewcommand{\indexsubitem}{(in module cd)}

\begin{funcdesc}{createparser}{}
Create and return an opaque parser object.  The methods of the parser
object are described below.
\end{funcdesc}

\begin{funcdesc}{msftoframe}{min\, sec\, frame}
Converts a \code{(minutes, seconds, frames)} triple representing time
in absolute time code into the corresponding CD frame number.
\end{funcdesc}

\begin{funcdesc}{open}{\optional{device\optional{\, mode}}}
Open the CD-ROM device.  The return value is an opaque player object;
methods of the player object are described below.  The device is the
name of the SCSI device file, e.g. /dev/scsi/sc0d4l0, or \code{None}.
If omited or \code{None}, the hardware inventory is consulted to
locate a CD-ROM drive.  The \code{mode}, if not omited, should be the
string 'r'.
\end{funcdesc}

The module defines the following variables:

\begin{datadesc}{error}
Exception raised on various errors.
\end{datadesc}

\begin{datadesc}{DATASIZE}
The size of one frame's worth of audio data.  This is the size of the
audio data as passed to the callback of type \code{audio}.
\end{datadesc}

\begin{datadesc}{BLOCKSIZE}
The size of one uninterpreted frame of audio data.
\end{datadesc}

The following variables are states as returned by \code{getstatus}:

\begin{datadesc}{READY}
The drive is ready for operation loaded with an audio CD.
\end{datadesc}

\begin{datadesc}{NODISC}
The drive does not have a CD loaded.
\end{datadesc}

\begin{datadesc}{CDROM}
The drive is loaded with a CD-ROM.  Subsequent play or read operations
will return I/O errors.
\end{datadesc}

\begin{datadesc}{ERROR}
An error aoocurred while trying to read the disc or its table of
contents.
\end{datadesc}

\begin{datadesc}{PLAYING}
The drive is in CD player mode playing an audio CD through its audio
jacks.
\end{datadesc}

\begin{datadesc}{PAUSED}
The drive is in CD layer mode with play paused.
\end{datadesc}

\begin{datadesc}{STILL}
The equivalent of \code{PAUSED} on older (non 3301) model Toshiba
CD-ROM drives.  Such drives have never been shipped by SGI.
\end{datadesc}

\begin{datadesc}{audio}
\dataline{pnum}
\dataline{index}
\dataline{ptime}
\dataline{atime}
\dataline{catalog}
\dataline{ident}
\dataline{control}
Integer constants describing the various types of parser callbacks
that can be set by the \code{addcallback()} method of CD parser
objects (see below).
\end{datadesc}

Player objects (returned by \code{cd.open()}) have the following
methods:

\renewcommand{\indexsubitem}{(CD player object method)}

\begin{funcdesc}{allowremoval}{}
Unlocks the eject button on the CD-ROM drive permitting the user to
eject the caddy if desired.
\end{funcdesc}

\begin{funcdesc}{bestreadsize}{}
Returns the best value to use for the \code{num_frames} parameter of
the \code{readda} method.  Best is defined as the value that permits a
continuous flow of data from the CD-ROM drive.
\end{funcdesc}

\begin{funcdesc}{close}{}
Frees the resources associated with the player object.  After calling
\code{close}, the methods of the object should no longer be used.
\end{funcdesc}

\begin{funcdesc}{eject}{}
Ejects the caddy from the CD-ROM drive.
\end{funcdesc}

\begin{funcdesc}{getstatus}{}
Returns information pertaining to the current state of the CD-ROM
drive.  The returned information is a tuple with the following values:
\code{state}, \code{track}, \code{rtime}, \code{atime}, \code{ttime},
\code{first}, \code{last}, \code{scsi_audio}, \code{cur_block}.
\code{rtime} is the time relative to the start of the current track;
\code{atime} is the time relative to the beginning of the disc;
\code{ttime} is the total time on the disc.  For more information on
the meaning of the values, see the manual for CDgetstatus.
The value of \code{state} is one of the following: \code{cd.ERROR},
\code{cd.NODISC}, \code{cd.READY}, \code{cd.PLAYING},
\code{cd.PAUSED}, \code{cd.STILL}, or \code{cd.CDROM}.
\end{funcdesc}

\begin{funcdesc}{gettrackinfo}{track}
Returns information about the specified track.  The returned
information is a tuple consisting of two elements, the start time of
the track and the duration of the track.
\end{funcdesc}

\begin{funcdesc}{msftoblock}{min\, sec\, frame}
Converts a minutes, seconds, frames triple representing a time in
absolute time code into the corresponding logical block number for the
given CD-ROM drive.  You should use \code{cd.msftoframe()} rather than
\code{msftoblock()} for comparing times.  The logical block number
differs from the frame number by an offset required by certain CD-ROM
drives.
\end{funcdesc}

\begin{funcdesc}{play}{start\, play}
Starts playback of an audio CD in the CD-ROM drive at the specified
track.  The audio output appears on the CD-ROM drive's headphone and
audio jacks (if fitted).  Play stops at the end of the disc.
\code{start} is the number of the track at which to start playing the
CD; if \code{play} is 0, the CD will be set to an initial paused
state.  The method \code{togglepause()} can then be used to commence
play.
\end{funcdesc}

\begin{funcdesc}{playabs}{min\, sec\, frame\, play}
Like \code{play()}, except that the start is given in minutes,
seconds, frames instead of a track number.
\end{funcdesc}

\begin{funcdesc}{playtrack}{start\, play}
Like \code{play()}, except that playing stops at the end of the track.
\end{funcdesc}

\begin{funcdesc}{playtrackabs}{track\, min\, sec\, frame\, play}
Like \code{play()}, except that playing begins at the spcified
absolute time and ends at the end of the specified track.
\end{funcdesc}

\begin{funcdesc}{preventremoval}{}
Locks the eject button on the CD-ROM drive thus preventing the user
from arbitrarily ejecting the caddy.
\end{funcdesc}

\begin{funcdesc}{readda}{num_frames}
Reads the specified number of frames from an audio CD mounted in the
CD-ROM drive.  The return value is a string representing the audio
frames.  This string can be passed unaltered to the \code{parseframe}
method of the parser object.
\end{funcdesc}

\begin{funcdesc}{seek}{min\, sec\, frame}
Sets the pointer that indicates the starting point of the next read of
digital audio data from a CD-ROM.  The pointer is set to an absolute
time code location specified in minutes, seconds, and frames.  The
return value is the logical block number to which the pointer has been
set.
\end{funcdesc}

\begin{funcdesc}{seekblock}{block}
Sets the pointer that indicates the starting point of the next read of
digital audio data from a CD-ROM.  The pointer is set to the specified
logical block number.  The return value is the logical block number to
which the pointer has been set.
\end{funcdesc}

\begin{funcdesc}{seektrack}{track}
Sets the pointer that indicates the starting point of the next read of
digital audio data from a CD-ROM.  The pointer is set to the specified
track.  The return value is the logical block number to which the
pointer has been set.
\end{funcdesc}

\begin{funcdesc}{stop}{}
Stops the current playing operation.
\end{funcdesc}

\begin{funcdesc}{togglepause}{}
Pauses the CD if it is playing, and makes it play if it is paused.
\end{funcdesc}

Parser objects (returned by \code{cd.createparser()}) have the
following methods:

\renewcommand{\indexsubitem}{(CD parser object method)}

\begin{funcdesc}{addcallback}{type\, func\, arg}
Adds a callback for the parser.  The parser has callbacks for eight
different types of data in the digital audio data stream.  Constants
for these types are defined at the \code{cd} module level (see above).
The callback is called as follows: \code{func(arg, type, data)}, where
\code{arg} is the user supplied argument, \code{type} is the
particular type of callback, and \code{data} is the data returned for
this \code{type} of callback.  The type of the data depends on the
\code{type} of callback as follows:
\begin{description}
\item[\code{cd.audio}: ]
The argument is a string which can be passed unmodified to
\code{al.writesamps()}.
\item[\code{cd.pnum}: ]
The argument is an integer giving the program (track) number.
\item[\code{cd.index}: ]
The argument is an integer giving the index number.
\item[\code{cd.ptime}: ]
The argument is a tuple consisting of the program time in minutes,
seconds, and frames.
\item[\code{cd.atime}: ]
The argument is a tuple consisting of the absolute time in minutes,
seconds, and frames.
\item[\code{cd.catalog}: ]
The argument is a string of 13 characters, giving the catalog number
of the CD.
\item[\code{cd.ident}: ]
The argument is a string of 12 characters, giving the ISRC
identification number of the recording.  The string consists of two
characters country code, three characters owner code, two characters
giving the year, and five characters giving a serial number.
\item[\code{cd.control}: ]
The argument is an integer giving the control bits from the CD subcode
data.
\end{description}
\end{funcdesc}

\begin{funcdesc}{deleteparser}{}
Deletes the parser and frees the memory it was using.  The object
should not be used after this call.  This call is done automatically
when the last reference to the object is removed.
\end{funcdesc}

\begin{funcdesc}{parseframe}{frame}
Parses one or more frames of digital audio data from a CD such as
returned by \code{readda}.  It determines which subcodes are present
in the data.  If these subcodes have changed since the last frame,
then \code{parseframe} executes a callback of the appropriate type
passing to it the subcode data found in the frame.
Unlike the C function, more than one frame of digital audio data can
be passed to this method.
\end{funcdesc}

\begin{funcdesc}{removecallback}{type}
Removes the callback for the given \code{type}.
\end{funcdesc}

\begin{funcdesc}{resetparser}{}
Resets the fields of the parser used for tracking subcodes to an
initial state.  \code{resetparser} should be called after the disc has
been changed.
\end{funcdesc}
