sox使用要点.docx
《sox使用要点.docx》由会员分享,可在线阅读,更多相关《sox使用要点.docx(13页珍藏版)》请在冰豆网上搜索。
![sox使用要点.docx](https://file1.bdocx.com/fileroot1/2022-10/1/2f224b2a-1783-46c3-bbad-3a4deae215ed/2f224b2a-1783-46c3-bbad-3a4deae215ed1.gif)
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进行录音,并且它听起来象一场演唱会,或者象十个人在用鼓或其他的东西以同一个调子在演奏,那么用其他样本。
(典型样本是:
乐器少
于四种