sox处理mp3_SoX 音频处理工具使用方法

一、简介

SoX 可以读取和写入常见格式的音频文件,并在此过程中选择性的加入一些声音效果。它可以组合多个输入源及合成音效,在许多系统上也可以作为音频播放器或多轨录音机使用。

SoX 工具在大部分 Linux 系统上都可以直接通过软件包管理器安装(如sudo apt-get install sox),Mac 系统上则可以使用brew install sox命令。

SoX 处理音频的基本流程如下:

Input(s) -> Combiner -> Effects -> Output(s)

SoX 工具的所有功能都可以通过一个简单的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 ...

二、基本使用

1. 获取音频文件的元数据

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 命令跟上某个特定的选项可以只获取该选项对应的信息,如只显示某音频文件Faded.wav的比特率(Bit Rate):

$ soxi -B Faded.wav

1.41M

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.

2. 获取音频的统计信息

可以使用sox -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

3. 播放与录制

play和rec命令提供了最基本的播放和录制功能。

播放:$ play existing-file.wav

录制:$ rec new-file.wav

上述命令等同于 sox 命令的如下形式:

$ sox existing-file.wav −d(播放)和sox −d new-file.wav(录制)

其中-d选项用于指定播放或录制时使用的音频设备,不指定时则表示使用默认设备。

可以这样理解:

sox existing-file.wav -d就是从existing-file.wav文件中读取其包含的音频数据,再输出到-d(默认音频设备,扬声器)进行播放;

-sox -d new-file.wav就是从-d(默认音频设备,麦克风)中读取音频数据,再输出(录制)到new-file.wav文件中。

其实都遵循了一个基本的格式,即sox 。而其中的和根据需要既可以为某个具体的音频文件,也可以是某个具体的音频设备。

播放或录制的同时,也可以对音频文件应用指定的编辑操作或效果选项,因此在对音频数据应用某效果前,可以先使用play 命令进行“预览”。

如trim效果可以从音频文件中裁剪提取指定的片段到输出文件。play命令通过该效果可以直接播放指定片段:

$ play foo.wav trim 10.0 5.0或 $play foo.wav trim 10.0 =15.0

播放foo.wav文件中 10-15s 之间的音频片段

使用echo效果播放Faded.wav文件:

$ play Faded.wav echo 0.8 0.88 200.0 0.4

Faded.wav:

File Size: 37.5M Bit Rate: 1.41M

Encoding: Signed PCM

Channels: 2 @ 16-bit

Samplerate: 44100Hz

Replaygain: off

Duration: 00:03:32.63

In:12.1% 00:00:25.82 [00:03:06.81] Out:1.14M [-=====|=====-] Hd:2.7 Clip:0

4. 音频格式转换

文件格式类型

对于音频数据格式的描述,主要通过以下 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 命令即使用两个文件名作为参数,如:

$ sox Faded.wav Faded.mp3:将Faded.wav文件的格式由wav转为mp3

上述命令执行时,SoX 会先从Faded.wav文件中读取音频数据,再将其输出到Faded.mp3文件中。而 SoX 程序会根据参数中文件名的后缀推断出相应的格式,并在复制音频数据的过程中自动进行转码。

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-TYP

E音频文件的文件类型

上述选项适用于输入或输出文件,主要用于说明raw(或headless)文件作为输入时的格式信息,或格式转换时指定输出文件的具体参数。

$ sox −r 48k −e float −b 32 −c 2 input.raw output.wav

将某个特定的 raw 格式的音频文件转换为 wav 格式

$ sox Faded.wav Faded.raw

将音频文件 Faded.wav 转为 raw 格式

$ play -r 44800 -b 16 -e signed-integer -c 2 Faded.raw

播放 raw 格式的音频文件

$ sox Faded.wav -c 1 Faded-mono.wav

将 Faded.wav 文件转换成单声道(-c 1)后输出

三、音频效果

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 ... ]

以下是一些简单的应用场景。

1. 更改声道数

sox 命令可以更改音频文件中声道的数目,如将单声道音频转换成双声道:

$ 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

通过 sox 命令的 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

2. 改变音量

sox命令的-v选项可以用来(成倍地)改变音量的大小:

$ sox -v 0.5 foo.wav bar.wav

上述命令将foo.wav音频放大 0.5 倍音量后输出至bar.wav文件

可以将音量放大功能与stat效果结合。

以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

1

2

