Featured image of post EAC 与 Cue 文件

EAC 与 Cue 文件

Cue 是抓轨者日常遇到的小老弟,本文旨在详细介绍它。

本文分享的知识来自生成四种不同的 Cue 文件、在记事本中打开、在 EAC 的音轨窗口比较其内容。在 EAC 的 CD 布局编辑器中加载这些 Cue 文件,使之以更友好的方式呈现也贡献很大。

Cue 文件用于为整轨音频文件提供索引信息。无论是翻录还是刻录 CD,它都是必备良品。Cue 文件的扩展名为「.cue」,是一种纯文本文件。简单来说,Cue 指示了音轨在光盘中的具体摆放方式

Cue 文件可能包含 元数据(例如:TITLE(标题)和 PERFORMER(艺术家)字段),但必须包含调用外部文件的信息(「FILE」命令行)以及 TRACK(音轨号)和 INDEX(索引)位置。INDEX 位置使用 MM:SS:FF 格式指定,MM 代表分钟,SS 代表秒,FF 代表帧数(每秒 75 帧)。

Cue 文件的广泛使用得益于 EAC 用户在整轨抓 CD 时总会附带 Cue 文件。EAC 可以创建四种不同类型的 Cue 文件,其中三种用于分轨(一个 Cue 文件调用多个音频文件)。不过整轨 Cue 文件似乎流传更广泛。

向数据光盘上写入数据、刻录音频 CD 都会用到 Cue 文件。本文只关注音频相关的命令,向你介绍 EAC 能生成的四种类型的 Cue 文件。

背景

Cue 文件是来自 Golden Hawk Technology 的 Jeff Arnold 为配合他所研发的 DAO (Disc At Once) 和 CDRWIN 两款软件而开发的格式。现在 Cue 文件已被纳入「de facto」标准,且被广泛用于许多其他程序中,包括 foobar2000。Cue 文件的官方说明也被收录到 CDRWIN 用户指南的附录一内。

Cue 文件的名字来源于「SEND CUE SHEET」命令。在 SAO 写入模式中,描述唱片布局的 Cue 文件在刻录开始前必须要发送到光驱中。光驱刻碟时使用 Cue 文件信息生成 P 和 Q 子通道数据,并检索通过「WRITE」命令传输数据的格式和块大小。

Cue 文件命令

以下命令在 CDRWIN 用户指南附录一中有详细介绍:

  • CATALOG
  • CDTEXTFILE
  • FILE
  • FLAGS
  • INDEX
  • ISRC
  • PERFORMER
  • POSTGAP
  • PREGAP
  • REM
  • SONGWRITER
  • TITLE
  • TRACK

最常用命令

FILE(文件)

FILE 命令指定了 Cue 当前调用的文件。有效的文件类型有 WAVE、MP3 和 AIFF,虽然其他格式,例如:像 WavPack 和 FLAC 这样的无损格式,也可被归类为 WAVE 文件类型进行调用。

INDEX(索引)

它是介于 00 到 99 之间的数字。索引位置以「MM:SS:FF」格式指定。而且与当前调用文件的起始有关。INDEX 01 命令指明了一个新音轨的开始,INDEX 00 命令指明了音轨前间隙。你可能会发现你的 CD 机在开始播放下一曲前会从负值开始计数——这就是介于 INDEX 00 和 INDEX 01 之间的时段。

PERFORMER(艺术家)

在最外层指明 CD 艺术家;在音轨层指明音轨艺术家。

PREGAP(前置间隙)

用以指明音轨前置间隙的长度,使用 MM:SS:FF 格式。

REM(注释)

用于在 Cue 文件中添加注释。此命令通常用来存储「TITLE」和「PERFORMER」的额外元数据。例如唱片的日期或流派。

TITLE(标题)

在最外层指明专辑标题;在音轨层指明音轨标题。

TRACK(音轨)

介于 01 到 99 之间的数字,指示了音轨编号。

四大类型

  • 单个的 WAV 文件
  • 多个带已校正间隙的 WAV 文件
  • 多个已去除间隙的 WAV 文件
  • 多个带间隙的 WAV 文件(非规则)

选单中还有「当前间隙设置」,但并非一个实际的选项,它指代的是上述四种之一:当前选中的间隙设置。所以以该选项生成 Cue 会得到与四种类型之一相同的文件。

在新手模式中,你只能看到两个选项:

  • 单个的 WAV 文件
  • 多个的 WAV——等同于「多个带间隙的 WAV 文件(非规则)」

很多人可能不知道,Cue 文件实质上只是个简单的 ASCII 文件,非常容易阅读和解析的格式(如有需求你也可以编辑它)。

本文采用的素材是 Rush 的专辑「Signals」。选它是因为音轨少,格式简单(7 个间隙,全是非零的长度),无隐藏音轨(第一轨没有 INDEX 00)且第一轨之前是标准的 2 秒。(由于还有更简单的示例,所以本例会放在每一小节的后部作为进阶内容。)

单个的 WAV 文件——即「整轨抓取」

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
REM GENRE Alternative
REM DATE 1991
REM DISCID 860B640B
REM COMMENT "ExactAudioCopy v0.95b4"
PERFORMER "My Bloody Valentine"
TITLE "Loveless"
FILE "My Bloody Valentine - Loveless.wav" WAVE
  TRACK 01 AUDIO
    TITLE "Only Shallow"
    PERFORMER "My Bloody Valentine"
    INDEX 01 00:00:00
  TRACK 02 AUDIO

    TITLE "Loomer"
    PERFORMER "My Bloody Valentine"
    INDEX 01 04:17:52

上面这个 EAC 生成的 Cue 文件展示了一个整轨 Cue 文件的前两个音轨。注意:REM 命令用来记录附加元数据的格式是 REM <标签> <内容>。在 Cue 文件顶部的「PERFORMER」和「TITLE」命令分别记录了专辑艺术家和专辑标题。在音轨层级的「PERFORMER」和「TITLE」记录了音轨艺术家和音轨标题。

TRACK 02 的 INDEX 01 并非声明该音轨的长度是 4:17.693,而是表示该音轨从 4:17.693 开始(所以 TRACK 01 的长度是 4:17.693)。如果 TRACK 02 时长 3 分钟,那么 TRACK 03 的 INDEX 01 值就是 07:17:52。

同时也要注意文件调用中使用了相对路径(绝对路径也能用),文件类型是 WAV / WAVE。

Rush - Signals

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
FILE "D:\MP3\Ripados\Range.wav" WAVE
  TRACK 01 AUDIO
    INDEX 01 00:00:00
  TRACK 02 AUDIO
    INDEX 00 05:33:45
    INDEX 01 05:34:55
  TRACK 03 AUDIO
    INDEX 00 10:22:12
    INDEX 01 10:22:57
  TRACK 04 AUDIO
    INDEX 00 15:20:00
    INDEX 01 15:20:62
  TRACK 05 AUDIO
    INDEX 00 21:41:40
    INDEX 01 21:43:00
  TRACK 06 AUDIO
    INDEX 00 28:06:12
    INDEX 01 28:07:32
  TRACK 07 AUDIO
    INDEX 00 31:49:40
    INDEX 01 31:50:40
  TRACK 08 AUDIO
    INDEX 00 36:42:60
    INDEX 01 36:44:05

如你所见,这玩意儿很直白。一个 EAC 认为的整轨 WAV 文件被应用于所有的音轨。Track 1 以 INDEX 0 1 为开始(track 1 的 INDEX 0 被视为隐藏音轨),位于文件的绝对位置 00:00:00。所有的时间点都是整轨 WAV 文件的绝对位置。其中的音轨(01 INDEX 0 们)和间隙(00 INDEX 0 们)显而易见且通俗易懂,所以根本不需要赘述,不过这种简单的格式能帮我们理解基础知识,且在事情变得复杂的时候能派上用场。

未雨绸缪的备注:给定音轨的间隙长度可以用 INDEX 01 起始位置减去 INDEX 00 起始位置得到。比方说,track 3 的间隙开始于 10:22:12,而音轨实际开始于 10:22:57,则告诉我们间隙长度是 57 - 12 = 00:00:45。

单个带 TRACK 01 INDEX 00 隐藏音轨的 WAV 文件

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
PERFORMER "Bloc Party"
TITLE "Silent Alarm"
FILE "Bloc Party - Silent Alarm.flac" WAVE
TRACK 01 AUDIO
   TITLE "Like Eating Glass"
   PERFORMER "Bloc Party"
   INDEX 00 00:00:00
   INDEX 01 03:22:70
TRACK 02 AUDIO
   TITLE "Helicopter"
   PERFORMER "Bloc Party"
   INDEX 00 07:42:69
   INDEX 01 07:44:69

上面的 Cue 文件展示了一个在开始处包含隐藏音轨的整轨 Cue 文件。注意 TRACK 01 INDEX 01 始于 03:22:70(3:22.933)而不是第一个例子和大多数 Cue 文件中所展示的 00:00:00。TRACK 02 的 INDEX 00 索引展示的则是更为常见的情况,在 INDEX 01 之前存在两秒间隙。

