blob: 0e7f90c2ac9cf42b2bda140c0fdb7ac5354a9ab8 [file] [log] [blame]
Fred Drake295da241998-08-10 19:42:37 +00001\section{\module{cd} ---
Fred Drake67d229e1999-02-20 04:51:16 +00002 CD-ROM access on SGI systems}
Fred Drakeb91e9341998-07-23 17:59:49 +00003
Fred Drake67d229e1999-02-20 04:51:16 +00004\declaremodule{builtin}{cd}
Fred Drakef6863c11999-03-02 16:37:17 +00005 \platform{IRIX}
Fred Drakeb91e9341998-07-23 17:59:49 +00006\modulesynopsis{Interface to the CD-ROM on Silicon Graphics systems.}
7
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +00008
9This module provides an interface to the Silicon Graphics CD library.
10It is available only on Silicon Graphics systems.
11
12The way the library works is as follows. A program opens the CD-ROM
Fred Draked98329c1998-03-16 06:38:42 +000013device with \function{open()} and creates a parser to parse the data
14from the CD with \function{createparser()}. The object returned by
15\function{open()} can be used to read data from the CD, but also to get
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +000016status information for the CD-ROM device, and to get information about
17the CD, such as the table of contents. Data from the CD is passed to
18the parser, which parses the frames, and calls any callback
19functions that have previously been added.
20
21An audio CD is divided into \dfn{tracks} or \dfn{programs} (the terms
22are used interchangeably). Tracks can be subdivided into
23\dfn{indices}. An audio CD contains a \dfn{table of contents} which
24gives the starts of the tracks on the CD. Index 0 is usually the
25pause before the start of a track. The start of the track as given by
26the table of contents is normally the start of index 1.
27
28Positions on a CD can be represented in two ways. Either a frame
29number or a tuple of three values, minutes, seconds and frames. Most
30functions use the latter representation. Positions can be both
31relative to the beginning of the CD, and to the beginning of the
32track.
33
Fred Draked98329c1998-03-16 06:38:42 +000034Module \module{cd} defines the following functions and constants:
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +000035
Guido van Rossumd45c1561995-03-30 11:47:50 +000036
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +000037\begin{funcdesc}{createparser}{}
38Create and return an opaque parser object. The methods of the parser
39object are described below.
40\end{funcdesc}
41
Fred Draked98329c1998-03-16 06:38:42 +000042\begin{funcdesc}{msftoframe}{minutes, seconds, frames}
43Converts a \code{(\var{minutes}, \var{seconds}, \var{frames})} triple
44representing time in absolute time code into the corresponding CD
45frame number.
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +000046\end{funcdesc}
47
Fred Draked98329c1998-03-16 06:38:42 +000048\begin{funcdesc}{open}{\optional{device\optional{, mode}}}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +000049Open the CD-ROM device. The return value is an opaque player object;
50methods of the player object are described below. The device is the
Fred Draked98329c1998-03-16 06:38:42 +000051name of the SCSI device file, e.g. \code{'/dev/scsi/sc0d4l0'}, or
52\code{None}. If omitted or \code{None}, the hardware inventory is
53consulted to locate a CD-ROM drive. The \var{mode}, if not omited,
54should be the string \code{'r'}.
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +000055\end{funcdesc}
56
57The module defines the following variables:
58
Fred Draked98329c1998-03-16 06:38:42 +000059\begin{excdesc}{error}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +000060Exception raised on various errors.
Fred Draked98329c1998-03-16 06:38:42 +000061\end{excdesc}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +000062
63\begin{datadesc}{DATASIZE}
64The size of one frame's worth of audio data. This is the size of the
65audio data as passed to the callback of type \code{audio}.
66\end{datadesc}
67
68\begin{datadesc}{BLOCKSIZE}
69The size of one uninterpreted frame of audio data.
70\end{datadesc}
71
Fred Draked98329c1998-03-16 06:38:42 +000072The following variables are states as returned by
73\function{getstatus()}:
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +000074
75\begin{datadesc}{READY}
76The drive is ready for operation loaded with an audio CD.
77\end{datadesc}
78
79\begin{datadesc}{NODISC}
80The drive does not have a CD loaded.
81\end{datadesc}
82
83\begin{datadesc}{CDROM}
84The drive is loaded with a CD-ROM. Subsequent play or read operations
85will return I/O errors.
86\end{datadesc}
87
88\begin{datadesc}{ERROR}
Thomas Woutersf8316632000-07-16 19:01:10 +000089An error occurred while trying to read the disc or its table of
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +000090contents.
91\end{datadesc}
92
93\begin{datadesc}{PLAYING}
94The drive is in CD player mode playing an audio CD through its audio
95jacks.
96\end{datadesc}
97
98\begin{datadesc}{PAUSED}
99The drive is in CD layer mode with play paused.
100\end{datadesc}
101
102\begin{datadesc}{STILL}
Fred Draked98329c1998-03-16 06:38:42 +0000103The equivalent of \constant{PAUSED} on older (non 3301) model Toshiba
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000104CD-ROM drives. Such drives have never been shipped by SGI.
105\end{datadesc}
106
Guido van Rossumd45c1561995-03-30 11:47:50 +0000107\begin{datadesc}{audio}
108\dataline{pnum}
109\dataline{index}
110\dataline{ptime}
111\dataline{atime}
112\dataline{catalog}
113\dataline{ident}
114\dataline{control}
115Integer constants describing the various types of parser callbacks
Fred Draked98329c1998-03-16 06:38:42 +0000116that can be set by the \method{addcallback()} method of CD parser
Guido van Rossumd45c1561995-03-30 11:47:50 +0000117objects (see below).
118\end{datadesc}
119
Fred Drakefc576191998-04-04 07:15:02 +0000120
121\subsection{Player Objects}
122\label{player-objects}
123
Fred Draked98329c1998-03-16 06:38:42 +0000124Player objects (returned by \function{open()}) have the following
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000125methods:
126
Fred Drakefc576191998-04-04 07:15:02 +0000127\begin{methoddesc}[CD player]{allowremoval}{}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000128Unlocks the eject button on the CD-ROM drive permitting the user to
129eject the caddy if desired.
Fred Drakefc576191998-04-04 07:15:02 +0000130\end{methoddesc}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000131
Fred Drakefc576191998-04-04 07:15:02 +0000132\begin{methoddesc}[CD player]{bestreadsize}{}
Fred Draked98329c1998-03-16 06:38:42 +0000133Returns the best value to use for the \var{num_frames} parameter of
134the \method{readda()} method. Best is defined as the value that
135permits a continuous flow of data from the CD-ROM drive.
Fred Drakefc576191998-04-04 07:15:02 +0000136\end{methoddesc}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000137
Fred Drakefc576191998-04-04 07:15:02 +0000138\begin{methoddesc}[CD player]{close}{}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000139Frees the resources associated with the player object. After calling
Fred Draked98329c1998-03-16 06:38:42 +0000140\method{close()}, the methods of the object should no longer be used.
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]{eject}{}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000144Ejects the caddy from the CD-ROM drive.
Fred Drakefc576191998-04-04 07:15:02 +0000145\end{methoddesc}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000146
Fred Drakefc576191998-04-04 07:15:02 +0000147\begin{methoddesc}[CD player]{getstatus}{}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000148Returns information pertaining to the current state of the CD-ROM
149drive. The returned information is a tuple with the following values:
Fred Draked98329c1998-03-16 06:38:42 +0000150\var{state}, \var{track}, \var{rtime}, \var{atime}, \var{ttime},
151\var{first}, \var{last}, \var{scsi_audio}, \var{cur_block}.
152\var{rtime} is the time relative to the start of the current track;
153\var{atime} is the time relative to the beginning of the disc;
154\var{ttime} is the total time on the disc. For more information on
155the meaning of the values, see the man page \manpage{CDgetstatus}{3dm}.
156The value of \var{state} is one of the following: \constant{ERROR},
157\constant{NODISC}, \constant{READY}, \constant{PLAYING},
158\constant{PAUSED}, \constant{STILL}, or \constant{CDROM}.
Fred Drakefc576191998-04-04 07:15:02 +0000159\end{methoddesc}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000160
Fred Drakefc576191998-04-04 07:15:02 +0000161\begin{methoddesc}[CD player]{gettrackinfo}{track}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000162Returns information about the specified track. The returned
163information is a tuple consisting of two elements, the start time of
164the track and the duration of the track.
Fred Drakefc576191998-04-04 07:15:02 +0000165\end{methoddesc}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000166
Fred Drakefc576191998-04-04 07:15:02 +0000167\begin{methoddesc}[CD player]{msftoblock}{min, sec, frame}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000168Converts a minutes, seconds, frames triple representing a time in
169absolute time code into the corresponding logical block number for the
Fred Draked98329c1998-03-16 06:38:42 +0000170given CD-ROM drive. You should use \function{msftoframe()} rather than
171\method{msftoblock()} for comparing times. The logical block number
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000172differs from the frame number by an offset required by certain CD-ROM
173drives.
Fred Drakefc576191998-04-04 07:15:02 +0000174\end{methoddesc}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000175
Fred Drakefc576191998-04-04 07:15:02 +0000176\begin{methoddesc}[CD player]{play}{start, play}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000177Starts playback of an audio CD in the CD-ROM drive at the specified
178track. The audio output appears on the CD-ROM drive's headphone and
179audio jacks (if fitted). Play stops at the end of the disc.
Fred Draked98329c1998-03-16 06:38:42 +0000180\var{start} is the number of the track at which to start playing the
181CD; if \var{play} is 0, the CD will be set to an initial paused
182state. The method \method{togglepause()} can then be used to commence
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000183play.
Fred Drakefc576191998-04-04 07:15:02 +0000184\end{methoddesc}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000185
Fred Drakefc576191998-04-04 07:15:02 +0000186\begin{methoddesc}[CD player]{playabs}{minutes, seconds, frames, play}
Fred Draked98329c1998-03-16 06:38:42 +0000187Like \method{play()}, except that the start is given in minutes,
188seconds, and frames instead of a track number.
Fred Drakefc576191998-04-04 07:15:02 +0000189\end{methoddesc}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000190
Fred Drakefc576191998-04-04 07:15:02 +0000191\begin{methoddesc}[CD player]{playtrack}{start, play}
Fred Draked98329c1998-03-16 06:38:42 +0000192Like \method{play()}, except that playing stops at the end of the
193track.
Fred Drakefc576191998-04-04 07:15:02 +0000194\end{methoddesc}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000195
Fred Drakefc576191998-04-04 07:15:02 +0000196\begin{methoddesc}[CD player]{playtrackabs}{track, minutes, seconds, frames, play}
Thomas Woutersf8316632000-07-16 19:01:10 +0000197Like \method{play()}, except that playing begins at the specified
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000198absolute time and ends at the end of the specified track.
Fred Drakefc576191998-04-04 07:15:02 +0000199\end{methoddesc}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000200
Fred Drakefc576191998-04-04 07:15:02 +0000201\begin{methoddesc}[CD player]{preventremoval}{}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000202Locks the eject button on the CD-ROM drive thus preventing the user
203from arbitrarily ejecting the caddy.
Fred Drakefc576191998-04-04 07:15:02 +0000204\end{methoddesc}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000205
Fred Drakefc576191998-04-04 07:15:02 +0000206\begin{methoddesc}[CD player]{readda}{num_frames}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000207Reads the specified number of frames from an audio CD mounted in the
208CD-ROM drive. The return value is a string representing the audio
Fred Draked98329c1998-03-16 06:38:42 +0000209frames. This string can be passed unaltered to the
210\method{parseframe()} method of the parser object.
Fred Drakefc576191998-04-04 07:15:02 +0000211\end{methoddesc}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000212
Fred Drakefc576191998-04-04 07:15:02 +0000213\begin{methoddesc}[CD player]{seek}{minutes, seconds, frames}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000214Sets the pointer that indicates the starting point of the next read of
215digital audio data from a CD-ROM. The pointer is set to an absolute
Fred Draked98329c1998-03-16 06:38:42 +0000216time code location specified in \var{minutes}, \var{seconds}, and
217\var{frames}. The return value is the logical block number to which
218the pointer has been set.
Fred Drakefc576191998-04-04 07:15:02 +0000219\end{methoddesc}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000220
Fred Drakefc576191998-04-04 07:15:02 +0000221\begin{methoddesc}[CD player]{seekblock}{block}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000222Sets the pointer that indicates the starting point of the next read of
223digital audio data from a CD-ROM. The pointer is set to the specified
224logical block number. The return value is the logical block number to
225which the pointer has been set.
Fred Drakefc576191998-04-04 07:15:02 +0000226\end{methoddesc}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000227
Fred Drakefc576191998-04-04 07:15:02 +0000228\begin{methoddesc}[CD player]{seektrack}{track}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000229Sets the pointer that indicates the starting point of the next read of
230digital audio data from a CD-ROM. The pointer is set to the specified
231track. The return value is the logical block number to which the
232pointer has been set.
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]{stop}{}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000236Stops the current playing operation.
Fred Drakefc576191998-04-04 07:15:02 +0000237\end{methoddesc}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000238
Fred Drakefc576191998-04-04 07:15:02 +0000239\begin{methoddesc}[CD player]{togglepause}{}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000240Pauses the CD if it is playing, and makes it play if it is paused.
Fred Drakefc576191998-04-04 07:15:02 +0000241\end{methoddesc}
242
243
244\subsection{Parser Objects}
245\label{cd-parser-objects}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000246
Fred Draked98329c1998-03-16 06:38:42 +0000247Parser objects (returned by \function{createparser()}) have the
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000248following methods:
249
Fred Drakefc576191998-04-04 07:15:02 +0000250\begin{methoddesc}[CD parser]{addcallback}{type, func, arg}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000251Adds a callback for the parser. The parser has callbacks for eight
Guido van Rossumd45c1561995-03-30 11:47:50 +0000252different types of data in the digital audio data stream. Constants
Fred Draked98329c1998-03-16 06:38:42 +0000253for these types are defined at the \module{cd} module level (see above).
254The callback is called as follows: \code{\var{func}(\var{arg}, type,
255data)}, where \var{arg} is the user supplied argument, \var{type} is
256the particular type of callback, and \var{data} is the data returned
257for this \var{type} of callback. The type of the data depends on the
258\var{type} of callback as follows:
259
Fred Drakeee601911998-04-11 20:53:03 +0000260\begin{tableii}{l|p{4in}}{code}{Type}{Value}
Fred Draked98329c1998-03-16 06:38:42 +0000261 \lineii{audio}{String which can be passed unmodified to
262\function{al.writesamps()}.}
263 \lineii{pnum}{Integer giving the program (track) number.}
264 \lineii{index}{Integer giving the index number.}
265 \lineii{ptime}{Tuple consisting of the program time in minutes,
266seconds, and frames.}
267 \lineii{atime}{Tuple consisting of the absolute time in minutes,
268seconds, and frames.}
269 \lineii{catalog}{String of 13 characters, giving the catalog number
270of the CD.}
271 \lineii{ident}{String of 12 characters, giving the ISRC
Fred Drake0d213d31998-04-11 16:40:46 +0000272identification number of the recording. The string consists of two
273characters country code, three characters owner code, two characters
274giving the year, and five characters giving a serial number.}
Fred Draked98329c1998-03-16 06:38:42 +0000275 \lineii{control}{Integer giving the control bits from the CD
276subcode data}
277\end{tableii}
Fred Drakefc576191998-04-04 07:15:02 +0000278\end{methoddesc}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000279
Fred Drakefc576191998-04-04 07:15:02 +0000280\begin{methoddesc}[CD parser]{deleteparser}{}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000281Deletes the parser and frees the memory it was using. The object
282should not be used after this call. This call is done automatically
283when the last reference to the object is removed.
Fred Drakefc576191998-04-04 07:15:02 +0000284\end{methoddesc}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000285
Fred Drakefc576191998-04-04 07:15:02 +0000286\begin{methoddesc}[CD parser]{parseframe}{frame}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000287Parses one or more frames of digital audio data from a CD such as
Fred Draked98329c1998-03-16 06:38:42 +0000288returned by \method{readda()}. It determines which subcodes are
289present in the data. If these subcodes have changed since the last
290frame, then \method{parseframe()} executes a callback of the
291appropriate type passing to it the subcode data found in the frame.
292Unlike the \C{} function, more than one frame of digital audio data
293can be passed to this method.
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]{removecallback}{type}
Fred Draked98329c1998-03-16 06:38:42 +0000297Removes the callback for the given \var{type}.
Fred Drakefc576191998-04-04 07:15:02 +0000298\end{methoddesc}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000299
Fred Drakefc576191998-04-04 07:15:02 +0000300\begin{methoddesc}[CD parser]{resetparser}{}
Sjoerd Mullenderffd6de11995-03-28 11:56:52 +0000301Resets the fields of the parser used for tracking subcodes to an
Fred Draked98329c1998-03-16 06:38:42 +0000302initial state. \method{resetparser()} should be called after the disc
303has been changed.
Fred Drakefc576191998-04-04 07:15:02 +0000304\end{methoddesc}