Введение в Simple DirectMedia Layer

       

Использование CD-ROM audio


  • Открытие CD-ROM устройства для последующего использования 
  • Во можете узнать количество CD-Rom устройств в системе вызвав функцию SDL_CDNumDrives() и затем открыть один из них, вызвав SDL_CDOpen(). 

    Основной (по умолчанию) CD-ROM всегда 0. Заметьте, что CD-ROM устройство может быть открыто, даже если в дисковод не вставлен диск. 

    Для определения текущего состояния устройства вы можете воспользоваться функцией SDL_CDStatus(). По завершении использования CD-ROM устройства, закройте его функцией SDL_CDClose(). 

    Совет:

    Вы можете определить системное имя CD-ROM дисковода используя SDL_CDName() функцию. 



    Пример: 

    {    SDL_CD *cdrom;     if ( SDL_CDNumDrives() > 0 ) {        cdrom = SDL_CDOpen(0);        if ( cdrom == NULL ) {            fprintf(stderr, "Не могу открыть CD-ROM по умолчанию: %s\n" SDL_GetError());            return;        }         ...         SDL_CDClose(cdrom);    }}

  • Воспроизведение CD-ROM дисков 
  • CD-ROM диски используют время в MSF формате (mins/secs/frames = минуты/секунды/кадры) или непосредственно в кадрах. Кард - это стандартная единица времени для CD, равная 1/75 секунды. SDL использует кадры вместо MFS формата когда определяет длину трека и текущее положение, но вы всегда можете конвертировать один формат в другой с помощью макросов FRAMES_TO_MSF() и MSF_TO_FRAMES(). 

    SDL не обновляет автоматически информацию с структуре SDL_CD пока вы не вызовете SDL_CDStatus(), таким образом вы должны вызывать SDL_CDStatus каждый раз, когда вам надо узнать, что за диск вставлен в дисковод и какие треки на нем доступны. Заметьте, что первый трек имеет индекс 0. 

    SDL имеет две функции для воспроизведения CD-ROM. Вы можете как играть определенный трек, используя функцию SDL_CDPlayTracks(), так и устанавливать смещение от начала всего диска, используя SDL_CDPlay(). 

    SDL не предусматривает автоматическое оповещение при вставке CD или при завершении воспроизведения. Для отслеживания этих ситуаций вы должны периодически производить опрос состояния устройства с помощью 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);    }}

    [Назад] Содержание[Дальше]



    Содержание раздела