安装SoX

安装依赖

  • libmp3lame

    libmp3lame是目前最好的mp3编码器,编码高质量mp3最好也是唯一的选择。

    [root@ecs ~]# yum install -y lame-devel

    lame-devel包含了libmp3lame.so,SoX调用libmp3lame.so实现解码mp3功能。

    windows sox默认不支持编解码mp3,需要依赖libmp3lame-0.dlllibmad-0.dll才能实现编解码功能。将wav等音频格式转为mp3时,使用libmp3lame-0.dll进行编码。将mp3转为wav等格式时,使用libmad-0.dll进行解码。

    linux lame即可以编码,也可以解码mp3、wav和aif格式,等效于windows sox + libmp3lame-0.dll + libmad-0.dll。

    • wav转mp3

      [root@ecs ~]# lame -h input.wav output.mp3
    • mp3转wav

      [root@ecs ~]# lame input.mp3 output.wav
  • libmad

    libMAD是一个开源的高精度MPEG音频解码库,支持MPEG-1。MPEG-1音频分3层,分别是:MPEG-1 Layer1、MPEG-1 Layer2和MPEG-1 Layer3(简称mp3)。

    [root@ecs ~]# yum install -y libmad-devel

    虽然lame工具有解码mp3的功能,但libmp3lame并不具备解码mp3的功能,因此SoX需要依赖libmad实现mp3解码功能。

  • id3tag

    mp3格式标准里没有特别定义保存曲目相关信息的结构,于是在1996年有人提出在mp3文件的末尾添加128字节额外的数据空间用于存储歌曲名、演唱者、专辑名、音轨编号、曲目类型等信息,这些信息成为ID3Tag。

    [root@ecs ~]# yum install -y libid3tag-devel zlib-devel

    注:sox编译id3tag时依赖zlib库。

  • towlame

    TwoLAME is an optimised MPEG Audio Layer 2 (MP2) encoder based on tooLAME by Mike Cheng, which in turn is based upon the ISO dist10 code and portions of LAME.

    [root@ecs ~]# yum install -y twolame-devel

    注:twolame-devel自动安装twolame-libs。lame-devel、libmad-devel和twolame-libs均来自epel源,需要先安装epel源。

  • flac

    flac是一套著名的自由音频无损压缩编码器,不同于其它有损编码(mp3、aac等),flac不会破坏任何原有的音频信息。

    [root@ecs ~]# yum install -y flac-devel
  • vorbis

    有损音频编解码器(需配合ogg容器使用),完全免费、开放,没有专利限制。

    [root@ecs ~]# yum install -y libvorbis-devel
  • opus

    有损音频编解码器,和vorbis都是由xiph.org基金会开发。opus后由IETF(互联网工程任务组)进行标准化,目的用一种格式包含声音和语音,取代speex和vorbis。

    [root@ecs ~]# yum install -y opusfile-devel

    windows可以使用opus-tools实现ogg音频转换,opus-tools等效于sox + libogg-0.dll。

    • wav转ogg

      [root@ecs ~]# opusenc input.wav output.ogg
    • ogg转wav

      [root@ecs ~]# opusdec input.ogg output.wav
    • 查看ogg信息

      [root@ecs ~]# opusinfo input.ogg
  • amr

    全称Adaptive Multi-Rate,自适应多速率编码,主要用于移动设备的音频,压缩比大,但相对其他的压缩格式质量差,多用于人声通话。amr一般是指amr-nb,8kHz采样,有8种比特率的编解码算法,另外有amr-wb,16kHz采样,有9种比特率的编解码算法。由于amr-wb采样率高,所以复杂度大概是amr-nb的两倍。amr-nb和amr-wb都属于speech codec,对audio的编码效果并不好。

    [root@ecs ~]# yum install -y gcc-c++
    [root@ecs ~]# tar -zxvf opencore-amr-0.1.6.tar.gz && cd opencore-amr-0.1.6
    [root@ecs opencore-amr-0.1.6]# ./configure
    [root@ecs opencore-amr-0.1.6]# make && make install

    或者:

    [root@ecs ~]# cd /usr/local/src
    [root@ecs src]# rpm -ivh opencore-amr-devel-0.1.6-1.el7.x86_64.rpm

    注:opencore-amr(包含amrnb和amrwb)

  • wavpack

    由David Bryant于1998年开发的一款自由、开放的无损音频编解码器。

    [root@ecs ~]# yum install -y wavpack-devel
  • libsndfile

    一款专注于音频文件读写的跨平台C语言库,支持wav、flac等主流格式,适用于音频数据处理、格式转换等场景。sox通常自带对大量音频格式支持,同时也支持通过libsndfile库扩展其格式处理能力,sox不强制依赖libsndfile。

    [root@ecs ~]# yum install -y libsndfile-devel
  • libmagic

    智能处理没有扩展名或扩展名错误的音频,通过读取文件头部的magic number来确认真实格式。

    [root@ecs ~]# yum install -y file-devel

安装驱动

  • ALSA

    [root@ecs ~]# yum install -y alsa-lib-devel

    不安装驱动不影响SoX的音频处理能力,但会导致playrec命令无法调用系统的扬声器和麦克风。

  • PulseAudio

    [root@ecs ~]# yum install -y pulseaudio-libs-devel
  • AO

    [root@ecs ~]# yum install -y libao-devel

    安装libao-devel会自动安装flac-libs、libogg、libsndfile、libvorbis和pulseaudio-libs等。

安装SoX

[root@ecs ~]# yum install -y gcc libtool-ltdl-devel
[root@ecs ~]# cd /usr/local/src && tar -zxvf sox-14.4.2.tar.gz && cd sox-14.4.2
[root@ecs sox-14.4.2]# ./configure --prefix=/usr/local/sox \
--enable-dl-amrnb \
--enable-dl-amrwb \
--enable-dl-lame \
--enable-dl-mad \
--enable-dl-twolame \
--enable-dl-sndfile \
--enable-shared
[root@ecs sox-14.4.2]# make -s && make install
[root@ecs sox-14.4.2]# echo export PATH="\$PATH:/usr/local/sox/bin" >> /etc/profile
[root@ecs sox-14.4.2]# source /etc/profile

--enable-shared改成--enable-static可以生成静态文件,对比生成的sox程序大小:

ll -h /usr/local/sox/bin/sox

注:

  • --enable-dl-*生效,必须先安装libtool-ltdl-devel
  • 如果使用--enable-dl-amrnb,可无需安装opencore-amr
  • --enable-dl使用动态链接,推荐搭配--enable-shared,不使用--enable-dl则可以使用--enable-static

安装脚本

[root@ecs ~]# yum install -y gcc lame-devel libmad-devel libid3tag-devel zlib-devel twolame-devel \
flac-devel \
libvorbis-devel opusfile-devel \
wavpack-devel libsndfile-devel file-devel \
alsa-lib-devel pulseaudio-libs-devel \
libtool-ltdl-devel
[root@ecs ~]# cd /usr/local/src
[root@ecs src]# rpm -ivh opencore-amr-0.1.6-1.el7.x86_64.rpm opencore-amr-devel-0.1.6-1.el7.x86_64.rpm
[root@ecs src]# tar -zxvf sox-14.4.2.tar.gz && cd sox-14.4.2
[root@ecs sox-14.4.2]# ./configure --prefix=/usr/local/sox \
--enable-dl-amrnb \
--enable-dl-amrwb \
--enable-dl-lame \
--enable-dl-mad \
--enable-dl-twolame \
--enable-dl-sndfile \
--enable-shared
[root@ecs sox-14.4.2]# make -s && make install
[root@ecs sox-14.4.2]# echo export PATH="\$PATH:/usr/local/sox/bin" >> /etc/profile
[root@ecs sox-14.4.2]# source /etc/profile
[root@ecs sox-14.4.2]# sox --version
sox:      SoX v14.4.2

