Linux对⾳频万能处理的命令——SOX
what's the SOX
(即 Sound eXchange)是⼀个跨平台(Windows,Linux,MacOS 等)的命令⾏实⽤程序,可以将各种格式的⾳频⽂件转换为需要的其他格式。SoX 还可以对输⼊的⾳频⽂件应⽤各种效果,也⽀持在⼤多数平台上播放和录制⾳频⽂件。
Windows下载链接:
SoX 可以读取和写⼊常见格式的⾳频⽂件,并在此过程中选择性的加⼊⼀些声⾳效果。可以组合多个输⼊源及合成⾳效,在许多系统上也可以作为⾳频播放器或多轨录⾳机使⽤。
SoX ⼯具在⼤部分 Linux 系统上都可以直接通过软件包管理器安装
sudo apt-get install sox # Linux
brew install sox # Mac 系统
SoX 处理⾳频的基本流程如下:
Input(s) -> Combiner -> Effects -> Output(s)
SoX ⼯具的所有功能都可以通过⼀命令及相应的选项实现。它同时提供了 play 命令⽤于播放⾳频⽂件,rec 命令⽤于录制⾳频,以及 soxi 命令⽤于获取⾳频的⽂件头中包含的信息。
上述⼏个命令的基本格式如下:
SYNOPSIS
sox [global-options] [format-options] infile1
[[format-options] infile2] ... [format-options] outfile
[effect [effect-options]] ...
play [global-options] [format-options] infile1
[[format-options] infile2] ... [format-options]
凤凰台上
[effect [effect-options]] ...
rec [global-options] [format-options] outfile
[effect [effect-options]] ...
soxi [-V[level]] [-T] [-t|-r|-c|-s|-d|-D|-b|-B|-p|-e|-a] infile1 ...
基本使⽤
⼀、获取⾳频元数据
soxi 或 sox --i 命令可以通过分析⾳频⽂件的⽂件头,获取其元数据(如通道数、采样率、编码等)。
soxi Faded.wav
'''
Input File : 'Faded.wav'
Channels : 2
Sample Rate : 44100
Precision : 16-bit
Duration : 00:03:32.63 = 9376836 samples = 15947 CDDA ctors
File Size : 37.5M
Bit Rate : 1.41M
Sample Encoding: 16-bit Signed Integer PCM
'''
soxi 命令⽀持的所有选项及其含义如下:
soxi
Usage: soxi [-V[level]] [-T] [-t|-r|-c|-s|-d|-D|-b|-B|-p|-e|-a] infile1 '''
-t Show detected file-type
-r Show sample-rate
-c Show number of channels
-
s Show number of samples (0 if unavailable)
-d Show duration in hours, minutes and conds (0 if unavailable)
-D Show duration in conds (0 if unavailable)
-b Show number of bits per sample (0 if not applicable)
-B Show the bitrate averaged over the whole file (0 if unavailable)
-p Show estimated sample precision in bits
-e Show the name of the audio encoding
-a Show file comments (annotations) if available
With no options, as much information as is available is shown for
each given file.
'''
soxi 命令跟上某个特定的选项可以只获取该选项对应的信息,如只显⽰某⾳频⽂件 Faded.wav 的⽐特率(Bit Rate):
soxi -B Faded.wav # 1.41M
⼆、获取⾳频的统计信息
使⽤ sox <inputfile> -n stat 命令获取某⾳频⽂件的统计信息。⽰例如下:
sox Faded.wav -n stat
'''
Samples read: 18753672
Length (conds): 212.626667
Scaled by: 2147483647.0
Maximum amplitude: 0.977417
Minimum amplitude: -0.977478
Midline amplitude: -0.000031
Mean norm: 0.229415
Mean amplitude: -0.000006
RMS amplitude: 0.302594
Maximum delta: 1.765564
Minimum delta: 0.000000
Mean delta: 0.202369
RMS delta: 0.273320
Rough frequency: 6339
Volume adjustment: 1.023
'''
View Code
三、播放与录制
play 和 rec 命令提供了最基本的播放和录制功能。
play existing-file.wav # 播放
rec new-file.wav # 录制
# 上述命令等同于 sox 命令的如下形式:
一件让我难忘的事
sox existing-file.wav −d # 播放
sox −d new-file.wav # 录制
# -d 选项⽤于指定播放或录制时使⽤的⾳频设备,不指定时则表⽰使⽤默认设备。
播放指定⽚段
安徽皖南
# 播放 foo.wav ⽂件中 10-15s 之间的⾳频⽚段
play foo.wav trim 10.0 5.0
# play foo.wav trim 10.0 =15.0
四、⾳频格式转换
⾳频数据主要有5个属性
采样率(sample rate):指声⾳由模拟信号转换成数字信号的过程中,每秒从连续信号中提取的⽤于组成离散信号的样本个数。⾳频CD所⽤的采样率为 44100 Hz,数字⾳频磁带和许多计算机系统使⽤ 48000 Hz,专业级⾳频系统通常使⽤ 96000 Hz。
采样⼤⼩(sample size 或 Precision):⾳频采样时⽤于存储每个样本的数据位数(bits)。如今 16 bit 的采样⼤⼩已被⼴泛使⽤,24 bit 主要⽤于专业⾳频领域。
编码格式(data encoding):即每个⾳频样本的表⽰(即“编码”)⽅式。常⽤的编码类型包括 floating-point、µ-law、ADPCM、singed-integer PCM、MP3 和 FLAC 等。
通道(channel):即⽂件中包含的⾳频通道的数量。其中单声道(mono)和双声道(stereo)是最常见的两种,“环绕声”⾳频(Surround sound)通常包含六个或更多声道。
⽐特率(Bit Rate):表⽰⼀个单位时间内编码⾳频信号占⽤的存储空间⼤⼩,它的数值⼀般取决于所有的上述四个参数。
SoX 可以处理 lf-describing 和 raw 格式的⾳频⽂件。 lf-describing 格式(如 WAV、FLAC、MP3)的⽂件包含⼀个⽤于描述信号和编码属性的⽂件头,⽽ raw 或 headless 格式的⾳频则不包含这些信息。所以当 raw 格式的⾳频作为输⼊⽂件时,需要在 sox 命令的格式暧昧的话
选项⾥指定其信号和编码属性。
常⽤的⾳频格式选项:
选项描述
-b, --bits BITS每个编码样本占⽤的数据位数
-c, --channels CHANNELS⾳频⽂件包含的通道数
-e, --encoding ENCODING⾳频⽂件的编码类型
-r, --rate RATE⾳频⽂件的采样率
-t, --type FILE-TYPE⾳频⽂件的⽂件类型
sox Faded.wav Faded.mp3 # 将wav⽂件转换成mp3
# 将 Faded.wav ⽂件转换成单声道后输出
sox Faded.wav -c 1 Faded-mono.wav
>sox −r 48k −e float −b 32 −c 2 input.raw output.wav
⾳频效果
SoX ⼯具可以在⾳频处理的过程中,对输⼊的⾳频数据应⽤众多的效果。
可以使⽤如下命令查看所有效果的帮助信息:
熟练的近义词
sox --help-effect all | less
'''
sox: SoX v
Effect usage:
allpass frequency width[h|k|q|o]
band [-n] center [width[h|k|q|o]]
bandpass [-c] frequency width[h|k|q|o]
bandreject frequency width[h|k|q|o]
bass gain [frequency(100) [width[s|h|k|q|o]](0.5s)]
bend [-f frame-rate(25)] [-o over-sample(16)] {start,cents,end}
四支声律启蒙
:
'''
# 也可以直接查看具体某个⾳频效果的使⽤⽅法:
sox --help-effect echo
'''
sox: SoX v
Effect usage:
echo gain-in gain-out delay decay [ delay decay ... ]
历史学专业'''
View Code
⼀、更改声道数
将单声道⾳频转换成双声道
sox foo.wav foostereo.wav channels 2
# sox foo.wav -c 2 foostereo.wav
但是上述命令并没有创建⼀个“真实”的双声道⾳频,⽽是将单声道⾳频复制成完全⼀致的两个声道再合并到输出⽂件中。可以通过 sox 命令的 -M 选项将左右两个声道的单声道⾳频合并成⼀个双声道⽂件
sox -M left.wav right.wav stereo.wav
将双声道均⼀程单声道
sox original.wav mono.wav channels 1
# sox original.wav -c 1 mono.wav
remix
remix 效果也可以完成对声道数据的提取或融合
# 提取双声道⾳频⽂件中单个声道的数据并作为单声道⾳频输出
sox stereo.wav left.wav remix 1 # 提取左声道⾳频
sox stereo.wav right.wav remix 2 # 提取右声道⾳频
# 融合双声道⽂件中两个声道的⾳频数据并作为单声道⾳频输出
sox stereo.wav mono.wav remix 1,2
# 或sox stereo.wav mono.wav remix 1-2
此外,remix 还可以将输⼊⽂件中的多个声道数据分别进⾏融合。如使⽤ -M 选项将两个双声道⾳频合并,再通过 remix 将合并得到的四个声道两两融合,⽣成⼀个只包含两个声道的输出⽂件。
sox -M stereo1.wav stereo2.wav output.wav remix 1,3 2,4
⼆、改变⾳量
sox -v 0.5 input.wav output.wav # ⾳频放⼤ 0.5 倍
# 以 sox foo.wav -n stat -v 命令返回的数字作为放⼤倍数,将最⼤化 foo.wav 的⾳量⽽不⾄于出现削波
sox foo.wav -n stat -v 2> vc
sox -v `cat vc` foo.wav foo-maxed.wav
sox --norm=-1 <inputfile> <outputfile> # 归⼀化⾳频响度
三、提取⽂件的某个部分
trim 接收两个参数,⼀个作为裁剪⽚段的起始位置,另⼀个作为该⽚段持续的时间。可以使⽤整数+s格式的参数以样本个数作为计量单位,也可以直接使⽤ ((hh:)mm:)ss(.fs) 形式的时间参数。当参数为纯整数时,单位为秒。
sox Input.wav Half1.wav trim 0 30:00 # 截取输⼊⽂件中前 30 分钟的⾳频
sox Input.wav Half2.wav trim 30:00 30:00 # 截取输⼊⽂件中从第 30 分钟开始到第 60 分钟的⾳频
四、拼接⽂件
# 注意合并前的⾳频⽂件需保持⼀致的类型和采样率等
sox Half1.wav Half2.wav Full.wav # 将 Half1.wav 和 Half2.wav 合并⾄ Full.wav ⽂件
五、合成⾳频
sox 命令可以通过 synth 效果合成许多标准波形和噪声类型。
synth ⽀持合成的声⾳类型包括:sine、square、triangle、sawtooth、trapetz (trapezoidal)、exp (exponential)、whitenoi、pinknoi 和brownnoi
sox -n sine.wav synth 1.0 sine 1000.0 # 合成频率为 1000 Hz 长度为 1 秒的正弦波
六、静⾳效果
sox 命令可以创建静⾳状态的⾳频⽚段,使⽤ -n 选项表⽰没有输⼊,通过 trim 效果指定需要静⾳的⽚段。
# 在 slience.wav ⽂件中创建⼀段长度为 250ms 采样率为 48000Hz 的静⾳⽚段
sox -n -r 48000 silence.wav trim 0.0 0.250
党员整改七、混合⾳频
sox 命令的 -m 选项可以将两个⾳频⽂件混合以后⽣成输出⽂件。
与前⾯的 -M 选项不同,-m 选项倾向于对声道数据的混合,即两个单声道⽂件通过 -m 混合以后输出仍是单声道数据。输出⽂件中的单个声道包含了输⼊的两个声道的特征。⽽ -M 选项更倾向于对⾳频⽂件的合并,默认不对声道数据进⾏混合。所以两个单声道⽂件通过 -M 合并以后默认输出双声道⾳频。输出⽂件中的两个声道分别对应于输⼊的两个声道(数据没有混合)。除⾮通过 -c 选项⼿动指定输出⽂件的声道数量。
# 将 sine100.wav 和 sine250.wav 两个⾳频⽂件融合以后作为 sine100-250.wav ⽂件的⾳频数据
sox -m sine100.wav sine250.wav sine100-250.wav
# 将背景⾳乐(music.mp3)⾳量降低⼀半后与放⼤ 2 倍⾳量的⼈声数据(speech.wav)融合
sox -m -v0.5 music.mp3 -v2 speech.wav prentation.wav
# 如果不确定融合效果,可以先通过 play 命令使⽤相同的参数对结果进⾏“预览”
play -m -v0.5 music.mp3 -v2 speech.wav
⼋、改变播放速度
可以通过 stretch 效果改变⾳频⽂件的播放速度,同时不会导致⾳⾼的变化。
play Faded.wav stretch 0.5 # 以 2x 倍速播放 Faded.wav ⽂件
# 也可以通过 speed 效果调节播放速度(相应地⾳⾼也会发⽣变化)
play Faded.wav speed 2
# 可以使⽤ pitch 效果调节⾳频⽚段的⾳⾼,以⾳分(cents)为单位
play Faded.wav pitch 200# 提⾼ 2 个半⾳的⾳程(每⼀个半⾳的⾳程等于 100 ⾳分)
参考: