免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5949 | 回复: 1
打印 上一主题 下一主题

[桌面系统] Cdrtools工具之cdda2wav CD抓取软件 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-01-12 20:37 |只看该作者 |倒序浏览
3.0 cdda2wav概述

在Linux下面已经有了一些用于CD播放和抓轨的图形界面工具,用于播放的用得最多的是gnome-cd ,但是它不能够抓轨,虽然它也有一个配置选项用来编辑一些曲目信息,比如音轨名称,流派,标题,生产日期,艺人等等,但是这些信息只能保存在电脑上,不能够刻到CD上,当然也不能够抓轨。还有另外一个图形界面的播放器叫grip倒是可以用来抓轨,但是它的播放按钮我从来都没有听到声音过,不知什么原因。可见这些所谓易用得图形界面易用性倒是有了,但是可用性却降低了。有时候为了一点小事,常常要打开多个图形界面,并不好使。随着使用Linux时间的增加,才发现Linux的真正强大之处是其命令行功能,想起以前花费那么多的时间去寻找图形界面程序,真是舍本逐末。就拿那两个程序来说吧,它们都不过是相应命令行程序的前端界面,如icedax(以前叫做cdda2wav),反正两者是二而一,一而二的东东,以及oggenc和lame等等都是它们的后台程序,只要掌握了熟悉了这些命令行程序,还用去学那些功能不稳定的图形界面程序吗?下面将向大家介绍的这个程序叫做icedax,是用来搞定CD光碟的东东。它可以用来播放CD上面的音乐,并且可以抓取任一个轨道或者任意长度的音乐(不限于一个一个的轨道,有可能是一个半或者连着几个轨道都可以抓取)。而且它还可以显示关于CD的很详细的信息。下面首先看一个例子:

icedax -eN -q -D  /dev/cdrom

上面的-eN选项表示拷贝声音数据到声卡,例如/dev/dsp(-e),同时还表示不要写到文件,读出就行了(-N),-D用来指示要读取的设备名称,/dev/cdrom就是光驱的意思。在这个程序中你必须清楚地指定光驱名称,否则将会报错。在Fedora中这个名称可以是/dev/cdrw或者是/dev/scd0,其中/dev/cdrom和/dev/cdrw或者/dev/dvd都是到/dev/scd0的链接,主要是一些死脑筋的应用程序只认某个名称,换个名称它就不认识了。因此保留这些链接。

提示:

-e使得在记录的同时向声卡拷贝数据,所依你几乎能同步听到音乐。声卡得到和记录同样的数据。对于时间要求是很严格的,所以最好和-q选项一起工作。为了用icedax作为模拟cd播放器,而同时又不录音到文件里,可以键入下面命令:icedax -q -e -t2 -d0  -N播放整个第二轨道。这样子就能尽最大限度减少录音对播放的影响(你的录音质量不可能超过播放质量)。

3.1  cdda2wav格式速率以及音轨常用选项

前面说了,这个程序可以用来播放光碟,那么它还有那些选项跟这个功能有关呢?下面将向大家逐一介绍,让你领略icedax的强大功能。

例子:

icedax -D /dev/cdrom -t 3+5 -eN

上面的例子中的-t 3+5表示播放音频CD的第三到第五个轨道。

再来看一些表示质量的选项,例子:

icedax -D /dev/cdrom -t 3+5 -eN -c 2 -x -b 16

上面的例子中的-c选项用来表示播放声道,-c 1表示单声道,-c 2表示立体声,-c s表示立体声可立体声可交换两声道录音。音。至于-x选项则用来表示采用最好质量播放。
注意,表示立体声,单声道,或者也可以分别采用-s,-m。
-b选项用来表示每个轨道采样的比特数,可为8,12.16。

相对于各种GUI图形界面的CD榨取程序而言,icedax可以对音频CD的榨取和读取设置非常细致的参数,下面略举几个例子:

首先应用cdda2wav得到下面列表:

