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

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

  1. Linux必学的60个命令

    inux必学的60个命令Linux提供了大量的命令,利用它可以有效地完成大量的工作,如磁盘操作.文件存取.目录操作.进程管理.文件权限设定等.所以,在Linux系统上工作离不开使用系统提供的命令.要想 ...

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

    Linux必学的60个命令Linux提供了大量的命令,利用它可以有效地完成大量的工作,如磁盘操作.文件存取.目录操作.进程管理.文件权限设定等.所以,在Linux系统上工作离不开使用系统提供的命令.要 ...

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

    Linux提供了大量的命令,利用它可以有效地完成大量的工 作,如磁盘操作.文件存  [转载地址]http://blog.chinaunix.net/uid-16728139-id-3154272.ht ...

  4. linux(ubuntu) 查看系统设备信息 命令

    时间:2012-08-02 00:12   ubuntu查看版本命令 方法一: 在终端中执行下列指令: cat /etc/issue 方法二: 使用 lsb_release 命令也可以查看 Ubunt ...

  5. linux常用的查看设备的命令

    系统 # uname -a # 查看内核/操作系统/CPU信息  # head -n 1 /etc/issue # 查看操作系统版本 # cat /proc/cpuinfo # 查看CPU信息  # ...

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

    Linux系统信息存放在文件里,文件与普通的公务文件类似.每个文件都有自己的名字.内容.存放地址及其它一些管理信息,如文件的用户.文件的大小等. 文件可以是一封信.一个通讯录,或者是程序的源语句.程序 ...

  7. Linux 和 windows下查看运行命令的位置

    经常遇到要查看某个命令的运行文件在哪儿! 比如说vue cli,经常使用vue命令创建项目,如果你对nodejs的全局包安装目录了解可能一下就找到了, 蛋疼的是不一定每个命令都是nodejs下的,有可 ...

  8. linux中常用的60个命令及作用详解

    Linux 必学的 60 个命令 Linux 提供了大量的命令,利用它可以有效地完成大量的工作,如磁盘操作.文件存取.目录操作.进程管理.文件权限设定等.所以,在 Linux 系统上工作离不开使用系统 ...

  9. Linux的简单介绍和常用命令的介绍

    Linux的简单介绍和常用命令的介绍 本说明以Ubuntu系统为例 Ubuntu系统的安装自行百度,或者参考http://www.cnblogs.com/CoderJYF/p/6091068.html ...

随机推荐

  1. gitlab上下载项目

    第一步:下载安装git,在官网下载安装即可,没有账号的自己注册账号: 第二步:在左面空白处点击鼠标右键,点击Git Bash Here,出现对话框: 第三步:配置本地仓库的账号邮箱git: $ git ...

  2. MGR基本使用(转)

    第一章:MGR介绍 MGR(MySQL Group Replication)是一个MySQL Server插件,可用于创建弹性,高可用MySQL集群方案.有一个内置的组成员服务,在任何给定的时间点,保 ...

  3. PTA 树的遍历(根据后序中序遍历输出层序遍历)

      给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列.这里假设键值都是互不相等的正整数. 输入格式:输入第一行给出一个正整数N(≤30),是二叉树中结点的个数.第二行给出其后序遍历序列.第 ...

  4. Spring启动,constructor,@PostConstruct,afterPropertiesSet,onApplicationEvent执行顺序

    package com.xx; import javax.annotation.PostConstruct; import javax.annotation.Resource; import org. ...

  5. redux的知名ppt

    https://slides.com/jenyaterpil/redux-from-twitter-hype-to-production#/20

  6. UI与数据的绑定

    核心是数据变化跟踪与UI更新的问题 概念整理: 供业务使用的叫数据: 供UI使用的叫状态: UI的变化能被监听到: 数据的变化能实时反映到UI上: 数据变化—>拦截—〉UI状态重置—>UI ...

  7. idea 将java导出为可执行jar及导入jar依赖

    使用maven可以很好的帮助我们进行依赖的管理,也可以使用maven的jar包打包插件构建出可运行的jar.那针对不是用maven进行管理的普通java项目,可以通过以下方式导出可执行的jar包以及导 ...

  8. [Algorithm] 171. Excel Sheet Column Number

    Given a column title as appear in an Excel sheet, return its corresponding column number. For exampl ...

  9. python3 安装 pillow报错

    前言 最近要使用pillow库, 来训练验证码模型, 但是死活都安装不上 环境 docker中安装, python3 尝试安装 pip install pillow easy_install Pill ...

  10. Java实现PV操作 | 读者与写者(在三种情况下进行讨论)

    注 :本文应结合[天勤笔记]进行学习. 1.读者优先 设置rmutex信号量来对readcount变量进行互斥访问.mutex信号量对写者与读者进行同步. static syn rmutex=new ...