CDROM Examples

CD-ROM ドライブのリスト表示


    #include "SDL.h"

    /* まず SDL を初期化 */
    if ( SDL_Init(SDL_INIT_CDROM) < 0 ) {
        fprintf(stderr, "SDL が初期化できませんでした: %s\n",SDL_GetError());
        exit(1);
    }
    atexit(SDL_Quit);

    /* システムに CD-ROM が何台接続されているかを調べる */
    printf("利用可能なドライブ数: %d\n", SDL_CDNumDrives());
    for ( i=0; i<SDL_CDNumDrives(); ++i ) {
        printf("ドライブ %d:  \"%s\"\n", i, SDL_CDName(i));
    }

デフォルトドライブのオープン


    SDL_CD *cdrom;
    CDstatus status;
    char *status_str;

    cdrom = SDL_CDOpen(0);
    if ( cdrom == NULL ) {
        fprintf(stderr, "デフォルト CD-ROM ドライブをオープンできませんでした: %s\n",
                        SDL_GetError());
        exit(2);
    }

    status = SDL_CDStatus(cdrom);
    switch (status) {
        case CD_TRAYEMPTY:
            status_str = "トレーが空";
            break;
        case CD_STOPPED:
            status_str = "停止";
            break;
        case CD_PLAYING:
            status_str = "再生";
            break;
        case CD_PAUSED:
            status_str = "一時停止中";
            break;
        case CD_ERROR:
            status_str = "エラー状態";
            break;
    }
    printf("ドライブのステータス: %s\n", status_str);
    if ( status >= CD_PLAYING ) {
        int m, s, f;
        FRAMES_TO_MSF(cdrom->cur_frame, &m, &s, &f);
        printf("現在再生中のトラック %d, %d:%2.2d\n",
        cdrom->track[cdrom->cur_track].id, m, s);
    }

CD 上のトラックのリスト表示


    SDL_CD *cdrom;          /* これはすでにセットされていると仮定 */
    int i;
    int m, s, f;

    SDL_CDStatus(cdrom);
    printf("ドライブのトラック数: %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("\tトラック (%d 番目) %d: %d:%2.2d\n", i,
        cdrom->track[i].id, m, s);
    }

CD 全体の再生


    SDL_CD *cdrom;          /* これはすでにセットされていると仮定 */

    // CD 全体を再生:
    if ( CD_INDRIVE(SDL_CDStatus(cdrom)) )
        SDL_CDPlayTracks(cdrom, 0, 0, 0, 0);

        // 最後のトラックを再生:
        if ( CD_INDRIVE(SDL_CDStatus(cdrom)) ) {
            SDL_CDPlayTracks(cdrom, cdrom->numtracks-1, 0, 0, 0);
        }

        // 最初と 2 番目のトラック、そして 3 番目のトラックを 10 秒間再生:
        if ( CD_INDRIVE(SDL_CDStatus(cdrom)) )
            SDL_CDPlayTracks(cdrom, 0, 0, 2, CD_FPS * 10);