32

我正在使用 SoX 将一组 wav 文件修剪为 16kHz、16 位、单声道 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?

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

4

2 回答 2

42

根据该工具的建议,尝试稍微降低音量,例如在前面加上 -v 0.99(或 0.98 等)。如此小的体积变化是难以察觉的。

例子:

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

如果您仍然得到削波,那么音频可能一开始就被严重削波(即失真)(这在现代音乐中很常见;请参阅维基百科:响度战争),因此可以忽略警告 - 不会引入额外的失真。

正如评论中提到的,可以给出-G 选项,该选项将自动对避免削波所需的音量进行任何调整(以额外的CPU 时间为代价,即使用-G 运行速度稍慢)。

于 2011-07-31T15:06:46.893 回答
0

我有这个问题。更改 wav 文件的编码修复了它:

sox input.wav -e signed-integer output.wav
于 2016-05-12T11:53:56.837 回答