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

ces*_*sar 27 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>
Run Code Online (Sandbox Code Playgroud)

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

sox WARN rate: rate clipped 48 samples; decrease volume?
sox WARN dither: dither clipped 44 samples; decrease volume?
Run Code Online (Sandbox Code Playgroud)

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

小智 35

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

例:

sox -v 0.99 <source_wav> -b 16 <dest_wav> channels 1 rate 16000 trim <startTime> =<endTime>
Run Code Online (Sandbox Code Playgroud)

如果仍然出现削波,则音频很可能严重削波(即disorted)与开始(这是与现代音乐常见;看到维基百科:音量竞赛)等的警告可以忽略,没有额外的失真被引入.

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

  • 我重读了文档并意识到我错过了`-G`选项,它自动修复了增益.我想避免设置任意数字,所以决定使用`-G`选项.如果你在你的答案中附加了使用保护选项,我很乐意把这个给你,因为它非常有用. (4认同)
  • 您还可以使用'--norm'选项来防止剪辑,如果音频太安静,则增加它以使其达到最大音量而不剪辑. (2认同)