操作SoX

sox可以处理self-describing和raw格式音频文件,self-describing音频包含一个用于描述编码属性的文件头(如wav、flac、mp3等),而raw格式不包含这些信息,使用sox时需要通过以下选项指定相关信息:

参数说明
-b, --bits指定采样大小
音频采样时用于存储每个样本的数据位数(bits),目前广泛使用的是16bit采样大小
-c, --channels指定通道数
文件包含的音频通道数量。目前常见的有单声道(mono)和双声道(stereo)
-e, --encoding指定编码器
-r, --rate指定采样率
指声音由模拟信号(平滑的波形)转换成数字信号(锯齿的波形)的过程中,每秒从连续信号中提取的用于组成离散信号的样本个数。CD的采样率通常使用44100Hz,即1秒内采样44100次
-t, --type指定音频文件类型
-C指定比特率大小
一个单位时间内编码音频信号占用的存储空间大小
未压缩格式(wav)比特率不能指定,而是通过采样率 × 采样位深 × 声道数计算而来
对于有损压缩,可以按照指定大小做限制
  • 播放音频

    [root@ecs ~]# sox input.wav -t waveaudio -d
    • -t waveaudio:指定输出文件类型为waveaudio(windows特有设备驱动程序别名,代表声卡输出)
    • -d:代表输出设备为默认(default)设备
    • linux系统去掉-t waveaudio(windows专属)
    • 放大音量

      [root@ecs ~]# sox input.wav -t waveaudio -d vol 2.0
    • 2倍速播放

      [root@ecs ~]# sox input.wav -t waveaudio -d tempo 2
    • 2倍速播放

      [root@ecs ~]# sox input.wav -t waveaudio -d speed 2

      speed 2会重新采样,丢掉一半的采样点,加原本1秒的数据压缩到0.5秒内播放完,速度和音调都会翻倍。

  • 录音

    从默认设备(麦克风)读取音频数据,输出(录制)到record.mp3文件。

    [root@ecs ~]# sox -t waveaudio -d record.mp3
  • 获取音频元数据

    [root@ecs ~]# sox --i input.flac
  • 查看比特率

    [root@ecs ~]# sox --i -B input.flac
  • 双声道变单声道

    [root@ecs ~]# sox input.flac -c 1 output.mp3
  • 融合声道

    将左右声道的数据融合(mix)成单声道。

    [root@ecs ~]# sox input.flac output.mp3 remix 1,2
  • 合并声道

    [root@ecs ~]# sox -M left.wav right.wav output.flac

    mp3最多支持双声道,当声道数超过2个时,不能导出mp3。

  • 放大音量

    [root@ecs ~]# sox -v 1 input.wav output.wav

    为了防止过大造成消波,可以使用sox input.wav -n stat -v查看可放大倍数。

  • 裁剪

    [root@ecs ~]# sox input.flac output.wav trim 0 30
    [root@ecs ~]# sox input.flac output.wav trim 2:00 1:00

    trim接收2个参数,第一个参数为裁剪的起始位置,第二个参数为音频持续时间。持续时间可以为正整数(单位秒),也可以使用hh:mm:ss.fs时间格式。

  • 拼接

    [root@ecs ~]# sox input1.mp3 input2.mp3 output.mp3

    拼接不同于-M合并,拼接是将所有音频放在同一个声道按顺序连接到一起。

  • 混合

    [root@ecs ~]# sox -m input.flac -v 1.1 input.wav output.mp3

    将input.flac音量提高1.1倍后与input.wav融合(mix)。

    注:-m(Mix)是将输入音频相同声道的数据进行叠加,叠加后声道数据不可逆。而-M(Merge)是将输入音频存放于不同的声道,每个声道的数据是相互独立的。

标签: none

添加新评论