最近用了SoX库的Silence,发现官方的教程读得我是云里雾里,所以特地写一个教程学习一下。
我生成了一个60ms白噪声的音频文件,随后把其中几个部分做成静音,生成的音频如下:
例子1.切除音频中开始的静音
above-period 参数放在silence参数之后,如果你想使用这个过滤器,首先要设置1。这个例子大致翻译为:调整静音(任何小于1%音量的声音),直到我们遇到持续时间超过0.1秒的声音。上面命令的输出是:
我们发现该命令已经把最开始的静音剪掉了。
例子2. 忽略噪声爆发
通过把duration的参数设置为0.3,我们告诉SoX在音频的最开始的时候忽略噪声爆发。
通过调整此持续时间参数,我们可以忽略短弹出和音频点击。
例子3. 未检测到声音时停止录制
现在介绍below-period 的各个参数,跟above-period参数一样,设置为1表示使用该过滤器,上面的命令可以翻译为:
直到我们检测至少0.3秒的噪声,我们才裁剪静音。
这个操作返回了前4秒的噪音。
例子4. 裁剪所有的静音
通过把below-period参数设置为-1,我们可以通过允许过滤器在检测到指定持续时间的噪声后,重新启动来修剪剪辑中间的静音实例。
但是在这个例子中,不可能检测到过去的静音。
例子5. 忽略短暂的静音
和例子2相同,我们可以告诉SoX来忽略小片段的静音(在这个例子里为0.5)。
例子5. 基于静音来分割音频
使用SoX’s newfile pseudo-effect 允许我们基于静音的片段来切割一个音频。在这个例子中,当前检测到超过5秒的静音以后,SoX会切割,切割的结果会得到out001.wav,out002,.....
其中包括在移动到下一个效果链之前开始写入新输出文件的newfile和将移动回第一个效果链的restart,
必须将Pseudo-effects指定为链中的第一个效果和链中的唯一效果(它们必须在指定之前和之后具有:)
参考文献
[1]. The SoX of Silence. https://digitalcardboard.com/blog/2009/08/25/the-sox-of-silence/comment-page-2/
[2]. Stripping silence with sox. https://stackoverflow.com/questions/41273701/stripping-silence-with-sox
[3]. rec(1) - Linux man page. https://linux.die.net/man/1/rec