Available rates are:
Rate   Divider      Rate   Divider      Rate   Divider      Rate   Divider
44100.0   1         29400.0   1.5        1696.2  26          1664.2  26.5
22050.0   2         17640.0   2.5        1633.3  27          1603.6  27.5
14700.0   3         12600.0   3.5        1575.0  28          1547.4  28.5
11025.0   4          9800.0   4.5        1520.7  29          1494.9  29.5
8820.0   5          8018.2   5.5        1470.0  30          1445.9  30.5
7350.0   6          6784.6   6.5        1422.6  31          1400.0  31.5
6300.0   7          5880.0   7.5        1378.1  32          1356.9  32.5
5512.5   8          5188.2   8.5        1336.4  33          1316.4  33.5
4900.0   9          4642.1   9.5        1297.1  34          1278.3  34.5
4410.0  10          4200.0  10.5        1260.0  35          1242.3  35.5
4009.1  11          3834.8  11.5        1225.0  36          1208.2  36.5
3675.0  12          3528.0  12.5        1191.9  37          1176.0  37.5
3392.3  13          3266.7  13.5        1160.5  38          1145.5  38.5
3150.0  14          3041.4  14.5        1130.8  39          1116.5  39.5
2940.0  15          2845.2  15.5        1102.5  40          1088.9  40.5
2756.2  16          2672.7  16.5        1075.6  41          1062.7  41.5
2594.1  17          2520.0  17.5        1050.0  42          1037.6  42.5
2450.0  18          2383.8  18.5        1025.6  43          1013.8  43.5
2321.1  19          2261.5  19.5        1002.3  44           991.0  44.5
2205.0  20          2151.2  20.5         980.0  45           969.2  45.5
2100.0  21          2051.2  21.5         958.7  46           948.4  46.5
2004.5  22          1960.0  22.5         938.3  47           928.4  47.5
1917.4  23          1876.6  23.5         918.8  48           909.3  48.5
1837.5  24          1800.0  24.5         900.0  49           890.9  49.5
1764.0  25          1729.4  25.5         882.0  50           873.3  50.5


从上面表中可以看出来,以44100为基础,divider表示除数,当除数的增加时,速率rate的取值则是44100除以divider所得的结果。比如假如divider取值为4.5的时候,rate的值为44100/4.5等于9800。有了这个表,下面就可以继续讲解cdda2wav的一些参数了。

首先看一个例子:

cdda2wav -eN -B -r 46000 -a 4 -P 1440 -l 440000 -D /dev/cdrom

上面的例子中,出现了几个新的参数,其中-r参数用来表示CD读取时候的采样速率为46000,范围从44100到900。而-a也可以写作--divider,就是表示除数的意思,-l表示对于现在设置的44000的缓冲空间,采用环形缓冲。

提示:

-a divider选择采样率除法器。采样率除法器最小可以是1最大是50.5,每个步调0.5的变化。选项-R列出所有可选采样率。为了让
声卡在低采样率下也能够平滑播放,icedax将n个采样进行相加求和(这里n是指定除数)。所以假如是22050Hz输出,我们要将2个采
样相加,假如是900Hz输出我们要将49个采样相加。这就不需要采用更高频率就可以播放了。一个音频CD的标准扇区尺寸是(不算
另外的信息)2352字节。为了在扇区边缘时候也能够通过这种方法得到好的音质,以上速率要仔细选择。高质量的强制采样率要采
用内插算法,这需要更精细的编程。



Replay Gain 声效插件使用 Replay Gain 处理内核,可以平滑您音乐文件的输出效果。

您在播放数据音频音乐文件时是否发现有些音乐文件声音大而有些却小。Replay Gain
声效插件提供了一个完美的解决方案:它会在第一次播放音乐文件时自动计算各个音乐文件的重新回放增益值,这样在下次播放时就能实现所有文件的输出音量均相同,而且输出效果轻柔平滑。

3.2  输出值量度

3.2.1  按照扇区数读取的输出值量度

在你使用图形界面的CD播放程序的时候,它们通常只能够按轨道读取,但是采用命令行的cdda2wav程序,你除了可以按照轨道读取以外,还可以按照扇区读取,一个扇区读取时间等于1/75秒钟,相关选项的语法如下:

-n sectors --sectors-per-request
每次请求所读扇区数。

-o offset --offset
开始轨道后的偏离扇区取值。


请看例子:

cdda2wav -s -n 45000 -o 375 -eN -D /dev/cdrom

