sox使用.docx
- 文档编号:15859431
- 上传时间:2023-07-08
- 格式:DOCX
- 页数:15
- 大小:26.29KB
sox使用.docx
《sox使用.docx》由会员分享,可在线阅读,更多相关《sox使用.docx(15页珍藏版)》请在冰点文库上搜索。
sox使用
SoX-linux里操作音频的瑞士军刀
Sox是最为著名的OpenSource声音文件格式转换工具。
已经被广泛移植到Dos、windows、OS2、S
un、Next、Unix、Linux等多个操作系统平台。
Sox项目是由LanceNorskog创立的,后来被众多的开发者逐步完善,现在已经能够支持很多种声
音文件格式和声音处理效果。
基本上常见的声音格式都能够支持。
更加有用的是,Sox能够进行
声音滤波、采样频率转换,这对那些从事声讯平台开发或维护的朋友非常有用。
当然,Sox里面
也包括一些DSP算法,有兴趣的朋友可以下载回去研究。
Sox可以用于任何用途。
但是发布源代码
时必须包括版权声明,发布二进制代码必须声明作者。
首先来一个简单的命令,如下:
soxfile1.wav-v0.6file2.wav
-v是调整音量的选项,0.6是参数,它是一种线性调整,并不是调整到原先的0.6,而是幅值调整,fi
-le2.wav是输出文件。
如果-v后面的数字比1大,则增加音量,反之则减少音量,如果是负数那么
在调整的同时还对音频进行反相变换,但也不是可以任意增加的,取值太大容易产生削波现象。
要
取什么只好呢?
键入下列命令:
soxfile1.wav-nstat-v
命令输出结果如下"
1.003
这就得出不失真最大调整量了。
上面的stat为效果器,作用是对音频文件做一个统计分析,并将结
果打印到标准错误文件,选项"-v"将打印跟音量调整有关的以"VolumeAdjustment:
’字样开始的
哪一行。
至于-n表示输出文件为空。
这样在不干扰音频文件的情况下可得到文件信息。
sox的语法格式如下所示:
sox全局参数格式化参数输入文件1格式化参数输入文件2...格式化参数输出文
件效果器
首先全局参数在最前面,每个输入文件都有相应的格式化参数,可以有多个输入文件,在来一个输
出文件,前面再加上格式化参数,最后是效果器。
这到后面再说。
上面的语法格式很间洁,应该很容易明白。
在用SoX输出一个文件之前,用SoX附带的play命令先听一下效果是个不错的想法。
下面让我们做另外一件事,切掉音频文件。
假如我们有一个文件,开头有10秒钟左右我们不想要,
那么我们可以这样做,首先看文件有多长:
sox杨望.wav-nstat
得到下面输出信息:
Samplesread:
20889600
Length(seconds):
236.843537
Scaledby:
2147483647.0
Maximumamplitude:
0.996857
Minimumamplitude:
-0.993195
Midlineamplitude:
0.001831
Meannorm:
0.084509
Meanamplitude:
-0.000000
RMSamplitude:
0.119258
Maximumdelta:
0.729645
Minimumdelta:
0.000000
Meandelta:
0.058931
RMSdelta:
0.080600
Roughfrequency:
4743
Volumeadjustment:
1.003
我们现在关心的是"Length(seconds):
236.843537"这一行,它说明了这文件是236.843537秒长,
约等于237秒吧。
再键入下列命令:
sox杨望.wav杨望1.wavtrim010
上面的命令说明了从文件开始截取10秒钟的文件,输出名字是杨望1.wav,0是文件开始,10是时间
概念,表示时长,而非文件长度。
再调用SoX的play命令用耳麦听一下,确认了杨望1.wav就是要去
掉的长度以后,就可以开始截取操作了:
rm-rfv杨望1.wav
sox杨望.wav杨望1.wavtrim10227
输出文件杨望1.wav就是我们想得到的文件。
上面的227是最终文件时间长度,等于237减去10。
SoX能够执行常见大多数音频格式转换,如:
sox杨望.wavsox杨望.mp3
在安装了mp3lame或libmad库支持以后,能将wav格式转为mp3格式。
下面谈谈文件的联和,假如不指定特别的参数,例如:
soxfile1.mp3file2.mp3file3.mp3
象上式那样,将file1.mp3,file2.mp3按照次序连接在一起,输出文件是file3.mp3,对于SoX附带的"play"命令来说,假如不指定特别的参数,操作方法基本相同,如playfile1.mp3file2.mp3,它
门按照文件排列顺序播放,SoX的rec命令也是和sox情况一样。
但是假如象下面这样:
sox-mfile1.mp3file2.mp3file3.mp3
file1.mp3和file2.mp3被混合重叠在一起,音轨数目不需要一样。
输出文件可能减少音轨,输出文
件是不可逆的。
例外需要重提一下,采用sequence或merge来联和文件时,输入文件的样本速率必须一样,否则联合
不起来。
例如,采用merge联合两个文件:
sox-Mtest.wav杨望.wavtest1.wav
得结果:
soxsox:
Inputfilesmusthavethesamesample-rate
实际上,-M参数主要用来将几个声道混合成一个联合声道,例如将两个单声道混合成立体声道。
在混合之前,需要将采样率调整成一样。
如果想了解文件的的头部信息而又不想看到一大堆的信息,可以用-V和-n联合,如:
sox-V*.wav-n
InputFile:
'杨望.wav'
SampleSize:
16-bit(2bytes)
SampleEncoding:
signed(2'scomplement)
Channels:
2
SampleRate:
44100
Duration:
03:
56.84=10444800samples=17763.3CDDAsectors
EndianType:
little
ReverseNibbles:
no
ReverseBits:
no
就会打印出本目录下所有wav文件的头部信息。
如果想调整文件的样本速率,可键入:
soxfile1.wav-r想调整的样本速率值file2.wav,比如想将样本速率值设为48000Hz,则可如下键入:
soxfile1.wav-r48000file2.wav
有个选项特别有用,它是"--interactive",如果你的输出文件跟已有文件同名,它会提示你是否覆
盖,如果无此选项,SoX会强制覆盖同名文件,因此,利用一个'shell'符号链接或是批处理文件永久
启用它是最好的。
有些效果器的转换函数支持绘制数学转换图表,可通过全局选项"--plot"来办到,"--plot"后面跟
随转换函数想调用的绘图程序,可用gnuplot或octave两个。
例如:
sox--plotoctave杨望.wav-nlowpass1320>plot.m
命令octaveplot.m可看到效果器转换函数表。
有时候输出文件的声音听起来有些不太舒服,此时可用"--replay-gain"对输入文件应用重放增益
调整,后面跟track对声道进行调整,跟album对专辑进行调整,跟off关闭。
假如你有一个文件,它是单声道的,你想将它转成立体声,那么键入下例:
soxfile1.wav-c2file2.wav
其中-c就是声道转换选项,-c
2又可写成-c2,同样道理,-c1表示单声道,-c4表示4声道。
将声道转换和采样率调整,音量调整,打
印细节结合起来则得到如下:
sox-V4-v1.2file1.wav-r48000-c2file2.wav其中-V4表示打印最多细节。
经常会发生这样的情况,有时候得到一个音频文件,但是文件扩展名非标准或文件头部看不出是什
么类型,这时候就要为他指定文件类型了,怎么指定呢?
用-t选项,如:
sox-v1.0-Vfile1-twav-r44100-c2file2.wav
键入man7soxformat可以查看支持文件类型的列表。
下面再举几个例子,下例应用了抖动效果器:
soxrecital.au-r12000-1-c1recital.wavvol0.7dither4
上例中,将Sun的AU格式转为微软的WAV波形文件,-1表示采用1字节编码,-2,-3-4,-8类推,-c1
表示单声道,vol0.7表示音量效果器,此处取音量为0.7,dither是抖动效果器,4是抖动深度。
sox-r8000-u-1-c1file1.rawfile2.wav
上式给生的格式音频文件指定采样速率8000,采用u-law(u律)编码,单声到(-c1),并给输出文件
加入头部信息。
soxfile1.wavfile2.wavspeed1.29
增加到原来速度的1.299(音调节拍一起来)。
在试试下面两个的不同效果:
playfile.wavbass-20跟playfile.wavbass+20
上式bass是给输出结果加上低音效果,-20是低限值,+20是高限值。
值愈低,声音愈低,反之则值愈
高,声音愈浑厚。
上面讲了很多SoX的附带程序sox的用法,其实,SoX附带的程序还有rec,play两个程序,具体来讲,
rec是用来录音的,play则是用来试听效果的,它们的语法跟sox是类似的,只是rec的输入源变成了
内部或外部的设备。
两者语法如下:
play全局参数格式化参数输入文件1格式化参数输入文件...格式化参数输出文件效果
器特效参数...
rec全局参数格式化参数输出文件效果器特效参数
关于play得用法在效果器一节中会讲到,现举个例子说明rec的用法:
recfile.wav
如果要详细点:
rec-r44100-4-u-c2-tmp3test.mp3
上面通过举例,讲解了SoX软件包的命令行格式,以及全局选项,输入输出选项的用法,一般常见命
令行选项及参数的用法,下一节将讲述SoX软件包的更精彩部份:
SoX效果器,下节再见。
第二节SoX进阶-SoX效果器
这一节讲解SoX的效果器,也就是SoX里用来搞声音滤波,采样频率转换,和声,混响,移相,调整音
量等等功能的选项,它是SoX里最精彩的部份,正是因为有了它们,SoX才不愧是linux里的瑞士
军刀。
从它们在命令行中位置来说,都是处于输出文件的后面,可以只用一个,也可以多个联合使
用。
不过,建议还是一个一个的试用,调整好了再联合使用,当然这样对cpu要求就较高。
基本上我
们将用SoX软件包的'play'命令通过麦克风或扬声器来听结果,而不是看那些声音文件中的谜一样
的数据。
还有,这里用的是一小段自录声音(3.15分钟长,'wav'格式,44.1kHz采样速率,16bit单声道)。
样
本不应该包含任何特效,然而,假如你从磁带或收音机或CD进行录音,并且它听起来象一场演唱会,或者象十个人在用鼓或其他的东西以同一个调子在演奏,那么用其他样本。
(典型样本是:
乐器少
于四种,并且无合成器,对于联合的鼓,人声,贝斯或吉他也是如此)。
因为只有这样才能感受到效
果器的作用,如果采用的音频文件本身已经有很多特效,那么你是感受不到SoX的效果器的强大的
效果的,废话少说,给个例子:
play杨望.wavmixer0.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*.wavtempo-q0.8822016
在上面例子中,0.8设置新节拍相对于老节拍的比率,82设置所选算法要划分音频的片段大小,单位
毫秒,20是音频长度,依靠它来搜索以寻找重叠点,16是重叠长度。
下面给出一个颤动(tremolo)效果器的例子:
playfile.wavtremolo3.560
3.5是颤音频率,,单位是赫兹Hz,60是深度百分比,具体来说就是"颤"到多长或深。
在电影中,有一种效果叫淡入淡出,在音乐中也有这种效果:
playfile.wavfadet00:
00:
100.09
上面例子中,fade是效果器名字,t是声波包络线形式,t是线性斜坡,选q则意味着是正弦波的四
分之一,h表示正弦波一半,l为对数,p为倒置抛物线。
默认是线性斜坡。
00:
00:
100.09是以hh:
mm:
ss.fraq形式表示的时间,也可用采样数来算,如设为8000s则为8000个样本。
上面是淡入效果,那么要设置淡出效果又怎么办,再看下例:
play*.wavfadet00:
00:
50.0900:
01:
0000:
00:
06
上例中t上面已讲,00:
00:
50.09是从0开始算起,到淡入结束所花费的时间;00:
01:
00是开始淡出的
时间点,00:
00:
06是开始淡出到结束所花费的时间。
也就是说,从00:
01:
00开始淡出,花费6秒即00
:
00:
06的时间就结束了。
上面的时间都可以选择以样本数量为单位,如上所述。
不知道大家有没有这样的感觉,就是有时候在用耳机听cd音乐时,耳朵时间长了会嗡嗡的响,感觉
音乐就象从耳朵扩散到外面一样,那是因为立体声效应,在SoX软件包内,有一过效果器可以消除这
种现象,它就是earwax,举个例子:
playfile.mp3earwax
就是这样简单,就可以消除立体声效应了。
有时候采样次寸小于24字节的话,会发生可听到的量化效应,应用dither(高频颤动)效果器可消除
这种现象,它实际是故意地在信号里加入白噪声,举例如下:
playfile.wavdither100
上式中100是抖动深度(depth)值。
在自然界中,回声处处可见,比如站在高山上,向周围的山喊话,就会引起回声,在喊和回声之间的
时间间隔就是延迟,它的响度就是衰减值,下面给出一个回响例子:
playfile.xxxecho0.80.88600.4
上式听起来就象用两个乐器演奏同一个样本一样,0.8是输入音量,0.88是输出音量,60是延迟,单
位是毫秒,0.4是相对于输入音量的衰减值。
如果延迟时间变长,听起来更象在山顶上的露天演唱会:
playfile.wavecho0.80.8810000.4
衰减值最好不要大于0.5,否则可能引起输出饱和。
假如延迟很短,听起来象(金属的)机器人的表演。
playfile.wav0.80.8860.4
想要更多回响也可以实现:
playfile.wavecho0.80.910000.318000.25
如果是站在群山之间,还可能会引起连续回响,即回响本身有碰到邻近山峰,反弹回来,又弹回去,
这种效果就是回声,它是连续回响的意思,如果是单独应用一次回声,效果和回响是一样的,下面看
一个两次回声例子:
playfile.wavechos0.80.77000.257000.3
在上式中,echos就是回声效果器,应用这个效果器,回响将被弹回来两次,因为两次延迟时间相同,
都是700,这种回响叫对称回声,来一个不对称的回声:
playfile.xxxechos0.80.77000.259000.3
下面这个例子听起来就象在汽车里演奏一样:
playfile.wavechos0.80.7400.25630.3
上式由于延迟时间短,听起来感觉有点沉闷,不是吗?
在乐理中有和声这样一种效果,它指的是两个以上不同的音按一定的法则同时发声而构成的音响
组合。
它包含:
①和弦,是和声的基本素材,由3个或3个以上不同的音,根据三度叠置或其他方法
同时结合构成,这是和声的纵向结构。
②和声进行,指各和弦的先后连接,这是和声的横向运动
。
补充一句。
和声有明显的浓,淡,厚,薄的色彩作用;还有构成分句,分乐段和终止乐曲的作
用。
SoX中也有这样一种和声效果效果器,名字叫chorus,就是英文和声的意思,它工作起来就象
'echo'一样',有一短的延迟。
但是延迟不连续.延迟变化用正弦或者三角函数调制过。
调制深度
定义了延迟之前或之后的调制范围。
因而延迟过的声音听起来忽快忽慢,这就是对原始文件得延
迟声音进行过调制,在和声里听起来人的声音好像有点变调,看下例:
playfile.wavchorus0.70.9550.40.252-t
上式中,55是延迟,0.4是衰减,0.25是调制速度,单位Hz,2是调制深度,典型的延迟在40毫秒(40ms)
到60毫秒(60ms),调制速度最好在0.25Hz附近,调制深度2毫秒左右(2ms)。
-t使用三角函数调制,
上式延迟时间有点短,输出有点过载。
再看一个两部和声例子:
play杨望.wavchorus0.60.9500.40.252-t600.320.41.3-s
上式中采用了-s,表示正弦波调制。
下面例子采用了三部和声:
playfile.xxxchorus0.50.9500.40.252-t600.320.42.3-t400.30.31.3-s
在看恐怖电影时,人在和鬼魂遇到之前,往往会放一些音乐来渲染一下,在SoX中也有类似的效果器
叫flanger,意思是翻边,或者回吹的意思。
它将对等的两个声音混合在一起,但是其中一个时间上
有些延迟,并随着时间不断变化,但是变化小于20ms.听起来就象风吹过,速度变得忽快忽慢。
fla-
nger广泛用在恐怖和灵魂音乐中,那样吉他频率听起来时快时慢。
先看一个简单的例子:
play杨望.wavflanger
仔细听经过正弦和三角波调制过得声音之间的不同:
默认正弦波调制,再仔细听经过正弦和三角波调制过得声音之间的不同:
play杨望.wavflangertriangle
再来一个采用平方内插法的:
play杨望.wavflangerquadratic
下面给出一个采用不同扫描波形状和不同内插法的例子:
play杨望.wavflangerquadraticflangerlinflangersineflangertriangle
最后给出一个全部参数的,并且对每一个参数给出解释:
play杨望.wavflanger8590908triangle80quadratic
上式中,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杨望.wavreverb1600180
上式中,1是输出音量,600是余响时间,180是延迟时间,延迟时间最好是余响时间的1/4到1/2。
上
面只考虑了一面墙的情形,如果还要考虑在多加一面墙,上式应为:
play杨望.wavreverb1600
180200。
以此类推。
在音乐处理过程中,经常要对声音进行移相处理,此时可用SoX中的phaser效果器进行处理,phaser
效果器就象flanger特效,但是用reverb替换echo,并做相序迁移。
它支持多种乐器。
看下例:
playfile.wavphaser0.80.7430.40.5-t
3是延迟时间,它必须小于5ms,0.4是衰减值,推荐小于0.5,0.5是扫描频率,必须小于2Hz,-t采用
三角调制,如果要采用正弦函数调制用-s。
再听下面例子有什么不一样:
再听下面例子有什么不一样,看有什么在耳朵里弹跳:
play杨望.wavphaser0.60.6630.62-t
如果调制普通的声音则如下:
playfile.wavphaser0.890.8510.242-t
假如你要重复播放音频,那么可以通过repeat来干这事:
playfile.wavrepeat2
表示重复播放音频两次,为0表示无限次。
在生活中,人们经常会在车上,或者公共场合用耳机听音乐,有时候听到低音段的时候,会把音量开
得比较大,以便压过周围噪音,但是猛然间到了音高的地方,声音会忽然变大,大得耳朵受不了。
特
别是听交响乐的时候。
有没有什么办法让它在低音部分不要那样小声,而在高音部分不要那样刺
耳呢?
这就是缩展器的作用了。
压缩-扩展器允许信号动态地压缩或扩展。
按照给定得起音和衰减
参数,计算输入信号相对于时间的平均值,并按照给定的转换函数(功能)参数,设置输出信号的等
级。
SoX
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- sox 使用
![提示](https://static.bingdoc.com/images/bang_tan.gif)