第二轨的 INDEX 00 会带来一段负值倒计时,但这个效果你可能在 TRACK 01 的 INDEX 00 看不到。如果想要利用 CD 机聆听这段隐藏音轨,你需要播放唱片,摁倒带按钮两次,本质就是从 3:22 处回退到真正的起始点。

同样还要注意文件调用的是 FLAC,但是这里使用了 WAV / WAVE 文件类型。对于 MP3 格式应使用「MP3」类型,AIFF 格式使用「AIFF」类型,但是对于其他所有格式都使用「WAV / WAVE」类型。

多个带已校正间隙的 WAV 文件——即附加间隙到下一轨(头部)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
FILE "The Specials - Singles - 01 - Gangsters.wav" WAVE
  TRACK 01 AUDIO
    TITLE "Gangsters"
    PERFORMER "The Specials"
    INDEX 01 00:00:00
FILE "The Specials - Singles - 02 - Rudi, A Message To You.wav" WAVE
  TRACK 02 AUDIO
    TITLE "Rudi, A Message To You"
    PERFORMER "The Specials"
    INDEX 00 00:00:00
    INDEX 01 00:00:28

这个由 EAC 创建的分轨 Cue 文件将间隙附加到下一轨的头部。这种方法允许用户保留间隙,但这会导致音轨的内容以静音作为开始,导致播放时不那么令人满意。

Rush - Signals

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
FILE "D:\MP3\Ripados\Rush\Signals\Rush - Signals - 01 - Subdivisions.wav" WAVE
  TRACK 01 AUDIO
    INDEX 01 00:00:00
FILE "D:\MP3\Ripados\Rush\Signals\Rush - Signals - 02 - The Analog Kid.wav" WAVE
  TRACK 02 AUDIO
    INDEX 00 00:00:00
    INDEX 01 00:01:10
FILE "D:\MP3\Ripados\Rush\Signals\Rush - Signals - 03 - Chemistry.wav" WAVE
  TRACK 03 AUDIO
    INDEX 00 00:00:00
    INDEX 01 00:00:45
FILE "D:\MP3\Ripados\Rush\Signals\Rush - Signals - 04 - Digital Man.wav" WAVE
  TRACK 04 AUDIO
    INDEX 00 00:00:00
    INDEX 01 00:00:62
FILE "D:\MP3\Ripados\Rush\Signals\Rush - Signals - 05 - The Weapon.wav" WAVE
  TRACK 05 AUDIO
    INDEX 00 00:00:00
    INDEX 01 00:01:35
FILE "D:\MP3\Ripados\Rush\Signals\Rush - Signals - 06 - New World Man.wav" WAVE
  TRACK 06 AUDIO
    INDEX 00 00:00:00
    INDEX 01 00:01:20
FILE "D:\MP3\Ripados\Rush\Signals\Rush - Signals - 07 - Losing It.wav" WAVE
  TRACK 07 AUDIO
    INDEX 00 00:00:00
    INDEX 01 00:01:00
FILE "D:\MP3\Ripados\Rush\Signals\Rush - Signals - 08 - Countdown.wav" WAVE
  TRACK 08 AUDIO
    INDEX 00 00:00:00
    INDEX 01 00:01:20

这个 Cue 和之前那个很相似,区别在于它使用了多个 WAV 文件。此 Cue 假设你将间隙附加在每个音轨的开头,这就是为什么,比如,TRACK 03 的 INDEX 00 开始于 Chemistry.wav 的 00:00:00。实际的歌曲(INDEX 01)开始于该文件的 00:00:45。这样我们可以轻松地观察到间隙长度为 00:00:45。

注意:在 Cue 文件和 EAC 的 CD 布局窗口,时间格式是「分:秒:帧」,1 帧相当于 1/75 秒而非 1/100 秒。所以一段在 Cue 文件中长度为 00:00:50 的间隙并不是半秒的意思,而是 2/3 秒的间隙(小数表示就是 0.66 或 0.67 的样子)。

多个已去除间隙的 WAV 文件——即「抛弃间隙」

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
FILE "The Specials - Singles - 01 - Gangsters.wav" WAVE
  TRACK 01 AUDIO
    TITLE "Gangsters"
    PERFORMER "The Specials"
    INDEX 01 00:00:00
FILE "The Specials - Singles - 02 - Rudi, A Message To You.wav" WAVE
  TRACK 02 AUDIO
    TITLE "Rudi, A Message To You"
    PERFORMER "The Specials"
    PREGAP 00:00:28
    INDEX 01 00:00:00

这个 Cue 文件移除了间隙,却又在音轨之间使用「PREGAP」命令人工重建了静音部分。如果间隙部分是静音的,这么操作是可以的,但如果间隙部分包含了音频,这个做法就显得很憨憨了。

