Using SDL: 시디롬

[이전] 목차 [다음] # 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);
        }
    }
[이전] 목차 [다음]