Video | Events | OpenGL | Audio | CD-ROM | Threads | Time
# CD-ROM Examples
Introduction | Function List | Function Reference | Examples
Listing the available CD-ROM drives Opening the system default drive Listing the tracks on a CD Play an entire CD Play the last track on a CD Play portions of a track 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);