Rush - Signals

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
FILE "D:\MP3\Ripados\Rush\Signals\Rush - Signals - 01 - Subdivisions.wav" WAVE
  TRACK 01 AUDIO
    INDEX 01 00:00:00
FILE "D:\MP3\Ripados\Rush\Signals\Rush - Signals - 02 - The Analog Kid.wav" WAVE
  TRACK 02 AUDIO
    PREGAP 00:01:10
    INDEX 01 00:00:00
FILE "D:\MP3\Ripados\Rush\Signals\Rush - Signals - 03 - Chemistry.wav" WAVE
  TRACK 03 AUDIO
    PREGAP 00:00:45
    INDEX 01 00:00:00
FILE "D:\MP3\Ripados\Rush\Signals\Rush - Signals - 04 - Digital Man.wav" WAVE
  TRACK 04 AUDIO
    PREGAP 00:00:62
    INDEX 01 00:00:00
FILE "D:\MP3\Ripados\Rush\Signals\Rush - Signals - 05 - The Weapon.wav" WAVE
  TRACK 05 AUDIO
    PREGAP 00:01:35
    INDEX 01 00:00:00
FILE "D:\MP3\Ripados\Rush\Signals\Rush - Signals - 06 - New World Man.wav" WAVE
  TRACK 06 AUDIO
    PREGAP 00:01:20
    INDEX 01 00:00:00
FILE "D:\MP3\Ripados\Rush\Signals\Rush - Signals - 07 - Losing It.wav" WAVE
  TRACK 07 AUDIO
    PREGAP 00:01:00
    INDEX 01 00:00:00
FILE "D:\MP3\Ripados\Rush\Signals\Rush - Signals - 08 - Countdown.wav" WAVE
  TRACK 08 AUDIO
    PREGAP 00:01:20
    INDEX 01 00:00:00

这份 Cue 和前面那份看起来非常像。区别在于,这里的 INDEX 01 们始于文件的真正起始位置(00:00:00)。那么间隙到哪里去了呢?它们可以被人为通过「PREGAP」命令插入。正如我们能通过阅读 Cue 来猜测并确认其操作,PREGAP 能告知刻录软件创建一段特定长度的静音到 00 INDEX 0。注意,INDEX 00 命令是不能用的,因为它的时间点是指向 WAV 文件的,但在本情况中根本就没有间隙被添加到 WAV 里,它们只是被简单地抛弃了。PREGAP 能够重新添加间隙(你最好祈祷被抛弃的东西只有静音,因为用 PREGAP 加回来的只能是静音)。EAC 的 CD 布局编辑器清楚地展示了 00 INDEX 0 们是被重建出来的,但它并非来自 WAV 文件。在本格式中,可以很容易地看到第三轨长达 00:00:45 的前置间隙在抓取 WAV 时被抛弃了,这个长度是第三轨的 PREGAP 命令告诉我们的。

多个带间隙的 WAV 文件(非规则)——即「追加间隙到上一轨(尾部)(默认)」

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
FILE "The Specials - Singles - 01 - Gangsters.wav" WAVE
  TRACK 01 AUDIO
    TITLE "Gangsters"
    PERFORMER "The Specials"
    INDEX 01 00:00:00
  TRACK 02 AUDIO
    TITLE "Rudi, A Message To You"
    PERFORMER "The Specials"
    INDEX 00 02:47:74
FILE "The Specials - Singles - 02 - Rudi, A Message To You.wav" WAVE
    INDEX 01 00:00:00

这个 Cue 文件在每一个音轨之前都追加了间隙,是许多抓分轨的用户为了保留间隙信息所偏好的做法。这种格式允许用户保留间隙,同时将间隙保留在音轨内不影响播放的位置。不幸的是,这种格式是不规范的,EAC 显然能读,刻录软件 Burrrn 也能,但遵守规范的软件如 foobar2000 就无法读取它了。

注意 TRACK 02 的 INDEX 00 仍调用第一个 FILE。

Rush - Signals 在我这里,这个选项也是「当前间隙设置」所指向的。我希望你也一样。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
FILE "D:\MP3\Ripados\Rush\Signals\Rush - Signals - 01 - Subdivisions.wav" WAVE
  TRACK 01 AUDIO
    INDEX 01 00:00:00
  TRACK 02 AUDIO
    INDEX 00 05:33:45
FILE "D:\MP3\Ripados\Rush\Signals\Rush - Signals - 02 - The Analog Kid.wav" WAVE
    INDEX 01 00:00:00
  TRACK 03 AUDIO
    INDEX 00 04:47:32
