Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1427228
  • 博文数量: 430
  • 博客积分: 9995
  • 博客等级: 中将
  • 技术积分: 4388
  • 用 户 组: 普通用户
  • 注册时间: 2006-05-24 18:04
文章存档

2013年(1)

2008年(2)

2007年(14)

2006年(413)

分类: LINUX

2006-05-26 10:21:09

  • 打开CD-ROM驱动器

调用SDL_CDNumDrives()可以获得系统所有的CD-ROM驱动器,然后你可以选取一个用SDL_CDOpen()打开。

系统缺省的CD-ROM总是驱动器 0。即使驱动器里没有光盘,你也可以打开CD-ROM驱动器。

调用SDL_CDStatus() 侦测驱动器的状态。CD-ROM驱动器使用完毕后调用SDL_CDClose()关闭。

提示:
调用SDL_CDName()可以获取和系统相关的CD-ROM驱动器名字。
例程:
{
    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);
    }
}
  • CD-ROM回放

CD-ROM使用MSF(mins/secs/frames,即分钟/秒/帧)格式指定时间,或者直接使用帧(frame)。 帧是CD的一个标准时间单位,相当于1/75秒。SDL使用帧,而不是MSF格式来指定音轨的长度和偏移量,但 你可以用FRAMES_TO_MSF()和MSF_TO_FRAMES()宏在两者间转换。

SDL直到你调用SDL_CDStatus()才更新SDL_CD结构里的音轨信息。因此, 在回放CD前,你总应该调用SDL_CDStatus()来确认现在驱动器里有CD,及其音轨信息。 注意音轨的索引号是从0作为第一个开始的。

SDL有两个CD-ROM回放函数。你可以调用SDL_CDPlayTracks()回放指定的音轨,或者调用SDL_CDPlay()回放绝对的帧偏移量。

SDL不支持CD插入或者回放完成的自动通知。为了侦测这些状态,你需要定期的调用SDL_CDStatus()轮询驱动器的状态。 因为这要读取CD的内容表Since this call,所以不要在一个频繁的循环里不断调用。

提示:
检查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);
    }
}
阅读(732) | 评论(0) | 转发(0) |
0

上一篇:音频

下一篇:线程

给主人留下些什么吧!~~