上面例子中,表示在开始扇区的5秒钟(5/(1/75))以后开始读取,读取时间为10分钟(600/(1/75))。这好像有点变态,但是你想想,有时候在前面部分的音乐是我们不喜欢的,或者前面就是无声区域,或者后面部份我们不想听,这个时候就提供一个非常精确的手段用来指定要读取的音乐片段大小,当然在应用这个选项的时候,你也应该用-J选项找出各个轨道的持续时间,然后才好应用这个选项。

3.2.2  按照时间读取的输出值量度

cdda2wav除了能够按照扇区数目量度录制材料大小外,还可以按照录制时间来量度,相关选项是-d,语法为:

-d duration --duration

设置以秒或帧为单位的录音时间,以'f'结尾则表示以帧(扇区)为单位。为0表示全轨录音时间。
在上式中的duration的值就是用来设置录制时间长短,可以用秒或帧为单位。例子如下:

cdda2wav -s -r 44100 -x -d 90000f -D /dev/scd0

上式中的90000f也可以表示为1200s,表示以秒为单位。

3.3  cdda2wav的输出格式及字节编码的问题  

3.3.1  cdda2wav的输出格式

cdda2的输出文件可以是好几种格式,用来表示输出文件格式的选项是-O,语法如下所示:

-O audiotype --output-format

