强大的多媒体命令行工具,第一部分 - SoX

SoX 是一款功能强大的命令行工具,适用于各种类型的音频处理。它作为音频格式转换器非常有用,并且可以用于重新采样音频文件、在字节序之间转换、音频编码以及修改常见音频文件格式的其他属性。

然而,它的主要强大之处在于其效果插件。它可以像数字音频工作站一样对音频应用各种效果。您可以添加回声、过滤频率、降低或增加音量、消除噪音以及对声音样本进行各种其他高级数字信号处理。

它的配套程序 play 可用于在将输出复制到 SoX 文件之前测试特定音频效果的作用。但是,play 不理解 MP3 和 Ogg Vorbis 文件。您必须使用支持的格式之一——最好的选择是未压缩的 wav PCM 格式。它还支持与其配套工具 soxmix 进行音频混合。

非常复杂的滤波和重采样算法使其本身成为音频处理的有用工具。然而,专业的数字音频工作站的一些高级功能却缺失了。

图形音频处理工具 Audacity 是一款用户友好的工具,它具有与 SoX 相同的几种效果。但是,由于 SoX 是一个命令行工具,因此它非常适合轻松编写脚本,这使得在处理数百或数千个声音文件时它非常宝贵。

制作音频效果很困难,因为它既是一门艺术,也是一门科学。您通常必须调整输入值,直到对结果感到满意为止。而且,您必须对不同的文件使用不同的值,因为它们频谱的差异取决于声音文件包含高保真音乐、语音还是静音,以及它是古典音乐还是摇滚音乐等等。

您还可以使用 SoX 和另一个名为 multimux 的配套程序(由 Panteltje 编写)的组合,从矩阵编码源创建 5.1 声道音频文件。

SoX 可用于使用 Linux 中的 v4l2 驱动程序录制 FM 广播或电视音频,或者它可以直接使用 ossdsp SoX 输入从 /dev/dsp 声卡输入录制声音。请注意,声卡对采样率有限制。您不能期望您的声卡能够以任何采样率播放音频。

对于从立体声到单声道的降混、组合多个音轨以及消除音轨开头的静音,这是您需要的应用程序。

图 1. SoX,命令行数字音频工作站

SoX 效果

首先,让我们看看有趣的回声效果

$ play foo.wav echo 0.7 0.6 50 0.2

您需要尝试不同的增益参数以及延迟和衰减值。大多数效果都以秒为单位作为时间值输入。手册页对于值的范围和其他更精细的细节不是很清楚,但确定哪些值有效应该不会太难。

另请注意,在某些情况下,回声效果可能会分散注意力。虽然,我发现它为某些演讲增添了一定的活力。

还有一种 echos 效果。它的功能类似,但更复杂

$ play foo.wav echos 0.4 0.6 900.0 0.25 900.0 0.3

您还可以为回声效果指定较大的延迟,使其听起来怪异

$ play foo.wav echo 0.7 0.89 1000.0 0.1

尝试使用不同的延迟值(代替 1000),直到找到您喜欢的值。

歌曲开头通常有一些静音,这可能会分散播放列表的注意力。静音几秒钟还可以,但时间再长就会令人讨厌。您可以使用 SoX 的 trim 效果插件删除音乐收藏中的静音期。

如果您没有任何 wav 文件,并且您的所有音乐都是 MP3、Ogg、aac 或 ac3 格式,请不要绝望;FFmpeg 可以为您解决这个问题

$ ffmpeg -i foo.mp3 foo.wav

在 SoX 处理后,您可以使用相同的命令但反转参数来将其转换回来。

执行以下操作

$ sox foo.wav trim 0 10 trimmed.wav

删除 foo.wav 中音频的前十秒。您可以通过观察 XMMS 或您用来听音乐的任何播放器中的时间计数器来确定要使用的值而不是十。

当然,SoX 可以做得更好。它可以使用 silence 效果插件为您找出静音量。查看手册页了解详细信息。您还可以指定您认为静音的阈值,因为噪声水平会干扰静音处理。

说到噪声,您可以使用 SoX 轻松过滤具有固定频谱的噪声模式。通常,音频文件中的噪声来自静态源,并且不太难消除。嗯,情况并非总是如此,但是一旦您弄清楚如何从一个输入文件中消除噪声,并且如果所有输入文件都是从同一来源录制的,那么您就可以依靠将该策略用于其他文件。

然而,其他类型的噪声消除根本不容易。它通常需要多次实验,而且大多数时候会适得其反,并消除信号以及噪声。

在这种情况下,您最好使用高保真录音设备。至于处理环境噪声,这又取决于情况——如果是有人在说话,那就很困难;如果是恒定的嗡嗡声,那就不是。执行

$ sox foo.wav -t nul /dev/null trim 0 0.5 noiseprof profile

将从输入文件开头半秒的静音期导出噪声配置文件。稍后,您可以查看这是否消除了噪声

$ play foo.wav noisered profile

然而,第一次对我来说并没有奏效。我曾经非常成功地将非常嘈杂的 DAT 磁带录音轻松转换为水晶般清晰的音频。但是,其他时候我遇到了麻烦。您需要进行一些调整和大量实验。

让我们继续讨论合唱效果。典型的合唱有许多声音(包括人声和乐器声),这些声音稍微不同相。相位通常保持恒定,因为歌手尝试以固定的延迟进行表演。他们可能会尝试纠正这一点,但在大多数情况下,合唱歌手不会完全齐声歌唱。合唱效果完美地再现了这一点。尝试以下操作

$ play foo.wav chorus 0.6 0.9 50.0 0.4 0.25 2.0 -t 60.0 0.32 0.4 1.3 -s

请注意 -s 和 -t 参数;它们用于指定滤波器的正弦和三角图案。

SoX 很好地利用了数学进行 DSP 工作,您可以指定要将哪个原语用于特定效果。您还可以通过使用 - 输出文件名来设置 SoX 管道。而且,您可以在命令行上指定多种效果。例如

$ play foo.wav fade 5

将淡入五秒钟,同时缓慢增加音量。您可以使用相同的效果进行淡出。

以下命令将让您听到魔鬼音乐(倒放歌曲)

$ play foo.wav reverse

SoX 具有几种高度先进的重采样算法,并且本文中我没有介绍几种效果,因此您应该花一些时间自行探索 SoX。SoX 本身非常强大,如果您将其与其他工具(命令行或图形界面)结合使用,它将提供更强大的功能。它接受来自标准输入的输入并将处理后的文件输出到标准输出的能力对于设置音频处理管道非常方便。

Girish Venkatachalam 是一位对 UNIX 深感兴趣的开源黑客。在空闲时间,他喜欢烹饪素食菜肴并真正享用它们。可以通过 girish1729@gmail.com 联系他。

资源

SoX: http://sox.sourceforge.net

Audacity: http://audacity.sourceforge.net

音频物理学: http://www.harmony-central.com

音频工程: http://www.ee.washington.edu/conselec/CE/kuhn/audio/95x3.htm

HRTF: http://sound.media.mit.edu/KEMAR.html

加载 Disqus 评论