blob: e027466c22d3ec47b6ee4e188893e7a7482e8f87 [file] [log] [blame]
Fred Drakefc576191998-04-04 07:15:02 +00001\section{Built-in Module \module{cd}}
Guido van Rossume47da0a1997-07-17 16:34:52 +00002\label{module-cd}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +00003\bimodindex{cd}
4
5This module provides an interface to the Silicon Graphics CD library.
6It is available only on Silicon Graphics systems.
7
8The way the library works is as follows. A program opens the CD-ROM
Fred Draked98329c1998-03-16 06:38:42 +00009device with \function{open()} and creates a parser to parse the data
10from the CD with \function{createparser()}. The object returned by
11\function{open()} can be used to read data from the CD, but also to get
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +000012status information for the CD-ROM device, and to get information about
13the CD, such as the table of contents. Data from the CD is passed to
14the parser, which parses the frames, and calls any callback
15functions that have previously been added.
16
17An audio CD is divided into \dfn{tracks} or \dfn{programs} (the terms
18are used interchangeably). Tracks can be subdivided into
19\dfn{indices}. An audio CD contains a \dfn{table of contents} which
20gives the starts of the tracks on the CD. Index 0 is usually the
21pause before the start of a track. The start of the track as given by
22the table of contents is normally the start of index 1.
23
24Positions on a CD can be represented in two ways. Either a frame
25number or a tuple of three values, minutes, seconds and frames. Most
26functions use the latter representation. Positions can be both
27relative to the beginning of the CD, and to the beginning of the
28track.
29
Fred Draked98329c1998-03-16 06:38:42 +000030Module \module{cd} defines the following functions and constants:
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +000031
Guido van Rossumd45c1561995-03-30 11:47:50 +000032
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +000033\begin{funcdesc}{createparser}{}
34Create and return an opaque parser object. The methods of the parser
35object are described below.
36\end{funcdesc}
37
Fred Draked98329c1998-03-16 06:38:42 +000038\begin{funcdesc}{msftoframe}{minutes, seconds, frames}
39Converts a \code{(\var{minutes}, \var{seconds}, \var{frames})} triple
40representing time in absolute time code into the corresponding CD
41frame number.
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +000042\end{funcdesc}
43
Fred Draked98329c1998-03-16 06:38:42 +000044\begin{funcdesc}{open}{\optional{device\optional{, mode}}}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +000045Open the CD-ROM device. The return value is an opaque player object;
46methods of the player object are described below. The device is the
Fred Draked98329c1998-03-16 06:38:42 +000047name of the SCSI device file, e.g. \code{'/dev/scsi/sc0d4l0'}, or
48\code{None}. If omitted or \code{None}, the hardware inventory is
49consulted to locate a CD-ROM drive. The \var{mode}, if not omited,
50should be the string \code{'r'}.
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +000051\end{funcdesc}
52
53The module defines the following variables:
54
Fred Draked98329c1998-03-16 06:38:42 +000055\begin{excdesc}{error}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +000056Exception raised on various errors.
Fred Draked98329c1998-03-16 06:38:42 +000057\end{excdesc}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +000058
59\begin{datadesc}{DATASIZE}
60The size of one frame's worth of audio data. This is the size of the
61audio data as passed to the callback of type \code{audio}.
62\end{datadesc}
63
64\begin{datadesc}{BLOCKSIZE}
65The size of one uninterpreted frame of audio data.
66\end{datadesc}
67
Fred Draked98329c1998-03-16 06:38:42 +000068The following variables are states as returned by
69\function{getstatus()}:
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +000070
71\begin{datadesc}{READY}
72The drive is ready for operation loaded with an audio CD.
73\end{datadesc}
74
75\begin{datadesc}{NODISC}
76The drive does not have a CD loaded.
77\end{datadesc}
78
79\begin{datadesc}{CDROM}
80The drive is loaded with a CD-ROM. Subsequent play or read operations
81will return I/O errors.
82\end{datadesc}
83
84\begin{datadesc}{ERROR}
85An error aoocurred while trying to read the disc or its table of
86contents.
87\end{datadesc}
88
89\begin{datadesc}{PLAYING}
90The drive is in CD player mode playing an audio CD through its audio
91jacks.
92\end{datadesc}
93
94\begin{datadesc}{PAUSED}
95The drive is in CD layer mode with play paused.
96\end{datadesc}
97
98\begin{datadesc}{STILL}
Fred Draked98329c1998-03-16 06:38:42 +000099The equivalent of \constant{PAUSED} on older (non 3301) model Toshiba
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000100CD-ROM drives. Such drives have never been shipped by SGI.
101\end{datadesc}
102
Guido van Rossumd45c1561995-03-30 11:47:50 +0000103\begin{datadesc}{audio}
104\dataline{pnum}
105\dataline{index}
106\dataline{ptime}
107\dataline{atime}
108\dataline{catalog}
109\dataline{ident}
110\dataline{control}
111Integer constants describing the various types of parser callbacks
Fred Draked98329c1998-03-16 06:38:42 +0000112that can be set by the \method{addcallback()} method of CD parser
Guido van Rossumd45c1561995-03-30 11:47:50 +0000113objects (see below).
114\end{datadesc}
115
Fred Drakefc576191998-04-04 07:15:02 +0000116
117\subsection{Player Objects}
118\label{player-objects}
119
Fred Draked98329c1998-03-16 06:38:42 +0000120Player objects (returned by \function{open()}) have the following
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000121methods:
122
Fred Drakefc576191998-04-04 07:15:02 +0000123\begin{methoddesc}[CD player]{allowremoval}{}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000124Unlocks the eject button on the CD-ROM drive permitting the user to
125eject the caddy if desired.
Fred Drakefc576191998-04-04 07:15:02 +0000126\end{methoddesc}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000127
Fred Drakefc576191998-04-04 07:15:02 +0000128\begin{methoddesc}[CD player]{bestreadsize}{}
Fred Draked98329c1998-03-16 06:38:42 +0000129Returns the best value to use for the \var{num_frames} parameter of
130the \method{readda()} method. Best is defined as the value that
131permits a continuous flow of data from the CD-ROM drive.
Fred Drakefc576191998-04-04 07:15:02 +0000132\end{methoddesc}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000133
Fred Drakefc576191998-04-04 07:15:02 +0000134\begin{methoddesc}[CD player]{close}{}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000135Frees the resources associated with the player object. After calling
Fred Draked98329c1998-03-16 06:38:42 +0000136\method{close()}, the methods of the object should no longer be used.
Fred Drakefc576191998-04-04 07:15:02 +0000137\end{methoddesc}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000138
Fred Drakefc576191998-04-04 07:15:02 +0000139\begin{methoddesc}[CD player]{eject}{}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000140Ejects the caddy from the CD-ROM drive.
Fred Drakefc576191998-04-04 07:15:02 +0000141\end{methoddesc}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000142
Fred Drakefc576191998-04-04 07:15:02 +0000143\begin{methoddesc}[CD player]{getstatus}{}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000144Returns information pertaining to the current state of the CD-ROM
145drive. The returned information is a tuple with the following values:
Fred Draked98329c1998-03-16 06:38:42 +0000146\var{state}, \var{track}, \var{rtime}, \var{atime}, \var{ttime},
147\var{first}, \var{last}, \var{scsi_audio}, \var{cur_block}.
148\var{rtime} is the time relative to the start of the current track;
149\var{atime} is the time relative to the beginning of the disc;
150\var{ttime} is the total time on the disc. For more information on
151the meaning of the values, see the man page \manpage{CDgetstatus}{3dm}.
152The value of \var{state} is one of the following: \constant{ERROR},
153\constant{NODISC}, \constant{READY}, \constant{PLAYING},
154\constant{PAUSED}, \constant{STILL}, or \constant{CDROM}.
Fred Drakefc576191998-04-04 07:15:02 +0000155\end{methoddesc}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000156
Fred Drakefc576191998-04-04 07:15:02 +0000157\begin{methoddesc}[CD player]{gettrackinfo}{track}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000158Returns information about the specified track. The returned
159information is a tuple consisting of two elements, the start time of
160the track and the duration of the track.
Fred Drakefc576191998-04-04 07:15:02 +0000161\end{methoddesc}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000162
Fred Drakefc576191998-04-04 07:15:02 +0000163\begin{methoddesc}[CD player]{msftoblock}{min, sec, frame}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000164Converts a minutes, seconds, frames triple representing a time in
165absolute time code into the corresponding logical block number for the
Fred Draked98329c1998-03-16 06:38:42 +0000166given CD-ROM drive. You should use \function{msftoframe()} rather than
167\method{msftoblock()} for comparing times. The logical block number
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000168differs from the frame number by an offset required by certain CD-ROM
169drives.
Fred Drakefc576191998-04-04 07:15:02 +0000170\end{methoddesc}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000171
Fred Drakefc576191998-04-04 07:15:02 +0000172\begin{methoddesc}[CD player]{play}{start, play}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000173Starts playback of an audio CD in the CD-ROM drive at the specified
174track. The audio output appears on the CD-ROM drive's headphone and
175audio jacks (if fitted). Play stops at the end of the disc.
Fred Draked98329c1998-03-16 06:38:42 +0000176\var{start} is the number of the track at which to start playing the
177CD; if \var{play} is 0, the CD will be set to an initial paused
178state. The method \method{togglepause()} can then be used to commence
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000179play.
Fred Drakefc576191998-04-04 07:15:02 +0000180\end{methoddesc}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000181
Fred Drakefc576191998-04-04 07:15:02 +0000182\begin{methoddesc}[CD player]{playabs}{minutes, seconds, frames, play}
Fred Draked98329c1998-03-16 06:38:42 +0000183Like \method{play()}, except that the start is given in minutes,
184seconds, and frames instead of a track number.
Fred Drakefc576191998-04-04 07:15:02 +0000185\end{methoddesc}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000186
Fred Drakefc576191998-04-04 07:15:02 +0000187\begin{methoddesc}[CD player]{playtrack}{start, play}
Fred Draked98329c1998-03-16 06:38:42 +0000188Like \method{play()}, except that playing stops at the end of the
189track.
Fred Drakefc576191998-04-04 07:15:02 +0000190\end{methoddesc}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000191
Fred Drakefc576191998-04-04 07:15:02 +0000192\begin{methoddesc}[CD player]{playtrackabs}{track, minutes, seconds, frames, play}
Fred Draked98329c1998-03-16 06:38:42 +0000193Like \method{play()}, except that playing begins at the spcified
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000194absolute time and ends at the end of the specified track.
Fred Drakefc576191998-04-04 07:15:02 +0000195\end{methoddesc}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000196
Fred Drakefc576191998-04-04 07:15:02 +0000197\begin{methoddesc}[CD player]{preventremoval}{}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000198Locks the eject button on the CD-ROM drive thus preventing the user
199from arbitrarily ejecting the caddy.
Fred Drakefc576191998-04-04 07:15:02 +0000200\end{methoddesc}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000201
Fred Drakefc576191998-04-04 07:15:02 +0000202\begin{methoddesc}[CD player]{readda}{num_frames}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000203Reads the specified number of frames from an audio CD mounted in the
204CD-ROM drive. The return value is a string representing the audio
Fred Draked98329c1998-03-16 06:38:42 +0000205frames. This string can be passed unaltered to the
206\method{parseframe()} method of the parser object.
Fred Drakefc576191998-04-04 07:15:02 +0000207\end{methoddesc}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000208
Fred Drakefc576191998-04-04 07:15:02 +0000209\begin{methoddesc}[CD player]{seek}{minutes, seconds, frames}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000210Sets the pointer that indicates the starting point of the next read of
211digital audio data from a CD-ROM. The pointer is set to an absolute
Fred Draked98329c1998-03-16 06:38:42 +0000212time code location specified in \var{minutes}, \var{seconds}, and
213\var{frames}. The return value is the logical block number to which
214the pointer has been set.
Fred Drakefc576191998-04-04 07:15:02 +0000215\end{methoddesc}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000216
Fred Drakefc576191998-04-04 07:15:02 +0000217\begin{methoddesc}[CD player]{seekblock}{block}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000218Sets the pointer that indicates the starting point of the next read of
219digital audio data from a CD-ROM. The pointer is set to the specified
220logical block number. The return value is the logical block number to
221which the pointer has been set.
Fred Drakefc576191998-04-04 07:15:02 +0000222\end{methoddesc}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000223
Fred Drakefc576191998-04-04 07:15:02 +0000224\begin{methoddesc}[CD player]{seektrack}{track}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000225Sets the pointer that indicates the starting point of the next read of
226digital audio data from a CD-ROM. The pointer is set to the specified
227track. The return value is the logical block number to which the
228pointer has been set.
Fred Drakefc576191998-04-04 07:15:02 +0000229\end{methoddesc}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000230
Fred Drakefc576191998-04-04 07:15:02 +0000231\begin{methoddesc}[CD player]{stop}{}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000232Stops the current playing operation.
Fred Drakefc576191998-04-04 07:15:02 +0000233\end{methoddesc}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000234
Fred Drakefc576191998-04-04 07:15:02 +0000235\begin{methoddesc}[CD player]{togglepause}{}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000236Pauses the CD if it is playing, and makes it play if it is paused.
Fred Drakefc576191998-04-04 07:15:02 +0000237\end{methoddesc}
238
239
240\subsection{Parser Objects}
241\label{cd-parser-objects}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000242
Fred Draked98329c1998-03-16 06:38:42 +0000243Parser objects (returned by \function{createparser()}) have the
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000244following methods:
245
Fred Drakefc576191998-04-04 07:15:02 +0000246\begin{methoddesc}[CD parser]{addcallback}{type, func, arg}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000247Adds a callback for the parser. The parser has callbacks for eight
Guido van Rossumd45c1561995-03-30 11:47:50 +0000248different types of data in the digital audio data stream. Constants
Fred Draked98329c1998-03-16 06:38:42 +0000249for these types are defined at the \module{cd} module level (see above).
250The callback is called as follows: \code{\var{func}(\var{arg}, type,
251data)}, where \var{arg} is the user supplied argument, \var{type} is
252the particular type of callback, and \var{data} is the data returned
253for this \var{type} of callback. The type of the data depends on the
254\var{type} of callback as follows:
255
Fred Drake0d213d31998-04-11 16:40:46 +0000256\begin{tableii}{|l|p{4in}|}{code}{Type}{Value}
Fred Draked98329c1998-03-16 06:38:42 +0000257 \lineii{audio}{String which can be passed unmodified to
258\function{al.writesamps()}.}
259 \lineii{pnum}{Integer giving the program (track) number.}
260 \lineii{index}{Integer giving the index number.}
261 \lineii{ptime}{Tuple consisting of the program time in minutes,
262seconds, and frames.}
263 \lineii{atime}{Tuple consisting of the absolute time in minutes,
264seconds, and frames.}
265 \lineii{catalog}{String of 13 characters, giving the catalog number
266of the CD.}
267 \lineii{ident}{String of 12 characters, giving the ISRC
Fred Drake0d213d31998-04-11 16:40:46 +0000268identification number of the recording. The string consists of two
269characters country code, three characters owner code, two characters
270giving the year, and five characters giving a serial number.}
Fred Draked98329c1998-03-16 06:38:42 +0000271 \lineii{control}{Integer giving the control bits from the CD
272subcode data}
273\end{tableii}
Fred Drakefc576191998-04-04 07:15:02 +0000274\end{methoddesc}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000275
Fred Drakefc576191998-04-04 07:15:02 +0000276\begin{methoddesc}[CD parser]{deleteparser}{}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000277Deletes the parser and frees the memory it was using. The object
278should not be used after this call. This call is done automatically
279when the last reference to the object is removed.
Fred Drakefc576191998-04-04 07:15:02 +0000280\end{methoddesc}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000281
Fred Drakefc576191998-04-04 07:15:02 +0000282\begin{methoddesc}[CD parser]{parseframe}{frame}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000283Parses one or more frames of digital audio data from a CD such as
Fred Draked98329c1998-03-16 06:38:42 +0000284returned by \method{readda()}. It determines which subcodes are
285present in the data. If these subcodes have changed since the last
286frame, then \method{parseframe()} executes a callback of the
287appropriate type passing to it the subcode data found in the frame.
288Unlike the \C{} function, more than one frame of digital audio data
289can be passed to this method.
Fred Drakefc576191998-04-04 07:15:02 +0000290\end{methoddesc}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000291
Fred Drakefc576191998-04-04 07:15:02 +0000292\begin{methoddesc}[CD parser]{removecallback}{type}
Fred Draked98329c1998-03-16 06:38:42 +0000293Removes the callback for the given \var{type}.
Fred Drakefc576191998-04-04 07:15:02 +0000294\end{methoddesc}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000295
Fred Drakefc576191998-04-04 07:15:02 +0000296\begin{methoddesc}[CD parser]{resetparser}{}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000297Resets the fields of the parser used for tracking subcodes to an
Fred Draked98329c1998-03-16 06:38:42 +0000298initial state. \method{resetparser()} should be called after the disc
299has been changed.
Fred Drakefc576191998-04-04 07:15:02 +0000300\end{methoddesc}