可以是wav波形文件(对于wav),或者是aiff(用于apple/sgi的aiff文件)或者aifc(用于apple/sgi的aifc文件或者au或者sun(用于sun .au PCM文件或者cdr或者raw(用于写入cd的无头文件)。

虽然上面只列出了这些格式,但是假如安装有lame或者oggenc的话。很容易就可以将其转换为mp3或者ogg文件,你也可以将它们转换为无损的flac格式文件,这就需要安装得有flac程序了。

3.3.2  cdda2wav的字节编码

因为cdda2wav是来自于icedax程序包,可以直接用icedax名字替代cdda2wav,采用cdda2wav是因为笔者习惯问题,也是为了兼容以前写的一些脚本,不想花费时间去修改它们。并且icedax是一个GPL软件,它针对不同的处理器架构有不同的实现,这些不同的处理器架构一个很大不同之处是字节编码方式不一样,比如你在IBM的机器上提取的音乐文件拿到Intel架构的机器上就不能够播放,同样,在Appla机器上的拿到SGI的机器上也不能够使用,所以在使用之前,你必须了解你的机器是采用大尾端编码还是小尾端编码,在cdda2wav中也有一个选项用来解决这个问题,这就是-C以及-E选项,语法如下:

设置输入样本的字节编码次序:

-C endianess --cdrom-endianess
设置用以覆盖默认设置的字节编码顺序。endianess可以明确指定为'little'或者'big',或让icedax通过投票算法进行自动设定。

设置输出采样的字节编码次序:

-E endianess
将会覆盖输出格式的默认字节编码顺序。Endianess可以明确指定为'little'或者'big',或者让icedax通过投票算法
进行自动设定。

例子:

cdda2wav -D /dev/cdrom -C little -E big -B

3.4  输出文件以及质量方面的控制

3.4.1  单独拷贝每个轨道的-B选项

在默认情况下,cdda2wav会将所有轨道都拷贝成一个单一的文件,如果你想让cdda2wav将每个轨道都拷贝为单独文件的话,你就得要使用-B这个选项,语法如下:

-B --bulk --alltracks

可以使用上式中的任何一个选项。例子:cdda2wav -x  -B -D /dev/cdrom

3.4.2  去掉预加重的-T选项

-T选项是用来去掉预加重的。有一些老的音乐CD是采用一种经过一种经过修正的频率响应录音的,这种经过修正的频响称为预强调(pre-emphasis)。这种情形多见于交响乐CD录音。在内容表单的标志中可以看到校正设置。但是有一些录音,仅仅在子轨道中发现这种设置。假如指定这个选项,索引扫描器被启动,它将会读取每个轨道的q子轨道(q-subchannel)。假如在一个轨道的q子轨道而不是TOC文件中发现预强调,则假定CD存在预强调,并且随后在这个采样被写进音频数据之前,对这个轨道进行反向过滤。

3.4.3  改变拷贝到声卡的声音数据的音调

-p选项语法如下:

-p percentage --set-pitch

后面的percentage是以100作单位的,小于100减少音调,大于100增加音调。

-p percentage改变声卡播放的音调,仅仅拷贝到声卡的声音受影响,录音样本还是不变的。默认调子是100%。更低的百分比对应更低的调子,比如:-p 50将音调转为更低八度音。参见pitcplay脚本了解关于这个选项的具体例子。这个选项是Raul Sobon贡献来的。

举个例子:cdda2wav -qeNP0 -n40  -t 1 -p 90 -t 2 -p 120 -t 3 -p 80 -t 4 -p 130

上面例子中同时指定了多个轨道分别采用不同的音调,第一轨道用原始音调的90%,后面类推,注意上面例子中出现了一个新的选项-P,它是为了振动矫正而设置的重叠扇区初始化数目。详细情况见下面。-n40表示读取40秒,-N表示不要写到文件,读出就行。

3.4.4  设置CDROM的可读取速度

-S选项用来设置CDROM的可读取速度。语法如下:

-S speed --speed

-S选项允许为减少读取错误而将光驱速度切换到某个等级。其参数被照字面意思传递到光驱。具体情况很大程度上取决于光驱。参数为0代表默认速度,为1代表单倍速。

3.4.5  速度以及质量控制相关选项

在cdda2wav录制过程中,对于速度的选择是很讲究的,如果速度过快,那么结果则不怎么美好。用来控制速度的选项是-S,语法如下:

-S speed --speed

设置CDROM的可读取速度。

例子:cdda2wav -x -D /dev/cdrom -S 8

在cdda2wav读取光盘的时候,还可以选择其它的库文件进行光盘的读写,比如paranoia,语法如下:

-paranoia

用paranoia库替代icedax的自己方式进行读取。

这个选项采用Monty’s libparanoia库进行扇区读取(Use Monty’s libparanoia for reading of sectors)。Monty’s库连同下面默认选项一起使用:没有设置PARANOIA_MODE_NEVERSKIP选项时候的PARANOIA_MODE_FULL选项。

想要了解细节参见Monty’s libparanoia的文档。在这种情况下选项-P无效。

3.4.6  去掉抖动

cdda2wav有一个选项用来为了振动矫正而设置的初始化重叠扇区数目。语法如下:

-P sectors --set-overlap

为了振动矫正而设置的重叠扇区初始化数目。

这个选项-P sectors --set-overlap

为了振动矫正而设置的重叠扇区初始化数目。对扇区进行线性或者交错读写(Do linear or overlapping reading of sectors),(这个选项必须和-paranoia选项一起使用)。 -P sectors设定为校正抖动而进行的交错采样的初始化扇区数。
有两种情况必须分清楚。假如'sectors'为非0值,一些扇区被读取两遍而进行抖动校正。假如'sectors'为0值,不进行交错采样。对于非0值时的交错扇区,icedax在采样时动态地调整设定值(象paranoia一样)。假如没有发现匹配值,icedax将会调高交错值,然后重试。
假如抖动量比当前的交错采样值小的话,icedax减少交错设定值,这样会提高读取速度。参数设定值必须小于每次请求的扇区数(参见下面的-n选项)。
假如过高icedax将检查这个设定值并且发出错误信息。在低负载情况下或者光驱或者光盘有凉的情况
下可以将sectors参数值设为0。

例子:cdda2wav -D /dev/cdrom -P 4 -paranoia -eN

3.4.7  用于gui的前端的简单输出

cdda2wav也可以采用很多图形界面来作为前端,这时候,就需要在命令行的后端cdda2wav命令中采用-g选项,语法如下:

-g --gui

通过一个GUI前端界面将输出格式化为更具有可读性的形式。

-g 这个选项打开行格式化功能,它对于gui前端比如xcd-roast之类的程序是必须的。

例子:cdda2wav -D /dev/cdrom -x -N -g

代表性的部份输出如下:

Album title: '' from ''
T01:       0  5:14.00 audio linear copydenied stereo title '' from ''
T02:   23550  6:01.00 audio linear copydenied stereo title '' from ''
T03:   50625  7:23.00 audio linear copydenied stereo title '' from ''
T04:   83850  5:46.00 audio linear copydenied stereo title '' from ''
T05:  109800  3:29.00 audio linear copydenied stereo title '' from ''
T06:  125475  6:54.00 audio linear copydenied stereo title '' from ''
T07:  156525  6:28.00 audio linear copydenied stereo title '' from ''
T08:  185625 14:50.00 audio linear copydenied stereo title '' from ''
Leadout:  252375
samplefile size will be 176047244 bytes.
recording 998.0000 seconds stereo with 16 bits @ 44100.0 Hz
using lib paranoia for reading.
child pid is 25158

上面输出部份就是这个选项产生的输出。

3.5  光盘信息相关选项

cdda2wav有好几个选项可以用来输出跟光盘相关的信息,其中一个是-J,语法如下:

-J --info-only

不要写到文件,给出碟子信息就行了。

-J 不对文件写入。仅仅打印关于光盘的信息(取决于-v选项)。这仅仅出于想要获得信息的目的。

例子:icedax -D /dev/cdrom -J

跟这个选项相关结果为:

Table of Contents: total tracks:8, (total time 56:05.00)
  1.( 5:14.00),  2.( 6:01.00),  3.( 7:23.00),  4.( 5:46.00),  5.( 3:29.00),
  6.( 6:54.00),  7.( 6:28.00),  8.(14:50.00)

Table of Contents: starting sectors
  1.(       0),  2.(   23550),  3.(   50625),  4.(   83850),  5.(  109800),
  6.(  125475),  7.(  156525),  8.(  185625), lead-out(  252375)

  上面部份表示轨道总数,每个轨道的持续时间等信息,下面部份表示每个轨道的开始扇区数。

还有一个选项-q用来取消显示输出,-V用来打开SCSI命令的日志功能。

3.6  其它选项

除了以上这些选项之外,还有一些无法分类但是确实有用处的选项,下面简单讲解几个。

-w选项

-w 选项将制止所有开始时的沉默输出,减少可能的文件尺寸。icedax将在输出信号中捕捉任何信号,并切换到写文件。

例子:icedax -D /dev/cdrom -w

-M选项

这个选项让icedax计算从轨道开始的'count'位数的MD-5校验和。这样做的主要作用是为了音轨的快速比较。语法如下:

-M count --md5

从轨道开始,计算'count'位的MD-5消息摘要。

其中count表示要计算的MD-5消息摘要的位数。

例子:icedax -D /dev/cdrom -M 10

3.7  用法提示

不要创造你无法阅读的采样。首先检查你的播放软件和声卡。在我采用WAV播放器并利用生霸卡播放采样率很低的采样(立体声 <=
1575 Hz, 单声道 <=3675Hz)事后遇到过问题(也许它们不是合法的WAV格式)。大多数刻录机坚持采用大尾端格式来播放。现在icedax支持-E endianess选项控制刻录样本的字节。

假如你的硬件速度够快,并且你的刻录机也不错,那么当用-P 0选项关闭所有交错采样时你的速度将会提高。想要进一步的调优
则需要采用-n sectors选项。你可以指定一次需要请求多少个扇区。

假如你想一次就采样多个音轨到不同的文件的话,那么可以用选项-B来做到。当录音时间超过轨道限制的话,icedax将会为下一
个轨道打开不同的文件。

后记

这个文本也许过于详细了,面面俱到的讲解了很多东西。其实最常用的选项是:

只用来听音乐:

icedax -D /dev/cdrom -q -eN -B或要听的轨道

只用来榨取:

icedax -D /dev/cdrom -q  -B或者要榨取的轨道

两者都有:

icedax -D /dev/cdrom -q -e -B -x -paranoia -T -P 0

不过你要看到最后才知道。哈哈。

下一章要讲解genisoimage这个大名鼎鼎的光盘烧录命令行程序,虽然现在已经有了象k3b这样的优秀烧录软件,但是如果要做一些象刻录可启动光盘之类的事情,k3b可就无能为力了,请记住,我们是Linux用户,所以不要拿XP说事。

论坛徽章:
0
2 [报告]
发表于 2011-10-12 11:23 |只看该作者
很好的资料,很想看看楼主其他的帖子!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP