2011-07-30 354 views
20

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

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

,它会只改变采样率,如果它不是16000赫兹。它做什么,它应该与相同规格的文件,但对不同的采样率的文件,我得到:

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

我应该如何处理这种不降低音频的质量?请注意,我对信号处理一无所知。

回答

29

正如该工具所建议的那样,尝试减小音量,例如,通过前面加上-v 0.99(或0.98等)。体积的这种小的变化是不可察觉的。

例子:

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

如果仍然出现削波,则音频可能严重削波(即disorted)开始与(这是与现代音乐常见;看到维基百科:Loudness war)等的警告可以被忽略 - 不会引入额外的失真。

正如在评论中提到的那样,可以给出-G选项,它会自动调整避免削波所需的体积(代价是稍微多一点的CPU时间,即使用-G稍微慢一些) 。

+4

我重读了文档,并意识到我错过了'-G'选项,它自动修复增益。我想避免设置一个任意数字,所以决定使用'-G'选项。如果您将防护选项的用法附加到您的答案中,我会很高兴将此信息提供给您,因为这些信息非常丰富。 – cesar

+1

您还可以使用'--norm'选项来防止剪辑,并且如果音频太安静,请增加它以使其成为无剪辑的最大音量。 – drojf

0

我有问题。修改wav文件的编码固定它:

sox input.wav -e signed-integer output.wav