我正在使用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?
如何在不降低音频质量的情况下处理此问题?请注意,我对信号处理一无所知。
答案 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运行稍慢)。