安装
1sudo apt-get install sox
查看音频信息
1.通过play查看音频格式:
1play music.mp3
出错play FAIL formats: no handler for file extension `mp3’的解决:
1sudo apt-get install libsox-fmt-mp3
效果:
1$play music.mp3
2play WARN alsa: can't encode 0-bit Unknown or not applicable
3
4music.mp3:
5
6 File Size: 8.02M Bit Rate: 195k
7 Encoding: MPEG audio
8 Channels: 2 @ 16-bit Track: 1
9Samplerate: 48000Hz Album: ノアール
10Replaygain: off Artist: 傘村トータ/小春六花
11 Duration: 00:05:28.20 Title: ノアール
12
13In:2.91% 00:00:09.56 [00:05:18.64] Out:459k [ -===|===- ] Clip:0
2.使用soxi
或者sox --i
:
1$soxi music.mp3
2
3Input File : 'music.mp3'
4Channels : 2
5Sample Rate : 48000
6Precision : 16-bit
7Duration : 00:05:28.20 = 15753600 samples ~ 24615 CDDA sectors
8File Size : 8.02M
9Bit Rate : 195k
10Sample Encoding: MPEG audio (layer I, II or III)
11Comments :
12Title=ノアール
13Artist=傘村トータ/小春六花
14Album=ノアール
15Tracknumber=1
16Discnumber=01
功能
1sox [global-options]
2[format-options] infile1
3[[format-options] infile2] ...
4[format-options] outfile
5[effect [effect-options]] ...
格式转化
基础知识
对于音频数据格式的描述,主要通过以下 4 种属性:
- 采样率(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)表示一个单位时间内编码音频信号占用的存储空间大小, 它的数值一般取决于所有的上述四个参数。 MP3 编码的立体声音乐通常具有 128-196kbps 的比特率, FLAC 编码的立体声音乐通常具有 550-760kbps 的比特率。
SoX 可以处理 self-describing 和 raw 格式的音频文件。 self-describing 格式(如 WAV、FLAC、MP3)的文件包含一个用于描述信号和编码属性的文件头,而 raw 或 headless 格式的音频则不包含这些信息。
所以当 raw 格式的音频作为输入文件时,需要在 sox 命令的格式选项里指定其信号和编码属性。
常用的音频格式选项:
选项 | 描述 |
---|---|
-b, –bits BITS | 每个编码样本占用的数据位数 |
-c, –channels CHANNELS | 音频文件包含的通道数 |
-e, –encoding ENCODING | 音频文件的编码类型 |
-r, –rate RATE | 音频文件的采样率 |
-t, –type FILE-TYPE | 音频文件的文件类型 |
上述选项适用于输入或输出文件,主要用于说明 raw(或 headless)文件作为输入时的格式信息,或格式转换时指定输出文件的具体参数。
需要注意的是,-e参数指定的是紧跟在后面那个文件的编码,如果想要输出指定格式,就需要在input之后加上-e参数。
命令
-
soxi
或sox --i
:命令可以通过分析音频文件的文件头,获取其元数据(如通道数、采样率、编码等)。soxi 命令跟上某个特定的选项可以只获取该选项对应的信息 -
sox <inputfile> -n stat
:获取某音频文件的统计信息。 -
sox existing-file.wav −d
或play existing-file.wav
:播放音频 -
sox −d new-file.wav
或rec new-file.wav
:录制 -
play foo.wav trim 10.0 5.0
或play foo.wav trim 10.0 =15.0
:播放foo.wav
文件中 10-15s 之间的音频片段 -
sox Faded.wav Faded.mp3
:将Faded.wav
文件的格式由 wav 转为 mp3 -
sox −r 48k −e float −b 32 −c 2 input.raw output.wav
:将某个特定的 raw 格式的音频文件转换为 wav 格式-e参数在这种场景下指的是raw文件的,编码
-
sox Faded.wav Faded.raw
:将音频文件Faded.wav
转为 raw 格式 -
play -r 44800 -b 16 -e signed-integer -c 2 Faded.raw
:播放 raw 格式的音频文件1play -r 48k -e signed-integer -b 16 -c 2 music.raw #这么播放mp3没问题 2play -r 48k -e unsigned-integer -b 16 -c 2 music.raw #换一种编码耳朵炸了
-
sox Faded.wav -c 1 Faded-mono.wav
:将Faded.wav
文件转换成单声(-c 1
)后输出
音频效果
SoX 工具可以在音频处理的过程中,对输入的音频数据应用众多的效果。
sox --help-effect all
:查看所有效果的帮助信息
1.更改声道数
-
sox foo.wav foostereo.wav channels 2
或sox foo.wav -c 2 foostereo.wav
:将单声道音频转换成双声道上述命令并没有创建一个“真实”的双声道音频,而是将单声道音频复制成完全一致的两个声道再合并到输出文件中。
-
sox -M left.wav right.wav stereo.wav
:通过 sox 命令的-M
选项将左右两个声道的单声道音频合并成一个双声道文件 -
sox original.wav mono.wav channels 1
或sox original.wav -c 1 mono.wav
:通过对双声道文件中两个声道的均一化处理,将其输出为单声道音频 -
sox stereo.wav left.wav remix 1
:提取双声道音频文件中单个声道的数据并作为单声道音频输出(提取左声道音频) -
sox stereo.wav left.wav remix 2
:提取双声道音频文件中单个声道的数据并作为单声道音频输出(提取右声道音频) -
sox stereo.wav mono.wav remix 1,2
或sox stereo.wav mono.wav remix 1-2
:融合双声道文件中两个声道的音频数据并作为单声道音频输出 -
sox -M stereo1.wav stereo2.wav output.wav remix 1,3 2,4
:使用-M
选项将两个双声道音频合并,再通过remix
将合并得到的四个声道两两融合,生成一个只包含两个声道的输出文件。
2.改变音量
-
sox -v 0.5 foo.wav bar.wav
:-v
选项可以用来(成倍地)改变音量的大小, 将foo.wav
音频放大 0.5 倍音量后输出至bar.wav
文件 -
1$ sox foo.wav -n stat -v 2> vc 2$ sox -v `cat vc` foo.wav foo-maxed.wav
以
sox foo.wav -n stat -v
命令返回的数字作为放大倍数,将最大化foo.wav
的音量而不至于出现削波 -
sox --norm=-1 <inputfile> <outputfile>
:选项--norm
用来归一化音频响度。为了最大化音频的声音强度,可以在处理输入音频时将该选项设置为 -1
3.提取文件的某个部分
-
sox Input.wav Half1.wav trim 0 30:00
:截取输入文件中前 30 分钟的音频 -
sox Input.wav Half2.wav trim 30:00 30:00
:截取输入文件中从第 30 分钟开始到第 60 分钟的音频trim
接收两个参数,一个作为裁剪片段的起始位置,另一个作为该片段持续的时间。 可以使用整数+s
格式的参数以样本个数作为计量单位,也可以直接使用((hh:)mm:)ss(.fs)
形式的时间参数。当参数为纯整数时,单位为秒。
4.拼接文件
sox Half1.wav Half2.wav Full.wav
:将 Half1.wav
和 Half2.wav
合并至 Full.wav
文件。
注意合并前的音频文件需保持一致的类型和采样率等
5.合成音频
sox -n sine.wav synth 1.0 sine 1000.0
:合成频率为 1000 Hz 长度为 1 秒的正弦波,保存至 sine.wav
文件中。
synth
支持合成的声音类型包括 sine、square、triangle、sawtooth、trapetz (trapezoidal)、exp (exponential)、whitenoise、pinknoise 和 brownnoise。
6.静音效果
创建静音状态的音频片段,使用 -n
选项表示没有输入,通过 trim
效果指定需要静音的片段。
sox -n -r 48000 silence.wav trim 0.0 0.250
:在 slience.wav
文件中创建一段长度为 250ms 采样率为 48000Hz 的静音片段。
7.混合音频
sox -m sine100.wav sine250.wav sine100-250.wav
:将sine100.wav
和sine250.wav
两个音频文件融合以后作为sine100-250.wav
文件的音频数据。sox -m -v0.5 music.mp3 -v2 speech.wav presentation.wav
:将背景音乐(music.mp3
)音量降低一半后与放大 2 倍音量的人声数据(speech.wav
)融合。play -m -v0.5 music.mp3 -v2 speech.wav
:如果不确定融合效果,可以先通过play
命令使用相同的参数对结果进行“预览”
与前面的 -M
选项不同,-m
选项倾向于对声道数据的混合,即两个单声道文件通过 -m
混合以后输出仍是单声道数据。输出文件中的单个声道包含了输入的两个声道的特征。
而 -M
选项更倾向于对音频文件的合并,默认不对声道数据进行混合。所以两个单声道文件通过 -M
合并以后默认输出双声道音频。输出文件中的两个声道分别对应于输入的两个声道(数据没有混合)。除非通过 -c
选项手动指定输出文件的声道数量。
8.改变播放速度
-
play Faded.wav stretch 0.5
:以 2x 倍速播放Faded.wav
文件,stretch
同时不会导致音高的变化。 -
play Faded.wav speed 2
:通过speed
效果调节播放速度(相应地音高也会发生变化)这样就可以创建网络上的鬼畜音效了。
-
play Faded.wav pitch 200
:使用pitch
效果调节音频片段的音高,以音分 (cents)为单位。将Faded.wav
文件中的音频提高 200 音分,即提高 2 个半音的音程(每一个半音的音程等于 100 音分)。
问题处理
sox使用时经常不支持一些格式,需要另外下载安装:
-
play FAIL formats: no handler for file extension `mp3'
解决: sudo apt-get install libsox-fmt-mp3
-
armnb,armwb不支持
解决:https://blog.csdn.net/weixin_39573512/article/details/111802538
场景
要求可以处理裸文件,带头的文件,wav(pcm,pcma,pcmu),vox, amrnb, amrwb互转。
文件信息:
1$soxi music.mp3
2
3Input File : 'music.mp3'
4Channels : 2
5Sample Rate : 48000
6Precision : 16-bit
7Duration : 00:05:28.20 = 15753600 samples ~ 24615 CDDA sectors
8File Size : 8.02M
9Bit Rate : 195k
10Sample Encoding: MPEG audio (layer I, II or III)
11Comments :
12Title=ノアール
13Artist=傘村トータ/小春六花
14Album=ノアール
15Tracknumber=1
16Discnumber=01
- 转PCM:
1sox music.mp3 pcm.wav
2
3$soxi pcm.wav
4
5Input File : 'pcm.wav'
6Channels : 2
7Sample Rate : 48000
8Precision : 16-bit
9Duration : 00:05:28.18 = 15752448 samples ~ 24613.2 CDDA sectors
10File Size : 63.0M
11Bit Rate : 1.54M
12Sample Encoding: 16-bit Signed Integer PCM
- 转PCMU:
1$sox music.mp3 -e mu-law mulaw.wav
2sox WARN dither: dither clipped 5 samples; decrease volume?
3
4$soxi mulaw.wav
5
6Input File : 'mulaw.wav'
7Channels : 2
8Sample Rate : 48000
9Precision : 14-bit
10Duration : 00:05:28.18 = 15752448 samples ~ 24613.2 CDDA sectors
11File Size : 31.5M
12Bit Rate : 768k
13Sample Encoding: 8-bit u-law
- 转PCMA:
1$sox music.mp3 -e a-law alaw.wav
2sox WARN dither: dither clipped 4 samples; decrease volume?
3
4$soxi alaw.wav
5
6Input File : 'alaw.wav'
7Channels : 2
8Sample Rate : 48000
9Precision : 13-bit
10Duration : 00:05:28.18 = 15752448 samples ~ 24613.2 CDDA sectors
11File Size : 31.5M
12Bit Rate : 768k
13Sample Encoding: 8-bit A-law
14
-
转vox
vox应该是规范的问题,采样率只能8k最大,声道数只能是1,且指定不了采样大小。
1$sox music.mp3 -r 8k -c 1 vox.vox
2
3$play vox.vox
4play WARN alsa: can't encode 0-bit Unknown or not applicable
5play WARN raw: `vox.vox': sample rate not specified; trying 8kHz
6
7vox.vox:
8
9 File Size: 1.31M Bit Rate: 32.0k
10 Encoding: OKI ADPCM
11 Channels: 1 @ 12-bit
12Samplerate: 8000Hz
13Replaygain: off
14 Duration: 00:05:28.18
15
16In:4.99% 00:00:16.38 [00:05:11.79] Out:131k [ -==|==- ] Clip:0
17Aborted.