On this page
39.3. cd — 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 分为音轨或程序(术语可互换使用)。曲目可细分为* indices 。音频 CD 包含目录*,用于提供 CD 上曲目的开头。索引 0 通常是曲目开始之前的暂停。由目录给出的轨道的起点通常是索引 1 的起点。
CD 上的位置可以用两种方式表示。帧号或三个值(分钟,秒和帧)的 Tuples。大多数Function使用后一种表示形式。位置可以相对于 CD 的开头,也可以相对于曲目的开头。
模块cd定义以下函数和常量:
cd.
createparser
( )- 创建并返回一个不透明的解析器对象。解析器对象的方法如下所述。
cd.
msftoframe
(分钟,秒,帧)- 将代表绝对时间代码的时间的
(minutes, seconds, frames)
三 Tuples 转换为相应的 CD 帧号。
- 将代表绝对时间代码的时间的
cd.
open
([* device * [,* mode *]])- 打开 CD-ROM 设备。返回值是一个不透明的播放器对象;下面描述播放器对象的方法。设备是 SCSI 设备文件的名称,例如
'/dev/scsi/sc0d4l0'
或None
。如果Ellipsis或为None
,则参考硬件 Lists 来查找 CD-ROM 驱动器。 * mode *(如果未Ellipsis)应为字符串'r'
。
- 打开 CD-ROM 设备。返回值是一个不透明的播放器对象;下面描述播放器对象的方法。设备是 SCSI 设备文件的名称,例如
该模块定义以下变量:
exception
cd.
error
- 因各种错误引发异常。
cd.
DATASIZE
- 一帧音频数据的大小。这是传递给
audio
类型的回调的音频数据的大小。
- 一帧音频数据的大小。这是传递给
cd.
BLOCKSIZE
- 一帧未解释的音频数据的大小。
以下变量是getstatus()
返回的状态:
cd.
READY
- 该驱动器已准备就绪,可以加载音频 CD 进行操作。
cd.
NODISC
- 驱动器未加载 CD。
cd.
CDROM
- 驱动器装有 CD-ROM。随后的播放或读取操作将返回 I/O 错误。
cd.
ERROR
- try读取光盘或其目录时发生错误。
cd.
PLAYING
- 该驱动器处于 CD 播放器模式,可pass其音频插孔播放音频 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
- 描述可以pass CD 解析器对象的
addcallback()
方法设置的各种类型的解析器回调的整数常量(请参见下文)。
- 描述可以pass CD 解析器对象的
39.3.1. 玩家对象
播放器对象(由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 player.gettrackinfo(track)
- 返回有关指定轨道的信息。返回的信息是一个由两个元素组成的 Tuples,即轨道的开始时间和轨道的持续时间。
CD player.msftoblock(min, sec, frame)
- 将以绝对时间码表示时间的三分,几秒,几帧转换为给定 CD-ROM 驱动器的相应逻辑块号。您应该使用msftoframe()而不是
msftoblock()
来比较时间。逻辑块号与帧号的区别在于某些 CD-ROM 驱动器所需的偏移量。
- 将以绝对时间码表示时间的三分,几秒,几帧转换为给定 CD-ROM 驱动器的相应逻辑块号。您应该使用msftoframe()而不是
CD player.play(start, play)
- 在指定的轨道开始播放 CD-ROM 驱动器中的音频 CD。音频输出出现在 CD-ROM 驱动器的耳机和音频插孔(如果已安装)上。播放在光盘结尾处停止。 * start 是开始播放 CD 的曲目号;如果 play *为 0,则 CD 将被设置为初始暂停状态。然后可以使用方法
togglepause()
开始播放。
- 在指定的轨道开始播放 CD-ROM 驱动器中的音频 CD。音频输出出现在 CD-ROM 驱动器的耳机和音频插孔(如果已安装)上。播放在光盘结尾处停止。 * start 是开始播放 CD 的曲目号;如果 play *为 0,则 CD 将被设置为初始暂停状态。然后可以使用方法
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-ROM 驱动器上的弹出按钮,从而防止用户随意弹出盒式磁带。
CD player.readda(num_frames)
- 从 CD-ROM 驱动器中安装的音频 CD 读取指定数量的帧。返回值是代表音频帧的字符串。该字符串可以原样传递给解析器对象的
parseframe()
方法。
- 从 CD-ROM 驱动器中安装的音频 CD 读取指定数量的帧。返回值是代表音频帧的字符串。该字符串可以原样传递给解析器对象的
CD player.seek(minutes, seconds, frames)
- 设置指示从 CD-ROM 下次读取数字音频数据的起点的指针。指针设置为以* minutes , seconds 和 frames *指定的绝对时间码位置。返回值是已设置指针的逻辑块号。
CD player.seekblock(block)
- 设置指示从 CD-ROM 下次读取数字音频数据的起点的指针。指针设置为指定的逻辑块号。返回值是已设置指针的逻辑块号。
CD player.seektrack(track)
- 设置指示从 CD-ROM 下次读取数字音频数据的起点的指针。指针设置为指定的轨道。返回值是已设置指针的逻辑块号。
CD player.stop()
- 停止当前的播放操作。
CD player.togglepause()
- 如果 CD 正在播放,则暂停它,如果暂停,则使其播放。
39.3.2. 解析器对象
解析器对象(由createparser()返回)具有以下方法:
CD parser.addcallback(type, func, arg)
- 为解析器添加回调。解析器具有用于数字音频数据流中八种不同类型数据的回调。这些类型的常量在cd模块级别定义(请参见上文)。回调的调用方式如下:
func(arg, type, data)
,其中* arg 是用户提供的参数, type 是特定的回调类型, data 是为此回调的 type 返回的数据。数据的类型取决于回调的 type *,如下所示:
- 为解析器添加回调。解析器具有用于数字音频数据流中八种不同类型数据的回调。这些类型的常量在cd模块级别定义(请参见上文)。回调的调用方式如下:
Type | Value |
---|---|
audio |
可以直接传递给al.writesamps() 的字符串。 |
pnum |
给出程序(曲目)编号的整数。 |
index |
给出索引号的整数。 |
ptime |
Tuples,包含以分钟,秒和帧为单位的编程时间。 |
atime |
Tuples,由分钟,秒和帧的绝对时间组成。 |
catalog |
13 个字符的字符串,给出 CD 的目录号。 |
ident |
12 个字符的字符串,提供记录的 ISRC 标识号。该字符串包含两个字符的国家/locale 代码,三个字符的所有者代码,两个字符的年份和五个字符的序列号。 |
control |
整数给出 CD 子代码数据中的控制位 |
CD parser.deleteparser()
- 删除解析器并释放其使用的内存。此调用后不应使用该对象。删除对对象的最后一个引用后,将自动完成此调用。
CD parser.parseframe(frame)
- 解析 CD 中的一帧或多帧数字音频数据,例如
readda()
返回。它确定数据中存在哪些子代码。如果自上一帧以来这些子代码已更改,则parseframe()
执行适当类型的回调,将在帧中找到的子代码数据传递给该回调。与 C 函数不同,可以将一帧以上的数字音频数据传递给此方法。
- 解析 CD 中的一帧或多帧数字音频数据,例如
CD parser.removecallback(type)
- 删除给定* type *的回调。
CD parser.resetparser()
- 将用于跟踪子代码的解析器的字段重置为初始状态。更换光盘后应调用
resetparser()
。
- 将用于跟踪子代码的解析器的字段重置为初始状态。更换光盘后应调用