使用 Sound eXchange (SoX) 操作音频文件的15个超棒示例

举报
Tiamo_T 发表于 2021/12/08 08:14:26 2021/12/08
【摘要】 SoX代表Sound eXange。SoX 是一个跨平台的命令行音频实用工具,适用于 Linux、Windows 和 MacOS。在处理音频和音乐文件时,它在以下方面非常有用。 音频文件转换器 编辑音频文件 更改音频属性 添加音效 加上许多先进的声音处理功能

SoX代表Sound eXange。SoX 是一个跨平台的命令行音频实用工具,适用于 Linux、Windows 和 MacOS。在处理音频和音乐文件时,它在以下方面非常有用。

  • 音频文件转换器
  • 编辑音频文件
  • 更改音频属性
  • 添加音效
  • 加上许多先进的声音处理功能


一般来说,音频数据通过以下四个特征来描述:

  1. 速率 - 采样率以每秒采样数为单位。例如,44100/8000
  2. 数据大小 – 数据存储的精度。例如,8/16 位
  3. 数据编码——数据类型使用什么编码。例如,u-law,a-law
  4. 通道 - 音频数据中包含多少通道。例如,立体声 2 通道

SoX 支持 20 多种音频文件格式。要获取所有支持格式的列表,请从命令行执行 sox -h。命令行音频/音乐工具的主要优点之一是易于在脚本中使用,以在批处理模式下执行更复杂的任务。

下面提到的所有 15 个示例都可用于在 Unix、Windows 和 MacOS 上操作音频文件。确保从SoX – Sound eXchange 下载页面下载适用于您平台的相应 SoX 实用程序。

1. 将多个音频文件合并为一个文件

使用 -m 标志,sox 将两个输入文件相加以生成其输出。下面的示例添加了 first_part.wav 和 second_part.wav,将结果保留在 Whole_part.wav 中。为此,您也可以使用 soxmix 命令。

$ sox -m first_part.wav second_part.wav whole_part.wav

(or)

$ soxmix first_part.wav second_part.wav whole_part.wav

2. 提取部分音频文件

修剪可以从音频文件中修剪掉不需要的音频。

Syntax : sox old.wav new.wav trim [SECOND TO START] [SECONDS DURATION].
  • SECOND TO START – 语音文件中的起点。
  • SECONDS DURATION – 要删除的语音文件的持续时间。

下面的命令将从 input.wav 中提取前 10 秒并将其存储在 output.wav 中

$ sox input.wav output.wav trim 0 10

3. 使用选项 -v 增加和减少音量

选项 -v 用于更改(增加或减少)音量。


增加音量

$ sox -v 2.0 foo.wav bar.wav

降低音量

如果我们需要降低某些文件的音量,我们可以使用负数来降低它们。较低的负数会变得更软。在以下示例中,第一个命令 (-0.5) 将比第二个命令 (-0.1) 响亮

$ sox -v -0.5 srcfile.wav test05.wav

$ sox -v -0.1 srcfile.wav test01.wav

4. 获取音频文件信息

stat 选项可以提供有关给定音频文件的大量统计信息。-e 标志告诉 sox 除了统计信息之外不要生成任何输出。

$ sox foo.wav -e stat
Samples read: 3528000
Length (seconds): 40.000000
Scaled by: 2147483647.0
Maximum amplitude: 0.999969
Minimum amplitude: -1.000000
Midline amplitude: -0.000015
Mean norm: 0.217511
Mean amplitude: 0.003408
RMS amplitude: 0.283895
Maximum delta: 1.478455
Minimum delta: 0.000000
Mean delta: 0.115616
RMS delta: 0.161088
Rough frequency: 3982
Volume adjustment: 1.000

5. 播放音频歌曲

Sox 提供播放和录制声音文件的选项。此示例说明如何在 Unix、Linux 上播放音频文件。播放声音文件是通过将文件复制到设备专用文件 /dev/dsp 来完成的。以下命令播放文件music.wav: 选项-t 指定文件/dev/dsp 的类型。

$ sox music.wav -t ossdsp /dev/dsp

您也可以使用 play 命令来播放音频文件,如下所示。

Syntax :play options Filename audio_effects

$ play -r 8000 -w music.wav

6. 向后播放音频歌曲

使用“反转”效果来反转声音文件中的声音。这将反转文件并将结果存储在 output.wav 中

$ sox input.wav output.wav reverse

您也可以使用播放命令在不修改源文件的情况下反向播放歌曲,如下所示。

$ play test.wav reverse

7. 录制语音文件

