我正在使用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?

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

最佳答案

根据工具的建议,尝试稍微减小音量,例如之前加上-v 0.99(或0.98等)。如此小的音量变化是不可察觉的。

例:

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

如果您仍然可以剪辑,则音频可能会被严重剪辑(即失真)(这在现代音乐中很常见;请参阅Wikipedia:Loudness war),因此可以忽略警告-不会引入其他失真。

如评论中所述,可以指定-G选项,该选项将自动对避免削波所需的音量进行任何调整(以占用一点额外的CPU时间为代价,即使用-G运行时会稍微慢一些)。

关于audio - 转换采样率时减少/消除SoX中的削波,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6882125/

10-11 06:58