转换采样率时减少/去除SoX中的削波

时间:2011-07-30 08:56:55

标签: audio sox

我正在使用SoX将一组wav文件修剪成16kHz,16bit,单声道wav文件(这将是其中一个初始wav文件的子集)。大多数源wav文件已经设置为此规范,但是,我发现其中一些具有不同的采样率。由于它将使用ProcessBuilder在Java中自动化,我想我可以使用以下命令:

sox <source_wav> -b 16 <dest_wav> channels 1 rate 16000 trim <startTime> =<endTime>

如果它不是16000 Hz,它只会改变采样率。它对具有相同规范的文件执行了它应该做的事情,但是对于具有不同采样率的文件,我得到:

sox WARN rate: rate clipped 48 samples; decrease volume?
sox WARN dither: dither clipped 44 samples; decrease volume?

如何在不降低音频质量的情况下处理此问题?请注意,我对信号处理一无所知。

1 个答案:

答案 0 :(得分:33)

根据该工具的建议,尝试稍微减小音量,例如:通过前面的-v 0.99(或0.98等)。体积的这种微小变化是难以察觉的。

示例:

sox -v 0.99 <source_wav> -b 16 <dest_wav> channels 1 rate 16000 trim <startTime> =<endTime>

如果你仍然剪辑,那么音频很可能会被严重限制(即中断)(这在现代音乐中很常见;参见维基百科:Loudness war)所以警告可以忽略 - 没有额外的失真正在推出。

如评论中所述,可以给出-G选项,它会自动调整所需的音量以避免剪辑(以一点额外的CPU时间为代价,即使用-G运行稍慢)。