此外,还有一个选项--norm用来归一化音频响度。为了最大化音频的声音强度,可以在处理输入音频时将该选项设置为 -1:

sox --norm=-1

3. 提取文件的某个部分

sox 命令的trim效果可以将输入音频的某一段裁剪出来并提取到输出文件中。

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 分钟的音频

4. 拼接文件

与前面裁剪提取的操作相反,sox 命令还可以实现对两个或多个音频文件的拼接。

$ sox Half1.wav Half2.wav Full.wav

将Half1.wav和Half2.wav合并至Full.wav文件。注意合并前的音频文件需保持一致的类型和采样率等。

5. 合成音频

sox 命令可以通过synth效果合成许多标准波形和噪声类型。

$ 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. 静音效果

sox 命令可以创建静音状态的音频片段,使用-n选项表示没有输入,通过trim效果指定需要静音的片段。

$ sox -n -r 48000 silence.wav trim 0.0 0.250

在slience.wav文件中创建一段长度为 250ms 采样率为 48000Hz 的静音片段。

7. 混合音频

sox 命令的-m选项可以将两个音频文件混合以后生成输出文件。

$ 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 命令使用相同的参数对结果进行“预览”:

$ play -m -v0.5 music.mp3 -v2 speech.wav

PS:

与前面的-M选项不同,-m选项倾向于对声道数据的混合,即两个单声道文件通过-m混合以后输出仍是单声道数据。输出文件中的单个声道包含了输入的两个声道的特征。

而-M选项更倾向于对音频文件的合并,默认不对声道数据进行混合。所以两个单声道文件通过-M合并以后默认输出双声道音频。输出文件中的两个声道分别对应于输入的两个声道(数据没有混合)。除非通过-c选项手动指定输出文件的声道数量。

8. 改变播放速度

可以通过 stretch 效果改变音频文件的播放速度,同时不会导致音高的变化。

如以 2x 倍速播放Faded.wav文件:

$ play Faded.wav stretch 0.5

也可以通过speed效果调节播放速度(相应地音高也会发生变化):

$ play Faded.wav speed 2

此外,可以使用pitch效果调节音频片段的音高,以音分(cents)为单位。

$ play Faded.wav pitch 200

将Faded.wav文件中的音频提高 200 音分,即提高 2 个半音的音程(每一个半音的音程等于 100 音分)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/467743.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

该死的装修

周末了,没有写技术文~因为最近的新房子需要装修,谈了几个装修公司,不知道为什么,我对装修这个事情非常抵触,繁琐的事情太多了,还没有装修,我就觉得有很多事情要斗争。因为家里有小孩&#xff0c…

SKLEARN模型选择

数据集划分方法 K折交叉验证法 将全部训练集S分成k个不相交的子集,假设S中的训练样例子数为m,那么每一个子集有m/k个训练样例,相应子集称作{s1,s2……sk}每次从分好的子集里面,拿一个作为测试集,其他k-1作为训练集在k…

SpringBoot(十) :邮件服务

原文出处: 纯洁的微笑 springboot仍然在狂速发展,才五个多月没有关注,现在看官网已经到1.5.3.RELEASE版本了。准备慢慢在写写springboot相关的文章,本篇文章使用springboot最新版本1.5.3进行开发。 发送邮件应该是网站的必备功能之…

python中order函数_order by排序

作者Toby,持牌照消费金融模型经理,发明国家算法专利,国内最大医药数据中心数据挖掘部门负责人!和重庆儿科医院,中科院教授,赛柏蓝保持慢病数据挖掘项目合作!清华大学,百度,腾讯&…

被该死的Openssl编译嘲讽了一个下午

昨晚比较尴尬,下班的时候已经很晚了,到半路突然想起来没有带钥匙回去,赶紧折返回公司拿钥匙,在已经很晚的路上我们又多花费了20分钟,到家已经挺晚了,具体多少点我都不好意思说,我要是说出来&…

JavaScript中本地对象、内置对象和宿主对象

http://www.jianshu.com/p/a52e6e183427 http://blog.csdn.net/weiyastory/article/details/52837466 http://www.cnblogs.com/qigang/p/3520974.html 在ECMAScript中,所有对象并非同等创建的。 一般来说,可以创建并使用的对象有3种:本地对象…

类的真正形态