'play' 和 'rec' 命令是 sox 的配套命令。/dev/dsp 是数字采样和数字录音设备。读取设备会激活 A/D 转换器以进行录音和分析。/dev/dsp 文件适用于播放和录制声音样本。

$ sox -t ossdsp /dev/dsp test.wav

您也可以使用 rec 命令来录制语音。如果 SoX 被调用为“rec”,则默认声音设备用作输入源。

$ rec -r 8000 -c 1 record_voice.wav

8. 改变声音文件的采样率

要更改声音文件的采样率,请使用选项 -r 后跟要使用的采样率,单位为赫兹。使用以下示例,将文件“old.wav”的采样率更改为 16000 Hz,并将输出写入“new.wav”

$ sox old.wav -r 16000 new.wav

9. 改变声音文件的采样大小

如果我们增加采样大小,我们将获得更好的质量。音频的样本大小通常表示为 8 位或 16 位。8 位音频更常用于录音。

  • -b样本数据大小(以字节为单位)
  • -w以字为单位的样本数据大小
  • -l以长字为单位的样本数据大小
  • -d双长字中的样本数据大小

以下示例将 8 位音频文件转换为 16 位音频文件。

$ sox -b input.wav -w output.wav

10. 改变通道数

以下示例将单声道音频文件转换为立体声。使用选项 -c 指定通道数。

$ sox mono.wav -c 2 stereo.wav

有一些方法可以将立体声文件转换为单声道。即从立体声文件中获取单个通道。

选择特定频道

这是通过使用 avg 效果和一个指示要使用的通道的选项来完成的。选项是 -l 代表左边,-r 代表右边,-f 代表前面,-b 代表后面。以下示例将提取左声道

$ sox stereo.wav -c 1 mono.wav avg -l

平均频道

$ soxstereo.wav -c 1 mono.wav avg

11. Audio Converter – 音乐文件格式转换

Sox 可用于将一种音频格式转换为另一种格式。即从一种编码(ALAW,MP3)到另一种。Sox 可以通过解析文件扩展名来识别输入和所需的输出格式。它将使用 infile.ulaw 并创建一个名为 outfile.gsm 的 GSM 编码文件。您还可以使用 sox 将wav转换为 mp3

$ sox infile.ulaw outfile.gsm

如果文件的名称中没有扩展名,使用“-t”选项我们可以表达我们的意图。选项 -t 用于指定编码类型。

$ sox -t ulaw infile -t gsm outfile

12. 产生不同类型的声音

使用合成器效果,我们可以生成许多标准波形和噪声类型。虽然此效果用于生成音频,但仍必须提供输入文件,'-n' 选项用于指定输入文件为空文件。

$ sox -n synth len type freq
  • len – 要合成的音频长度。指定时间长度的格式为 hh:mm:ss.frac
  • 类型是正弦、方波、三角波、锯齿波、梯形、exp、[white]noise、pinknoise、brown-
    noise 之一。默认为正弦
  • req – 合成开始/结束时的频率,以 Hz 为单位

以下示例生成一个 3 秒 8000 kHz 的音频文件,其中包含从 300 到 3300 Hz 扫描的正弦波

$ sox -r 8000 -n output.au synth 3 sine 300-3300

13. 加速音频文件中的声音

要加快或减慢文件的声音,请使用 speed 来修改文件的音高和持续时间。这提高了速度并减少了时间。默认因子是 1.0,它不会改变音频。2.0 速度加倍,因此时长减少一半,音高增加一个间隔。

Syntax: sox input.wav output.wav speed factor

$ sox input.wav output.wav speed 2.0

14. 在单个命令中对音频文件进行多次更改

默认情况下,SoX 尝试使用与输入数据相同的数据类型、采样率和通道数来写入音频数据。如果用户希望输出文件具有不同的格式,则用户必须指定格式选项。如果输出文件格式不支持与给定输入文件格式相同的数据类型、采样率或通道数,则 SoX 将自动选择它支持的最接近的值。

将 wav 转换为原始格式。以下示例在单个命令行中转换采样率、采样大小、通道。

$ sox -r 8000 -w -c 1 -t wav source -r 16000 -b -c 2 -t raw destination

15. 将原始音频文件转换为 MP3 音乐文件

没有办法直接将原始文件转换为 mp3 文件,因为 mp3 需要来自原始文件的压缩信息。首先我们需要将raw转换成wav。然后将 wav 转换为 mp3。在下面的示例中,选项 -h 表示高质量。

将原始格式转换为 Wav 格式:

$ sox -w -c 2 -r 8000 audio1.raw audio1.wav

将 Wav 格式转换为 MP3 格式:

$ lame -h audio1.wav audio1.mp3
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。