软件 包的命令行格式,以及全局选项,输入输出选项的用法,一般常见命
令行选项及参数的用法,下一节将讲述SoX软件包的更精彩部份:SoX效果器,下节再见。
第二节 SoX进阶-SoX效果器
这一节讲解SoX的效果器,也就是SoX里用来搞声音滤波,采样频率转换,和声,混响,移相,调整音
量等等功能的选项,它是SoX里最精彩的部份,正是因为有了它们,SoX才不愧是linux里的瑞士
军刀。从它们在命令行中位置来说,都是处于输出文件的后面,可以只用一个,也可以多个联合使
用。不过,建议还是一个一个的试用,调整好了再联合使用,当然这样对cpu要求就较高。基本上我
们将用SoX软件包的'play'命令通过麦克风或扬声器来听结果,而不是看那些声音文件中的谜一样
的数据。
还有,这里用的是一小段自录声音(3.15分钟长,'wav'格式,44.1 kHz采样速率,16bit单声道)。样
本不应该包含任何特效,然而,假如你从磁带或收音机或CD进行录音,并且它听起来象一场演唱会,或者象十个人在用鼓或其他的东西以同一个调子在演奏,那么用其他样本。(典型样本是:乐器少
于四种,并且无合成器,对于联合的鼓,人声,贝斯或吉他也是如此)。因为只有这样才能感受到效
果器的作用,如果采用的音频文件本身已经有很多特效,那么你是感受不到SoX的效果器的强大的
效果的,废话少说,给个例子:
play 杨望.wav mixer 0.3,0.5,0.8,0.6
上式采用了mixer效果器,它通过混合或者减少音轨从而减少音轨数,或者通过复制音轨而增加音
轨数。上面几个数字的意思是:0.3是从输入声道的左边到输出声道左边的音量值,0.5是从输入声
道的左边到输出声道右边的音量值,0.8是从输入声道的右边到输出声道左边的音量值,0.6是从输
入声道的右边到输出声道右边的音量值。用字母表示是:假设l是左,r是右,b是后面,f是前面,则
对于两声道是:l → l, l → r, r → l,r →r,意思是左-->左,左-->右,右-->左,右-->右。这是两
声道情况,四声道则是:首先四个数字给出左-前输出声道lf → lf, rf → lf,lb → lf,随后是右-前声道rb → lf;lf-->rf,lb-->rf,rf-->rf,rb-->rf;再随后是左-后声道输出 lf-->lb,rf-->lb,
lb-->lb,rb-->lb;再次是右后声道输出lf-->rb,lb-->rb,rf-->rb,rb-->rb。这就是私生到的情
况。所以四声道的数字可达16个之多。
下面例子则应用了tempo(节拍)效果器:
play *.wav tempo -q 0.8 82 20 16
在上面例子中,0.8设置 新节拍相对于老节拍的比率,82设置所选算法要划分音频的片段大小,单位
毫秒,20是音频长度,依靠它来搜索以寻找重叠点,16是重叠长度。
下面给出一个颤动(tremolo)效果器的例子:
play file.wav tremolo 3.5 60
3.5是颤音频率,,单位是赫兹Hz,60是深度百分比,具体来说就是"颤"到多长或深。
在电影中,有一种效果叫淡入淡出,在音乐中也有这种效果:
play file.wav fade t 00:00:100.09
上面例子中,fade是效果器名字,t是声波包络线形式,t是线性斜坡,选q则意味着是正弦波的四
分之一,h表示正弦波一半,l为对数,p为倒置抛物线。默认是线性斜坡。00:00:100.09是以hh:mm:
ss.fraq形式表示的时间,也可用采样数来算,如设为8000s则为8000个样本。
上面是淡入效果,那么要设置淡出效果又怎么办,再看下例:
play *.wav fade t 00:00:50.09 00:01:00 00:00:06
上例中t上面已讲,00:00:50.09是从0开始算起,到淡入结束所花费的时间;00:01:00是开始淡出的
时间点,00:00:06是开始淡出到结束所花费的时间。也就是说,从00:01:00开始淡出,花费6秒即00
:00:06的时间就结束了。上面的时间都可以选择以样本数量为单位,如上所述。
不知道大家有没有这样的感觉,就是有时候在用耳机听cd音乐时,耳朵时间长了会嗡嗡的响,感觉
音乐就象从耳朵扩散到外面一样,那是因为立体声效应,在SoX软件包内,有一过效果器可以消除这
种现象,它就是earwax,举个例子:
play file.mp3 earwax
就是这样简单,就可以消除立体声效应了。
有时候采样次寸小于24字节的话,会发生可听到的量化效应,应用dither(高频颤动)效果器可消除
这种现象,它实际是故意地在信号里加入白噪声,举例如下:
play file.wav dither 100
上式中100是抖动深度(depth)值。
在自然界中,回声处处可见,比如站在高山上,向周围的山喊话,就会引起回声,在喊和回声之间的
时间间隔就是延迟,它的响度就是衰减值,下面给出一个回响例子:
play file.xxx echo 0.8 0.88 60 0.4
上式听起来就象用两个乐器演奏同一个样本一样,0.8是输入音量,0.88是输出音量,60是延迟,单
位是毫秒,0.4是相对于输入音量的衰减值。
如果延迟时间变长,听起来更象在山顶上的露天演唱会:
play file.wav echo 0.8 0.88 1000 0.4
衰减值最好不要大于0.5,否则可能引起输出饱和。
假如延迟很短,听起来象(金属的)机器人的表演。
play file.wav 0.8 0.88 6 0.4
想要更多回响也可以实现:
play file.wav echo 0.8 0.9 1000 0.3 1800 0.25
如果是站在群山之间,还可能会引起连续回响,即回响本身有碰到邻近山峰,反弹回来,又弹回去,
这种效果就是回声,它是连续回响的意思,如果是单独应用一次回声,效果和回响是一样的,下面看
一个两次回声例子:
play file.wav echos 0.8 0.7 700 0.25 700 0.3
在上式中,echos就是回声效果器,应用这个效果器,回响将被弹回来两次,因为两次延迟时间相同,
都是700,这种回响叫对称回声,来一个不对称的回声:
play file.xxx echos 0.8 0.7 700 0.25 900 0.3
下面这个例子听起来就象在汽车里演奏一样:
play file.wav echos 0.8 0.7 40 0.25 63 0.3
上式由于延迟时间短,听起来感觉有点沉闷,不是吗?
在乐理中有和声这样一种效果,它指的是两个以上不同的音按一定的法则同时发声而构成的音响
组合。它包含:①和弦,是和声的基本素材,由3个或3个以上不同的音,根据三度叠置或其他方法
同时结合构成,这是和声的纵向结构。②和声进行,指各和弦的先后连接,这是和声的横向运动
。补充一句。和声有明显的浓,淡,厚,薄的色彩作用;还有构成分句,分乐段和终止乐曲的作
用。SoX中也有这样一种和声效果效果器,名字叫chorus,就是英文和声的意思,它工作起来就象
'echo'一样',有一短的延迟。但是延迟不连续.延迟变化用正弦或者三角函数调制过。调制深度
定义了延迟之前或之后的调制范围。因而延迟过的声音听起来忽快忽慢,这就是对原始文件得延
迟声音进行过调制,在和声里听起来人的声音好像有点变调,看下例:
play file.wav chorus 0.7 0.9 55 0.4 0.25 2 -t
上式中,55是延迟,0.4是衰减,0.25是调制速度,单位Hz,2是调制深度,典型的延迟在40毫秒(40ms)
到60毫秒(60ms),调制速度最好在0.25Hz附近,调制深度2毫秒左右(2ms)。-t使用三角函数调制,
上式延迟时间有点短,输出有点过载。再看一个两部和声例子:
play 杨望.wav chorus 0.6 0.9 50 0.4 0.25 2 -t 60 0.32 0.4 1.3 -s
上式中采用了-s,表示正弦波调制。
下面例子采用了三部和声:
play file.xxx chorus 0.5 0.9 50 0.4 0.25 2 -t 60 0.32 0.4 2.3 -t 40 0.3 0.3 1.3 -s
在看恐怖电影时,人在和鬼魂遇到之前,往往会放一些音乐来渲染一下,在SoX中也有类似的效果器
叫flanger,意思是翻边,或者回吹的意思。它将对等的两个声音混合在一起,但是其中一个时间上
有些延迟,并随着时间不断变化,但是变化小于20ms.听起来就象风吹过,速度变得忽快忽慢。fla-
nger广泛用在恐怖和灵魂音乐中,那样吉他频率听起来时快时慢。先看一个简单的例子:
play 杨望.wav flanger
仔细听经过正弦和三角波调制过得声音之间的不同:
默认正弦波调制,再仔细听经过正弦和三角波调制过得声音之间的不同:
play 杨望.wav flanger triangle
再来一个采用平方内插法的:
play 杨望.wav flanger quadratic
下面给出一个采用不同扫描波形状和不同内插法的例子:
play 杨望.wav flanger quadratic flanger lin flanger sine flanger triangle
最后给出一个全部参数的,并且对每一个参数给出解释:
play 杨望.wav flanger 8 5 90 90 8 triangle 80 quadratic
上式中,8代表基本延迟,范围在0 - 10之间,默认是0(单位毫秒ms).5代表附加扫描延迟,范围在0
- 10之间,默认是2(单位毫秒ms).90是再生百分率即是延迟信号反馈的百分率,范围在-95 - 95
之间,默认是0。第二个90是延迟信号和原始信号混合的百分比,范围在0-100之间,默认是71。8是
扫描频率,范围在0.1-10之间,默认是0.5。triangle采用三角波调制,可选sin即正弦波调制。80
是扫描波相位移动百分比,0 = 100 = 对每个频道同样相位,范围在0 - 100,默认是25。quadrat-ic平方内插法,可选线性内插法lin。实际当中用不着指定这么多参数,很多默认的。但是有特别
需要另当別论。
下面简单介绍另外一个效果器,余响reverb。余响(reverb)效果经常用在小演奏厅,那种场合人很
多,对声音反射到墙上形成干扰。reverb使得声音感觉就象在一个大演奏厅似的。你可以在浴室
或车上或健身馆里大喊一些话语,体验一下余响效果,你将听到话从墙上反射回来,举例如下:
play 杨望.wav reverb 1 600 180
上式中,1是输出音量,600是余响时间,180是延迟时间,延迟时间最好是余响时间的1/4到1/2。上
面只考虑了一面墙的情形,如果还要考虑在多加一面墙,上式应为:play 杨望.wav reverb 1 600
180 200。以此类推。
在音乐处理过程中,经常要对声音进行移相处理,此时可用SoX中的phaser效果器进行处理,phaser
效果器就象flanger特效,但是用reverb替换echo,并做相序迁移。它支持多种乐器。看下例:
play file.wav phaser 0.8 0.74 3 0.4 0.5 -t
3是延迟时间,它必须小于5ms,0.4是衰减值,推荐小于0.5,0.5是扫描频率,必须小于2Hz,-t采用
三角调制,如果要采用正弦函数调制用-s。再听下面例子有什么不一样:
再听下面例子有什么不一样,看有什么在耳朵里弹跳:
play 杨望.wav phaser 0.6 0.66 3 0.6 2 -t
如果调制普通的声音则如下:
play file.wav phaser 0.89 0.85 1 0.24 2 -t
假如你要重复播放音频,那么可以通过repeat来干这事:
play file.wav repeat 2
表示重复播放音频两次,为0表示无限次。
在生活中,人们经常会在车上,或者公共场合用耳机听音乐,有时候听到低音段的时候,会把音量开
得比较大,以便压过周围噪音,但是猛然间到了音高的地方,声音会忽然变大,大得耳朵受不了。特
别是听交响乐的时候。有没有什么办法让它在低音部分不要那样小声,而在高音部分不要那样刺
耳呢?这就是缩展器的作用了。压缩-扩展器允许信号动态地压缩或扩展。按照给定得起音和衰减
参数,计算输入信号相对于时间的平均值,并按照给定的转换函数(功能)参数,设置输出信号的等
级。SoX的效果器中有个名叫compand的缩展器可用来干这事,看下例:
sox asz.flac asz-car.flac compand 0.3,1 6:-70,-60,-20 -5 -90 0.2
在上式中,compand是效果器名称,0.3是起音时间(指的是生因忽然变大的时间),1是衰减时间,起
音时间应该比衰减时间短,因为我们的耳朵对忽然变大的声音比对忽然柔和哦的声音更敏感。
6:-70是缩展器转换函数表,单位是dB,它跟音频信号的最大幅值有关联,它的意思是很柔软的声音
(-70dB以下)仍然保留不变,这将防止缩展器在在乐章转换时从静默忽然飙升音量。但是在-60dB
到0dB(最大音量)的声音将被提高,原始音频60dB的动态范围将被压缩成20dB,这样频宽足以享受
音乐同时有可以不受路上噪音的影响。这就是-60和-20的意思。-5是额外增益,用来避免削波,
-90表示初始化音量从几乎静默开始,这样对于削波现象将有很好的抑制作用。0.2秒是的延迟使
得缩展器对于声音的忽然升高有很好的抑制作用。
为了让转换函数的功能可视化,可用--plot选项调用SoX。例如:
sox --plot gnuplot *.wav -n compand 0,0 6:-70,-60,-20 -5 -90 0.2 > my.plt
再用gnuplot my.plt命令来查看它。
面的长长的命令显示在FM调频收音机中,怎样建立多波段缩展:
play file.xxx vol -3dB filter 8000- 32 100 mcompand \
"0.005,0.1 -47,-40,-34,-34,-17,-33" 100 \
"0.003,0.05 -47,-40,-34,-34,-17,-33" 400 \
"0.000625,0.0125 -47,-40,-34,-34,-15,-33" 1600 \
"0.0001,0.025 -47,-40,-34,-34,-31,-31,-0,-30" 6400 \
"0,0.025 -38,-31,-28,-28,-0,-25" \
vol 15dB highpass 22 highpass 22 filter -17500 256 \
vol 9dB lowpass -1 17801
filter后面8000-和-17500代表低过滤,32代表高过滤,100和256代表窗口长度。filter表示Sinc
滤波器,它全部除去给定带宽之上的信号分量而只保留低频信号的理想电子滤波器。filter后面
的8000-表示低频,32表示高频,后面的filter类似,100是过滤窗口长度,highpass后面的数字是过
滤频率。
在实际工作中,有时需要改变声音的回放速率,但是同时维持它的音调,以取得某种戏剧性效果,可以通过stretch效果器做到,例如,要将回放速率改为原先的2倍:
play file.wav stretch 2
另外一个类似的效果器是speed,它用来改变回放调子和节拍。如:
play file.wav speed 2
而为了升高样本1个短调(100音分),可以这样做:
play file.wav pitch 100