Video | Events | Audio | CD-ROM | Threads |
Introduction | Function List | Function Reference | Examples |
extern int SDL_CDNumDrives(void);
Returns the number of CD-ROM drives on the system
Returns a human-readable, system-dependent identifier for the CD-ROM.
Opens a CD-ROM drive for access. It returns a drive handle on success,
or
This function returns the current status of the given drive.
Play the given CD starting at '
Play the given CD starting at '
Pause play -- returns
Resume play -- returns
Stop play -- returns
Eject CD-ROM -- returns
Closes the handle for the CD-ROM drive
extern const char *SDL_CDName(int drive);
Examples:
extern SDL_CD *SDL_CDOpen(int drive);
NULL
if the drive was invalid or busy. This newly opened
CD-ROM becomes the default CD used when other CD functions are passed a
NULL
CD-ROM handle.
Drives are numbered starting with 0. Drive 0 is the system default CD-ROM.
extern CDstatus SDL_CDStatus(SDL_CD *cdrom);
If the drive has a CD in it, the table of contents of the CD and current
play position of the CD will be stored in the SDL_CD structure.
extern int SDL_CDPlayTracks(SDL_CD *cdrom,
int start_track, int start_frame, int ntracks, int nframes);
start_track
' and
'start_frame
' for 'ntracks
'
tracks and 'nframes
' frames. If both
'ntrack
' and 'nframe
' are
0
, play until the end of the CD. This function will skip
data tracks.
This function should only be called after calling
SDL_CDStatus()
to get track
information about the CD.
For example:
// Play entire CD:
if ( CD_INDRIVE(SDL_CDStatus(cdrom)) )
SDL_CDPlayTracks(cdrom, 0, 0, 0, 0);
// Play last track:
if ( CD_INDRIVE(SDL_CDStatus(cdrom)) ) {
SDL_CDPlayTracks(cdrom, cdrom->numtracks-1, 0, 0, 0);
}
// Play first and second track and 10 seconds of third track:
if ( CD_INDRIVE(SDL_CDStatus(cdrom)) )
SDL_CDPlayTracks(cdrom, 0, 0, 2, 10);
This function returns 0
, or -1
if there was an error.
extern int SDL_CDPlay(SDL_CD *cdrom, int start, int length);
start
' frame for
'length
' frames.
It returns 0
, or -1
if there was an error.
int SDL_CDPause(SDL_CD *cdrom);
0
, or -1
on error
int SDL_CDResume(SDL_CD *cdrom);
0
, or -1
on error
int SDL_CDStop(SDL_CD *cdrom);
0
, or -1
on error
int SDL_CDEject(SDL_CD *cdrom);
0
, or -1
on error
void SDL_CDClose(SDL_CD *cdrom);
Structure definitions:
/* The possible states which a CD-ROM drive can be in. */
typedef enum {
CD_TRAYEMPTY,
CD_STOPPED,
CD_PLAYING,
CD_PAUSED,
CD_ERROR = -1
} CDstatus;
/* The structure identifying a track on the CD */
typedef struct {
Uint8 id; /* Track number */
Uint8 type; /* Data or audio track */
Uint16 length; /* Length, in frames, of this track */
Uint32 offset; /* Offset, in frames, from start of disk */
} SDL_CDtrack;
/* This structure is only current as of the last call to SDL_CDStatus() */
typedef struct SDL_CD {
int id; /* Private drive identifier */
CDstatus status; /* Current drive status */
/* The rest of this structure is only valid if there's a CD in drive */
int numtracks; /* Number of tracks on disk */
int cur_track; /* Current track position */
int cur_frame; /* Current frame offset within current track */
SDL_CDtrack track[SDL_MAX_TRACKS+1];
} SDL_CD;
Useful Macros
/* Given a status, returns true if there's a disk in the drive */
#define CD_INDRIVE(status) ((int)status > 0)
/* Conversion functions from frames to Minute/Second/Frames and vice versa */
#define CD_FPS 75
#define FRAMES_TO_MSF(f, M,S,F) { \
int value = f; \
*(F) = value%CD_FPS; \
value /= CD_FPS; \
*(S) = value%60; \
value /= 60; \
*(M) = value; \
}
#define MSF_TO_FRAMES(M, S, F) ((M)*60*CD_FPS+(S)*CD_FPS+(F))