39.3. cd — SGI 系统上的 CD-ROM 访问 — Python 文档

来自菜鸟教程
Python/docs/2.7/library/cd
跳转至:导航、​搜索

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 分为 tracksprograms(这两个术语可以互换使用)。 轨道可以细分为索引。 音频 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 驱动器当前状态的信息。 返回的信息是具有以下值的元组:statetrackrtimeatimettime , first, last, scsi_audio, cur_blockrtime 是相对于当前曲目开始的时间; atime 是相对于光盘开始的时间; ttime 是光盘上的总时间。 有关这些值的含义的更多信息,请参见手册页 CDgetstatus(3dm)state 的值为以下之一:ERRORNODISCREADYPLAYING]暂停静止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() 应该在更换光盘后调用。