Linux 对音频万能处理的命令——SOX

what‘s the SOX

SoX(即 Sound eXchange)是一个跨平台(Windows,Linux,MacOS 等)的命令行实用程序,可以将各种格式的音频文件转换为需要的其他格式。SoX 还可以对输入的音频文件应用各种效果,也支持在大多数平台上播放和录制音频文件。

Windows下载链接:https://sourceforge.net/projects/sox/files/sox/

  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 sectors
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 seconds (0 if unavailable)
-D  Show duration in seconds (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 (seconds):    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
‘‘‘

三、播放与录制

  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 可以处理 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 音频文件的文件类型
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 ... ]
‘‘‘

一、更改声道数

  将单声道音频转换成双声道

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)、whitenoise、pinknoise 和 brownnoise

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 presentation.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 音分)

参考:https://www.jianshu.com/p/be8977de4a6b

原文地址:https://www.cnblogs.com/zhuminghui/p/11971311.html

时间: 2024-08-30 14:51:30

Linux 对音频万能处理的命令——SOX的相关文章

Linux学习总结(12)——Linux必须学会的60个命令

Linux系统信息存放在文件里,文件与普通的公务文件类似.每个文件都有自己的名字.内容.存放地址及其它一些管理信息,如文件的用户.文件的大小等. 文件可以是一封信.一个通讯录,或者是程序的源语句.程序的数据,甚至可以包括可执行的程序和其它非正文内容.Linux文件系统具有良好的结构,系统提 供了很多文件处理程序.这里主要介绍常用的文件处理命令. file 1.作用file通过探测文件内容判断文件类型,使用权限是所有用户. 2.格式file [options]文件名3.[options]主要参数-

Linux必学的60个命令【转载】

Linux提供了大量的命令,利用它可以有效地完成大量的工 作,如磁盘操作.文件存  [转载地址]http://blog.chinaunix.net/uid-16728139-id-3154272.html 自己留着,用得着. Linux提供了大量的命令,利用它可以有效地完成大量的工作,如磁盘操作.文件存取.目录操作.进程管理.文件权限设定等.所以,在Linux系统上工作离不开使用系统提供的命令.要想真正理解Linux系统,就必须从Linux命令学起,通过基础的命令学习可以进一步理解Linux系统

Linux必学的60个命令

Linux提供了大量的命令,利用它可以有效地完成大量的工作,如磁盘操作.文件存取.目录操作.进程管理.文件权限设定等.所以,在Linux系统上工作离不开使用系统提供的命令. 要想真正理解Linux系统,就必须从Linux命令学起,通过基础的命令学习可以进一步理解Linux系统.不同Linux发行版的命令数量不一样,但Linux发行版本最少的命令也有200多个.这里把比较重要和使用频率最多的命令,按照它们在系统中的作用分成下面六个部分一一介绍.◆ 安装和登录命令:login.shutdown.ha

【转】linux 必须掌握的60个命令

Linux必学的60个命令Linux提供了大量的命令,利用它可以有效地完成大量的工作,如磁盘操作.文件存取.目录操作.进程管理.文件权限设定等.所以,在Linux系统上工作离不开使用系统提供的命令.要想真正理解Linux系统,就必须从Linux命令学起,通过基础的命令学习可以进一步理解Linux系统.不同Linux发行版的命令数量不一样,但Linux发行版本最少的命令也有200多个.这里笔者把比较重要和使用频率最多的命令,按照它们在系统中的作用分成下面六个部分一一介绍.◆ 安装和登录命令:log

Linux必须学会的60个命令

Linux系统信息存放在文件里,文件与普通的公务文件类似.每个文件都有自己的名字.内容.存放地址及其它一些管理信息,如文件的用户.文件的大小等.文件可以是一封信.一个通讯录,或者是程序的源语句.程序的数据,甚至可以包括可执行的程序和其它非正文内容.Linux文件系统具有良好的结构,系统提供了很多文件处理程序.这里主要介绍常用的文件处理命令. file 1.作用file通过探测文件内容判断文件类型,使用权限是所有用户. 2.格式file [options]文件名3.[options]主要参数-v:

万能的top命令

TOP是一个动态显示过程,即可以通过用户按键来不断刷新当前状态.如果在前台执行该命令,它将独占前台,直到用户终止该程序为止.比较准确的说,top 命令提供了实时的对系统处理器的状态监视.它将显示系统中CPU最"敏感"的任务列表.该命令可以按CPU使用.内存使用和执行时间对任务进行排序:而且 该命令的很多特性都可以通过交互式命令或者在个人定制文件中进行设定. top - 11:17:54 up 230 days, 20:39,  2 users,  load average: 0.00,

Linux必学的60个命令 (转)

Linux必学的60个命令 Linux必学的60个命令 Linux提供了大量的命令,利用它可以有效地完成大量的工 作,如磁盘操作.文件存取.目录操作.进程管理.文件权限设定等.所以,在Linux系统上工作离不开使用系统提供的命令.要想真正理解Linux系统, 就必须从Linux命令学起,通过基础的命令学习可以进一步理解Linux系统. 不同Linux发行版的命令数量不一样,但Linux发行版本最少的命令也有200多个.这里笔者把比较重要和使用频率最多的命令,按照它们在系统中的作用分成下面六个部分

Linux实现音频录放

一.原理简述 在Linux下,录音--从dsp设备读取数据,放音--向dsp设备写入数据. 开发板采用声卡UDA1341实现音频编解码,完成A/D和D/A转换,芯片UDA1341与CPU的连接图如下: 为了实现全双工,数据传输需要使用两个DMA通道.以音频回放为例,数据传输先由内部总线送到内存, 然后传到DMA控制器通道1,再通过IIS控制器写入IIS总线并传输给音频芯片,通道2用来录音. 二.WAV文件 WAVE是录音时用的标准的Windows文件格式,文件的扩展名为"wav",数据

linux中vim编辑器各种常用命令及用法

linux中vim编辑器的常用命令以及用法(注意严格区分大小写以及中英文): vim编辑器有三种模式,分别是:编辑模式,输入模式以及末行模式. 模式转换: 编辑模式>>>输入模式: i:在光标所在字符前面,转为输入模式(即转完后在光标所在字符前输入):                      I:在光标所在行的行首,转为输入模式(即转完后在行首输入,不包括行首空                         白) a:在光标所在字符后,转为输入模式(即转完后在光标所在字符后面输入):