39.3. cd — SGI 系统上的 CD-ROM 访问 — Python 文档
39.3. 光盘 — SGI 系统上的 CD-ROM 访问
自 2.6 版起已弃用:cd 模块已在 Python 3 中删除。
该模块提供了 Silicon Graphics CD 库的接口。 它仅在 Silicon Graphics 系统上可用。
库的工作方式如下。 程序使用 open() 打开 CD-ROM 设备,并创建解析器以使用 createparser() 解析 CD 中的数据。 open() 返回的对象可用于从 CD 读取数据,也可用于获取 CD-ROM 设备的状态信息,以及获取有关 CD 的信息,例如目录. 来自 CD 的数据被传递到解析器,解析器解析帧,并调用之前添加的任何回调函数。
音频 CD 分为 tracks 或 programs(这两个术语可以互换使用)。 轨道可以细分为索引。 音频 CD 包含一个 目录 ,它给出了 CD 上曲目的开头。 索引 0 通常是曲目开始前的暂停。 由目录给出的轨道的开始通常是索引 1 的开始。
CD 上的位置可以用两种方式表示。 帧编号或三个值(分钟、秒和帧)的元组。 大多数函数使用后一种表示。 位置既可以相对于 CD 的开头,也可以相对于曲目的开头。
模块 cd 定义了以下函数和常量:
- cd.createparser()
- 创建并返回一个不透明的解析器对象。 解析器对象的方法描述如下。
- cd.msftoframe(minutes, seconds, frames)
- 将表示绝对时间码中时间的
(minutes, seconds, frames)
三元组转换为相应的 CD 帧编号。
- cd.open([device[, mode]])
- 打开 CD-ROM 设备。 返回值是一个不透明的播放器对象; 下面描述了播放器对象的方法。 设备是 SCSI 设备文件的名称,例如
'/dev/scsi/sc0d4l0'
或None
。 如果省略或None
,则查阅硬件清单以找到 CD-ROM 驱动器。 mode,如果没有省略,应该是字符串'r'
。
该模块定义了以下变量:
- exception cd.error
- 各种错误引发的异常。
- cd.DATASIZE
- 一帧音频数据的大小。 这是传递给
audio
类型回调的音频数据的大小。
- cd.BLOCKSIZE
- 一帧未解释的音频数据的大小。
以下变量是由 getstatus()
返回的状态:
- cd.READY
- 驱动器已准备好运行,并加载了一张音频 CD。
- cd.NODISC
- 驱动器未装入 CD。
- cd.CDROM
- 该驱动器装有 CD-ROM。 后续的播放或读取操作将返回 I/O 错误。
- cd.ERROR
- 尝试读取光盘或其目录时发生错误。
- cd.PLAYING
- 驱动器处于 CD 播放器模式,通过其音频插孔播放音频 CD。
- cd.PAUSED
- 驱动器处于 CD 层模式,播放暂停。
- cd.STILL
- 相当于旧版(非 3301)东芝 CD-ROM 驱动器上的 PAUSED。 SGI 从未提供过此类驱动器。
- cd.audio
cd.pnum
cd.index
cd.ptime
cd.atime
cd.catalog
cd.ident
cd.control
- 描述各种类型的解析器回调的整数常量,可以由 CD 解析器对象的
addcallback()
方法设置(见下文)。
39.3.1. 玩家对象
Player 对象(由 open() 返回)具有以下方法:
- CD player.allowremoval()
- 解锁 CD-ROM 驱动器上的弹出按钮,允许用户根据需要弹出小盒。
- CD player.bestreadsize()
- 返回用于
readda()
方法的 num_frames 参数的最佳值。 最佳被定义为允许来自 CD-ROM 驱动器的连续数据流的值。
- CD player.close()
- 释放与播放器对象关联的资源。 调用
close()
后,该对象的方法不应再使用。
- CD player.eject()
- 从 CD-ROM 驱动器中弹出小盒。
- CD player.getstatus()
- 返回有关 CD-ROM 驱动器当前状态的信息。 返回的信息是具有以下值的元组:state、track、rtime、atime、ttime , first, last, scsi_audio, cur_block。 rtime 是相对于当前曲目开始的时间; atime 是相对于光盘开始的时间; ttime 是光盘上的总时间。 有关这些值的含义的更多信息,请参见手册页 CDgetstatus(3dm)。 state 的值为以下之一:ERROR、NODISC、READY、PLAYING、 ]暂停、静止或CDROM。
- CD player.gettrackinfo(track)
- 返回有关指定轨道的信息。 返回的信息是一个元组,由两个元素组成,曲目的开始时间和曲目的持续时间。
- CD player.msftoblock(min, sec, frame)
- 将表示绝对时间代码中时间的分、秒、帧三倍转换为给定 CD-ROM 驱动器的相应逻辑块编号。 您应该使用 msftoframe() 而不是
msftoblock()
来比较时间。 逻辑块号与帧号的不同之处在于某些 CD-ROM 驱动器所需的偏移量。
- CD player.play(start, play)
- 在 CD-ROM 驱动器中的指定轨道上开始播放音频 CD。 音频输出出现在 CD-ROM 驱动器的耳机和音频插孔(如果有)上。 播放在光盘结尾处停止。 start 是开始播放 CD 的曲目编号; 如果 play 为 0,则 CD 将设置为初始暂停状态。 然后可以使用方法
togglepause()
开始播放。
- CD player.playabs(minutes, seconds, frames, play)
- 与
play()
类似,除了以分钟、秒和帧而不是曲目编号给出开始。
- CD player.playtrack(start, play)
- 与
play()
类似,除了在曲目结束时停止播放。
- CD player.playtrackabs(track, minutes, seconds, frames, play)
- 与
play()
类似,不同之处在于播放从指定的绝对时间开始并在指定曲目的结尾结束。
- CD player.preventremoval()
- 锁定光驱上的弹出按钮,防止用户随意弹出盒。
- CD player.readda(num_frames)
- 从安装在 CD-ROM 驱动器中的音频 CD 读取指定数量的帧。 返回值是一个表示音频帧的字符串。 该字符串可以原封不动地传递给解析器对象的
parseframe()
方法。
- CD player.seek(minutes, seconds, frames)
- 设置指示下一次从 CD-ROM 读取数字音频数据的起点的指针。 指针设置为以 分钟 、 秒 和 帧 指定的绝对时间码位置。 返回值是指针所设置的逻辑块号。
- CD player.seekblock(block)
- 设置指示下一次从 CD-ROM 读取数字音频数据的起点的指针。 指针被设置为指定的逻辑块号。 返回值是指针所设置的逻辑块号。
- CD player.seektrack(track)
- 设置指示下一次从 CD-ROM 读取数字音频数据的起点的指针。 指针被设置到指定的轨道。 返回值是指针所设置的逻辑块号。
- CD player.stop()
- 停止当前播放操作。
- CD player.togglepause()
- 如果 CD 正在播放,则暂停 CD,如果暂停,则使其播放。
39.3.2. 解析器对象
解析器对象(由 createparser() 返回)具有以下方法:
- CD parser.addcallback(type, func, arg)
为解析器添加回调。 解析器对数字音频数据流中的八种不同类型的数据有回调。 这些类型的常量在 cd 模块级别定义(见上文)。 回调调用如下:
func(arg, type, data)
,其中 arg 是用户提供的参数,type 是回调的特定类型,data是为此 type 回调返回的数据。 数据的类型取决于回调的 type 如下:类型
价值
audio
可以不加修改地传递给
al.writesamps()
的字符串。pnum
给出程序(轨道)编号的整数。
index
给出索引号的整数。
ptime
包含以分钟、秒和帧为单位的程序时间的元组。
atime
由以分钟、秒和帧为单位的绝对时间组成的元组。
catalog
13 个字符的字符串,给出 CD 的目录号。
ident
12 个字符的字符串,给出录音的 ISRC 标识号。 该字符串由两个字符的国家代码、三个字符的所有者代码、两个表示年份的字符和五个表示序列号的字符组成。
control
从 CD 子码数据给出控制位的整数
- CD parser.deleteparser()
- 删除解析器并释放它正在使用的内存。 在此调用之后不应使用该对象。 当对对象的最后一个引用被移除时,这个调用会自动完成。
- CD parser.parseframe(frame)
- 解析来自 CD 的一帧或多帧数字音频数据,例如由
readda()
返回。 它确定数据中存在哪些子代码。 如果这些子代码自上一帧以来发生了变化,则parseframe()
执行适当类型的回调,将帧中找到的子代码数据传递给它。 与 C 函数不同的是,可以向此方法传递多于一帧的数字音频数据。
- CD parser.removecallback(type)
- 删除给定 类型 的回调。
- CD parser.resetparser()
- 将用于跟踪子代码的解析器的字段重置为初始状态。
resetparser()
应该在更换光盘后调用。