类的真正形态 类的关键字 struct在C语言中已经有了自己的定义,必须继续兼容 在C中提供了新的关键字,class用于类定义 class和struct用法是完全相同 struct和class区别 用struct定义时,所有成员默认为public 用class定义时,所…

docker代理设置ssl证书_docker - 设置HTTP/HTTPS 代理

1、设置代理原因因公司安全限制,所有外网需配置代理后才可上网,但是因为宿主机上设置过代理,并未太过多注意此问题,之后run时报如下错误:# docker run hello-worldUnable to find image hello-world:latest locallydoc…

暴力修改SElinux权限

平台版本 SDK版本 版本名称 9.0 28 Pie (Android P) 8.1 27 Oreo(Android O)(奥利奥) 8.0 26 Oreo(Android O)(奥利奥) 7.1 25 Nougat(Android N)(牛轧糖) 7.0 24 Nougat(Android N)(牛轧糖&…

分类器

sklearn分类器性能指标 分类器性能评估指标 只限于二元单元标签分类问题 可用于二元多标签分类问题的评估指标 如何将二元分类指标扩展到多类或多标签问题中去 可用于多类分类问题的评估指标(紫色的可用于多标签问题) accuracy_score准确率 函数计算分类…

Cucumber+Rest Assured快速搭建api自动化测试平台

转载:http://www.jianshu.com/p/6249f9a9e9c4 什么是Cucumber?什么是BDD?这里不细讲,不懂的直接查看官方:https://cucumber.io/  什么是Rest Assured?传送门:https://github.com/rest-assured…

毕业设计论文选题系统系统用例图_基于UML的毕业设计管理系统的分析与设计

基于UML的毕业设计管理系统的分析与设计毕业设计是实现本科教学培养目标的重要环节,从选题到答辩一般需要四至六个月的时间,其间工作量很大,尤其需要保留大量的文件,以便于管理者对毕业设计工作进行监督。传统的、人工的方式管理各…

让这个该死的服务跑起来了~

#前言被该死的Openssl编译嘲讽了一个下午之前的文章说了我的那个编译的问题,这里说下,知识点有点零散,最后的解决也是一个同事提示,感觉也有点奇葩的赶脚。到目前为止,我现在感受到了写文章的好处,昨晚的问…

深度学习概述

深度学习 传统学习与深度学习 深度学习应用特点 深度学习框架比较 Tensorflow 神经元 卷积核 分类 回归 生成

Python--递归

面向函数编程 def func():print(从前有座山,山里有座庙,庙里有个老和尚讲故事,讲的什么呀?)func() 解耦:尽量把不相关的功能拆开,用的时候再调用函数,增强代码重用性,减少代码变更的…

python相关知识介绍一种理财方法_我是如何使用python来确定理财策略的

老婆在朋友圈里看到了一条理财广告,一条很让人心动的广告,长下面这个样子。这是香港某保险公司的理财方案,大意是每年定投6.65万,投资5年,总共投资33万的样子,那么第10年,你将可以拿到38.6万&am…

传统神经网络

文章目录神经网络的起源:线性回归一个线性回归问题线性回归优化方法:梯度下降梯度计算梯度计算总结线性回归:输出线性回归:局限从线性到非线性非线性激励常用的非线性激励函数tanhRELULecky RELU神经元—神经网络神经网络构建神经…

[BZOJ1669][Usaco2006 Oct]Hungry Cows饥饿的奶牛

1669: [Usaco2006 Oct]Hungry Cows饥饿的奶牛 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 1000 Solved: 655 [Submit][Status][Discuss]Description Farmer John养了N(1 < N < 5,000)头奶牛&#xff0c;每头牛都有一个不超过32位二进制数的正整数编号。FJ希望奶牛…

vue抽屉_VUE组件 之 Drawer 抽屉

{{ title }}Xprops: {//是否打开display: {type: Boolean},//标题title: {type: String,default: 标题},//是否显示关闭按钮closable: {type: Boolean,default: true},//是否显示遮罩mask: {type: Boolean,default: true},//是否点击遮罩关闭maskClosable: {type: Boolean,defa…

深度学习之卷积神经网络

文章目录深度学习之卷积神经网络链式反向梯度链式法则的计算神经网络中链式法则实例二、卷积神经网络-卷积层&#xff08;一&#xff09;什么是卷积层&#xff08;二&#xff09;有什么组成受什么影响&#xff0c;有何特点卷积网络正向传播反向传播卷积和神经网络功能层深度学习…