sox 效果:可重新触发的静音

Posted

技术标签:

【中文标题】sox 效果:可重新触发的静音【英文标题】:sox effect: retriggerable silence 【发布时间】:2016-05-03 08:14:17 【问题描述】:

要检测我正在使用这个 sox 命令播放的语音:

rec voice.wav silence 1 5 30% 1 0:00:02 30%

它应该在输入音量提高到大约 30% 的阈值时开始录制,并在 2 秒后停止音频低于相同的阈值。

它有效。但是,如果它可以“可重新触发”,那就更好了。我的意思是:在音频低于阈值并且音频再次上升之后,它应该继续注册(即用户仍在说话)。

只有在检测到整整 2 秒的静音时才会停止。 或者你有没有推荐其他的“VOX”工具?

【问题讨论】:

文档说:“对于低于周期,持续时间指定在不再复制音频之前必须存在的一段静默时间。通过指定更高的持续时间,可以在音频。例如,如果您有一首歌曲,预期中间有 1 秒的无声,结尾有 2 秒的无声,则可以使用 2 秒的持续时间跳过中间的无声。所以它应该像我预期的那样工作。 【参考方案1】:

我花了很多时间尝试用 SOX 来做 VOX,并让它工作得相当好。我一直在使用 Audacity 查看生成的波形,并确定了以下 SOX 命令...

rec snd.wav silence 1 .5 2.85% 1 1.0 3.0% vad gain -n  : newfile : restart

这将:

等到它听到超过阈值的活动半秒,然后开始录制(静音 1 .5 2.85%) 当听觉活动降至零并持续一秒钟时停止录制 (... 1 1.0 3.0%) 修剪任何初始静音直到语音检测 (vad) 归一化增益 (gain -n) 将结果存储到新文件中(snd001.wav、snd002.wav) 重启进程

要获得正确的“静音”数字需要大量的反复试验,并且取决于环境噪音以及麦克风的灵敏度。我正在通过 USB 在 Raspberry Pi 上使用 Logitech QuickCam IM 中的麦克风。

在旁注中,这整件事抱怨以下......

rec FAIL formats: can't open input  `default': snd_pcm_open error: No such file or directory

...直到我在环境中创建了这个变量:

export AUDIODEV=hw:1,0

再一次 - 这涉及到对“静音”值的大量实验,并且需要针对您的环境进行一些调整。

【讨论】:

以上是关于sox 效果:可重新触发的静音的主要内容,如果未能解决你的问题,请参考以下文章

修剪音频文件并获得静音之间的部分

如何使用 iOS 的 soxlib 删除开始和结束静音

使用 SoX 更改音频文件中某个时间范围的音量级别

在 ffmpeg 中添加静音音频

如何在有静音的地方批量拆分音频文件?

SoX - Java 的声音交换