FILE "D:\MP3\Ripados\Rush\Signals\Rush - Signals - 03 - Chemistry.wav" WAVE
    INDEX 01 00:00:00
  TRACK 04 AUDIO
    INDEX 00 04:57:18
FILE "D:\MP3\Ripados\Rush\Signals\Rush - Signals - 04 - Digital Man.wav" WAVE
    INDEX 01 00:00:00
  TRACK 05 AUDIO
    INDEX 00 06:20:53
FILE "D:\MP3\Ripados\Rush\Signals\Rush - Signals - 05 - The Weapon.wav" WAVE
    INDEX 01 00:00:00
  TRACK 06 AUDIO
    INDEX 00 06:23:12
FILE "D:\MP3\Ripados\Rush\Signals\Rush - Signals - 06 - New World Man.wav" WAVE
    INDEX 01 00:00:00
  TRACK 07 AUDIO
    INDEX 00 03:42:08
FILE "D:\MP3\Ripados\Rush\Signals\Rush - Signals - 07 - Losing It.wav" WAVE
    INDEX 01 00:00:00
  TRACK 08 AUDIO
    INDEX 00 04:52:20
FILE "D:\MP3\Ripados\Rush\Signals\Rush - Signals - 08 - Countdown.wav" WAVE
    INDEX 01 00:00:00

最为棘手但最「正确」的 Cue 格式。第一个文件,Subdivisions.wav,在 Track1-Index1 和 Track2-Index0(第二轨的前置间隙)都用到了。该间隙始于文件的 05:33:45,持续到文件末尾。然后我们看看下一个文件,The Analog Kid.wav 上的标记。TRACK 02 INDEX 01 始于该文件的头部,然后持续到 04:47:32,继续读取当前的 WAV 文件,TRACK 03 的 INDEX 00 也被记录于此。保持这种模式直到专辑末尾,我们就能看到每个 WAV 文件包含了一个音轨(INDEX 01),然后是一个前置间隙(下一轨的 INDEX 00)。使用 CD 布局编辑器可使这一复杂的音轨与文件之间的联系清晰可见。所以该格式假定间隙被追加到了上一轨的末尾。所以 Countdown.wav 只用于 TRACK 08 的 INDEX 01 也就不奇怪了。因为并没有第九轨的前置间隙,它后边也就没有任何可追加的东西了。它本身的前置间隙已经被追加到之前的文件 Losing It.wav 去了。

现在我们试着在该格式中找一找可爱的 00:00:45 间隙。已知我们正在寻找 TRACK 03 的 INDEX 00。看看 Cue,我们在 The Analog Kid.wav 文件中找到了它,从 04:47:32,持续到该文件的结尾。所以我们得知道这个文件的准确时长。Winamp 和 EncSpot? 都不够准确,因为精度只有两位。但我们可以再次使用 EAC 的 CD 布局编辑器手动「作为新音轨追加文件」,然后看看长度。然后它会告诉我们「The Analog Kid.wav」长达 04:48.16。从文件长度中减去间隙的初始位置,我们就能得到实际的间隙长度:04:48:02 - 04:47:32 = 00:00:45!

这个数学题看起来有些奇怪,请牢记,Cue 文件用的是 「75 进制」,所以从 04:47:32 到 04:48:00 是 75 - 32 = 00:00:43。所以我们给个 +2(从 04:48:00 到 04:48:02),就到了我们最爱的 00:00:45 了。

上个例子的整轨版本

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
FILE "The Specials - Singles.wav" WAVE
  TRACK 01 AUDIO
    TITLE "Gangsters"
    PERFORMER "The Specials"
    INDEX 01 00:00:00
  TRACK 02 AUDIO
    TITLE "Rudi, A Message To You"
    PERFORMER "The Specials"
    INDEX 00 02:47:74
    INDEX 01 02:48:27

作为参考,列出了上一例子的整轨版本。

结论

现在,我想这个格式和其他格式一样,都挺清楚了。通过本文的内容,用户可以通过任何给定的 Cue 计算出所有的间隙长度,而且,如有需要,也能将一种 Cue 文件编辑成另一种格式。万一你发现你收藏的音频文件,间隙都是追加到上一轨的,也就是普遍情况,但手头的 Cue 文件却是「校正」过的那种,也就是间隙应附加在头部。现在你就能通过「记事本」「计算器」,开动脑筋(EAC 的 CD 布局编辑器也有用),将该 Cue 改成你需要的格式。(在本例中是「非规则」。)

Written by ZexWoo. All rights reserved.
主题 StackJimmy 设计 | 使用 Hugo 搭建