- 积分
- 2356
- 在线时间
- 4275 小时
- 最后登录
- 2024-5-6
- 阅读权限
- 100
- 精华
- 0
- UID
- 761332
- 帖子
- 2400
- 精华
- 0
- 经验
- 2356 点
- 金钱
- 2311 ¥
- 注册时间
- 2014-10-10
|
我可以完美地播放音频CD;为什么将 CD 读入文件如此困难且容易出错?这只是同一件事。
不幸的是,这并不那么容易。
音频 CD 不是随机存取格式。它只能从某个起始点按顺序播放直到完成,就像黑胶唱片一样。与数据 CD 不同,音频数据中没有同步或定位标头(CD、音频或数据使用 2352 字节扇区。在数据 CD 中,每个扇区 304 字节用于标头、同步和纠错。音频 CD 使用全部 2352 字节作为数据)。音频 CD *确实* 具有连续的分段子通道,但这仅适用于根据 SCSI 规范寻找所需区域的 +/-1 秒(或 75 个扇区或 ~176kB)。
当 CD 作为音频播放时,它不仅以 1x 速度移动,驱动器还将媒体数据速率(旋转速度)精确锁定为播放速度。在播放时拿起便携式 CD 播放器并将其旋转 90 度。很可能它会跳过;你破坏了这种微妙的平衡。此外,玩家永远不会因为正在做的事情而分心……没有其他事情占用他的时间。现在添加一个非实时的、(相对)高延迟的多任务内核;就像拿起播放器并不断摇晃它一样。
CDROM 驱动器通常假设任何类型的 DAE 都是线性的,并在任务中抛出一个预读缓冲区。然而,操作系统将数据作为分解的、单独的读取请求来读取。驱动器正在进行预读缓冲,并在等待操作系统读取先前的块时尝试存储来自介质的附加数据。看看在 36x 下,数据以 6.2MB/秒的速度传入,每次读取只有 13 个扇区或约 30k(由于 DMA 限制),一秒钟必须完成 208 个读取请求,至少不能有任何中断,以避免跳过。假设驱动器工作正常,操作系统对磁盘的单次交换或文件系统缓存的刷新通常会导致流媒体丢失。哦,地球上几乎没有一台 PC 具有这样的 I/O 吞吐量;Sun Enterprise 服务器可以,但 PC 不能。假设完美的实时行为,大多数都不会在五倍之内。
更糟糕的是,更快的驱动器通常容易出现振动和对准问题;有些是彻底的惨败。即使没有中断,他们也会“不断地”失去流媒体。15 年前,飞利浦确定 CD 只能旋转 50-60 倍,直到物理 CD(由聚碳酸酯制成)因向心力而严重变形而无法读取。今天的玩家正在将物理推向极限。很少有人能如此可靠地做到这一点。
请注意,CD“播放速度”是广告商用数字欺骗他们的一个很好的例子。36x cdrom 通常不会以普通驱动器的 36x 速度旋转。由于 1x 驱动器根据访问与集线器的距离来调整速度,因此 36x 驱动器可能在整个表面上使用恒定的角速度,以便在边缘获得最大36x 的角速度。因此,假设“36x”不是一个完全的谎言,就像在某些驱动器上那样,它实际上旋转得更慢。
由于音频光盘的数据中没有标头来帮助查找丢失的内容,因此大多数驱动器只会猜测。
这甚至不会“开始”陷入愚蠢的固件错误。即使 Plextor 偶尔也会出现 DAE 错误(尽管在每种情况下,Plextor 都修复了该错误*并*免费更换/修复了驱动器)。更便宜的驱动器通常是完整的篮子。
咆哮更新(对于那些知道的人):
有几个人通过个人邮件和 Usenet 指出,音频光盘确实将(至少)每 10 个扇区中的 9 个扇区的绝对定位信息放入 Q 子通道中,而我对上面 +/-75 扇区的最初声明是错误的。我承认它有误导性,所以我会尽力澄清。
定位数据当然在子通道Q中;然而,由于几个原因,这一点没有实际意义。
SCSI 和 ATAPI 规范(各有几个,选择一个)没有提供任何从所需扇区检索子通道的方法。READ SUB-CHANNEL 命令将向您提供 Q 好吧,您只是不知道该 Q 到底来自哪里。该命令旨在从暂停或播放的音频光盘中获取粗略的定位信息。这是音频;几个扇区的缺失只是一瞬间的一小部分。
较旧的 CDROM 驱动器往往不会期望“READ SUB-CHANNEL”,除非驱动器正在播放音频;在数据读取期间调用它可能会使驱动器崩溃并锁定系统。我有一个这样的驱动器(Apple 803i,实际上是重新包装的索尼 CD-8003)。
MMC-2 *确实*提供了一种在 READ CD 命令中检索 Q 子通道以及用户数据的方法。尽管驱动器需要识别该功能,但允许简单地返回零(实际上使该功能未实现)。猜猜有多少驱动器实际实现了此功能:不多。
假设您*可以*取回子通道,大多数 CDROM 驱动器似乎主要在“小帧”级别上识别音频光盘;因此,部门级结构并不可靠。人们可能会得到一个重新组装的 subQ,但如果读取是在扇区的中间开始的(或者在中间丢失了一个小帧;很多人都会这么做),则 subQ 可能会损坏且无用。
由于在没有子通道的情况下重组未损坏的帧很容易,并且损坏的读取也可能导致子通道损坏,因此 cdparanoia 将子通道视为比其价值更多的麻烦(在验证期间)。
至少另一个包(Win32 的精确音频复制)设法使用子通道来增强目录信息。我不知道这是否仅适用于支持使用 READ CD 返回 Q 的 MMC-2 驱动器,但我想我将重新使用子通道来获取额外的 TOC 信息。
|
|