The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Каталог документации / Раздел "Программирование, языки" / Оглавление документа

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

Использование Simple DirectMedia Layer API

Использование 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);
    }
}

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




Спонсоры:
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2020 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру