SDL Library Documentation
Prev | Chapter 4. Examples | Next

# CDROM Examples

## Listing 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 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, CD_FPS * 10);

Prev | Home | Next
Audio Examples | Up | Time Examples