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'

该模块定义以下变量:

  • 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()方法设置的各种类型的解析器回调的整数常量(请参见下文)。

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-ROM 驱动器当前状态有关的信息。返回的信息是具有以下值的 Tuples:* state track rtime atime ttime first last scsi_audio cur_block *。 * rtime *是相对于当前曲目开始的时间; * atime 是相对于光盘开始的时间; * ttime 是光盘上的总时间。有关值的含义的更多信息,请参见手册页 CDgetstatus(3dm)。 * state *的值是以下之一:ERRORNODISCREADYPLAYINGPAUSEDSTILLCDROM
  • CD player.gettrackinfo(track)

    • 返回有关指定轨道的信息。返回的信息是一个由两个元素组成的 Tuples,即轨道的开始时间和轨道的持续时间。
  • 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-ROM 驱动器上的弹出按钮,从而防止用户随意弹出盒式磁带。
  • CD player.readda(num_frames)

    • 从 CD-ROM 驱动器中安装的音频 CD 读取指定数量的帧。返回值是代表音频帧的字符串。该字符串可以原样传递给解析器对象的parseframe()方法。
  • 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 *,如下所示:
TypeValue
audio可以直接传递给al.writesamps()的字符串。
pnum给出程序(曲目)编号的整数。
index给出索引号的整数。
ptimeTuples,包含以分钟,秒和帧为单位的编程时间。
atimeTuples,由分钟,秒和帧的绝对时间组成。
catalog13 个字符的字符串,给出 CD 的目录号。
ident12 个字符的字符串,提供记录的 ISRC 标识号。该字符串包含两个字符的国家/locale 代码,三个字符的所有者代码,两个字符的年份和五个字符的序列号。
control整数给出 CD 子代码数据中的控制位
  • CD parser.deleteparser()

    • 删除解析器并释放其使用的内存。此调用后不应使用该对象。删除对对象的最后一个引用后,将自动完成此调用。
  • CD parser.parseframe(frame)

    • 解析 CD 中的一帧或多帧数字音频数据,例如readda()返回。它确定数据中存在哪些子代码。如果自上一帧以来这些子代码已更改,则parseframe()执行适当类型的回调,将在帧中找到的子代码数据传递给该回调。与 C 函数不同,可以将一帧以上的数字音频数据传递给此方法。
  • CD parser.removecallback(type)

    • 删除给定* type *的回调。
  • CD parser.resetparser()

    • 将用于跟踪子代码的解析器的字段重置为初始状态。更换光盘后应调用resetparser()