[ÀÌÀü] ¸ñÂ÷ [´ÙÀ½]

Simple DirectMedia Layer API »ç¿ëÇϱâ

CD-ROM ¿Àµð¿À

  • »ç¿ëÇϱâ À§ÇØ ½Ãµð·Ò µå¶óÀ̺긦 ¿­±â

SDL_CDNumDrives() ÇÔ¼ö¸¦ ÅëÇØ ½Ã½ºÅÛ¿¡¼­ »ç¿ëÇÒ ¼ö ÀÖ´Â ½Ãµð·Ò µå¶óÀÌºê °¹¼ö¸¦ ¾Ë ¼ö ÀÖÀ¸¸ç, SDL_CDOpen() ¸¦ »ç¿ëÇؼ­ ±× Áß Çϳª¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù.

½Ã½ºÅÛ µðÆúÆ® ½Ãµð·ÒÀº Ç×»ó µå¶óÀ̺ê 0 ÀÌ´Ù. ¸¸¾à µå¶óÀ̺꿡 µð½ºÅ©°¡ ¾ø´õ¶óµµ »ç¿ëÇϱâ À§ÇØ µå¶óÀ̺긦 ¿­ ¼ö ÀÖ´Ù.

SDL_CDStatus() ÇÔ¼ö¸¦ »ç¿ëÇؼ­ µå¶óÀ̺êÀÇ »óŸ¦ È®ÀÎÇØ¾ß ÇÑ´Ù. ½Ãµð·Ò µå¶óÀ̺êÀÇ »ç¿ëÀ» ¸¶ÃÆ´Ù¸é SDL_CDClose() ÇÔ¼ö¸¦ »ç¿ëÇؼ­ ´Ý´Â´Ù.

ÆÁ:
SDL_CDName() ÇÔ¼ö¸¦ »ç¿ëÇؼ­ ½Ãµð·Ò µå¶óÀ̺êÀÇ ½Ã½ºÅÛ µ¶¸³ÀûÀÎ À̸§À» ¾òÀ» ¼ö ÀÖ´Ù.
¿¹Á¦:
{
    SDL_CD *cdrom;

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

        ...

        SDL_CDClose(cdrom);
    }
}
  • ½Ãµð·Ò Àç»ýÇϱâ

½Ãµð·Ò µå¶óÀ̺ê´Â MSF Æ÷¸Ë(ºÐ/ÃÊ/ÇÁ·¹ÀÓ, mins/secs/frames) ¶Ç´Â Á÷Á¢ÀûÀ¸·Î ÇÁ·¹ÀÓÀ» »ç¿ëÇؼ­ ½Ã°£À» ÁöÁ¤ÇÑ´Ù. ÇÑ ÇÁ·¹ÀÓÀº ½Ãµð ½Ã°£ÀÇ Ç¥ÁØ ´ÜÀ§À̸ç, 1/75 ÃÊ¿¡ ÇØ´çÇÑ´Ù. SDL Àº Æ®·¢±æÀÌ¿Í ¿ÀÇÁ¼ÂÀ» ÁöÁ¤ÇÒ ¶§ MSF Æ÷¸Ë ´ë½Å¿¡ ÇÁ·¹ÀÓÀ» »ç¿ëÇÏÁö¸¸, FRAMES_TO_MSF() °ú MSF_TO_FRAMES() ¸ÅÅ©·Î¸¦ »ç¿ëÇؼ­ º¯È¯ÇÒ ¼ö ÀÖ´Ù.

SDL Àº SDL_CDStatus() ¸¦ È£ÃâÇÒ ¶§±îÁö SDL_CD ±¸Á¶ÀÇ Æ®·¢ Á¤º¸¸¦ °»½ÅÇÏÁö ¾Ê±â ¶§¹®¿¡, Ç×»ó ½Ãµð¸¦ Àç»ýÇϱâ Àü¿¡ SDL_CDStatus() ¸¦ »ç¿ëÇؼ­ µå¶óÀ̺꿡 ½Ãµð°¡ ÀÖ´ÂÁö ¶Ç, ¾î¶² Æ®·¢ÀÌ °¡¿ëÇÑÁö¸¦ È®ÀÎÇØ¾ß ÇÑ´Ù. Æ®·¢ À妽º´Â ù¹ø° Æ®·¢ÀÌ 0 ºÎÅÍ ½ÃÀÛÇÑ´Ù´Â °ÍÀ» ÁÖÀÇÇÏÀÚ.

SDL Àº ½Ãµð·ÒÀ» Àç»ýÇϱâ À§ÇØ µÎ°¡Áö ÇÔ¼ö¸¦ Á¦°øÇÑ´Ù. SDL_CDPlayTracks() ¸¦ »ç¿ëÇؼ­ ½Ãµð»óÀÇ Æ¯Á¤ Æ®·¢À» Àç»ýÇÒ ¼öµµ ÀÖ°í SDL_CDPlay() ¸¦ »ç¿ëÇؼ­ Àý´ë ÇÁ·¹ÀÓ ¿ÀÇÁ¼ÂÀ» Àç»ýÇÒ ¼öµµ ÀÖ´Ù.

SDLÀº ½Ãµð»ðÀÔ ¶Ç´Â Àç»ý¿Ï·á¸¦ ÀÚµ¿À¸·Î °¨ÁöÇÏ´Â ±â´ÉÀ» Á¦°øÇÏÁö ¾Ê´Â´Ù. ÀÌ·¯ÇÑ »óȲÀ» °¨ÁöÇϱâ À§Çؼ­´Â, SDL_CDStatus() ¸¦ »ç¿ëÇØ ÁÖ±âÀûÀ¸·Î µå¶óÀ̺êÀÇ »óŸ¦ È®ÀÎÇØ¾ß ÇÑ´Ù. ÀÌ ÇÔ¼öµéÀÌ ½ÃµðÀÇ ¸ñÂ÷¸¦ Àб⠶§¹®¿¡ ªÀº ·çÇÁ¾È¿¡¼­ °è¼ÓÀûÀ¸·Î È£ÃâµÇÁö ¾Êµµ·Ï ÇØ¾ß ÇÑ´Ù.

ÆÁ:
¿©·¯ºÐÀº cdrom->tracks[track].type ¸¦ º¸°í SDL_AUDIO_TRACK ÀÎÁö SDL_DATA_TRACK ÀÎÁö ºñ±³ÇÏ¿© ¾î¶² Æ®·¢ÀÌ ¿Àµð¿À Æ®·¢ÀÌ¸ç ¾î¶² Æ®·¢ÀÌ µ¥ÀÌŸ Æ®·¢ÀÎÁö È®ÀÎÇØ¾ß ÇÑ´Ù.
¿¹Á¦:
void PlayTrack(SDL_CD *cdrom, int track)
{
    if ( CD_INDRIVE(SDL_CDStatus(cdrom)) ) {
        SDL_CDPlayTracks(cdrom, track, 0, track+1, 0);
    }
    while ( SDL_CDStatus(cdrom) == CD_PLAYING ) {
        SDL_Delay(1000);
    }
}

[ÀÌÀü] ¸ñÂ÷ [´ÙÀ½]