我正在使用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运行稍慢).