Video Events Audio CD-ROM Threads

CD-ROM Examples


Introduction Function List Function Reference Examples


Listing the available CD-ROM drives

	#include "SDL.h"

	/* Initialize SDL first */
	if ( SDL_Init(SDL_INIT_CDROM) < 0 ) {
		fprintf(stderr, "Couldn't initialize SDL: %s\n",SDL_GetError());
		exit(1);
	}
	atexit(SDL_Quit);

	/* Find out how many CD-ROM drives are connected to the system */
	printf("Drives available: %d\n", SDL_CDNumDrives());
	for ( i=0; i<SDL_CDNumDrives(); ++i ) {
		printf("Drive %d:  \"%s\"\n", i, SDL_CDName(i));
	}

Opening the system default drive

	SDL_CD *cdrom;
	CDstatus status;
	char *status_str;

	cdrom = SDL_CDOpen(0);
	if ( cdrom == NULL ) {
		fprintf(stderr, "Couldn't open default CD-ROM drive: %s\n",
							SDL_GetError());
		exit(2);
	}

	status = SDL_CDStatus(cdrom);
	switch (status) {
		case CD_TRAYEMPTY:
			status_str = "tray empty";
			break;
		case CD_STOPPED:
			status_str = "stopped";
			break;
		case CD_PLAYING:
			status_str = "playing";
			break;
		case CD_PAUSED:
			status_str = "paused";
			break;
		case CD_ERROR:
			status_str = "error state";
			break;
	}
	printf("Drive status: %s\n", status_str);
	if ( status >= CD_PLAYING ) {
		int m, s, f;
		FRAMES_TO_MSF(cdrom->cur_frame, &m, &s, &f);
		printf("Currently playing track %d, %d:%2.2d\n",
			cdrom->track[cdrom->cur_track].id, m, s);
	}

Listing the tracks on a CD

	SDL_CD *cdrom;		/* Assuming this has already been set.. */
	int i;
	int m, s, f;

	SDL_CDStatus(cdrom);
	printf("Drive tracks: %d\n", cdrom->numtracks);
	for ( i=0; i<cdrom->numtracks; ++i ) {
		FRAMES_TO_MSF(cdrom->track[i].length, &m, &s, &f);
		if ( f > 0 )
			++s;
		printf("\tTrack (index %d) %d: %d:%2.2d\n", i,
					cdrom->track[i].id, m, s);
	}

Play an entire CD

	SDL_CD *cdrom;		/* Assuming this has already been set.. */

	// 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);