阻止 SoX 进行裁剪?

Prevent SoX from doing the clipping?

我有一个很重 "overflowed" 的 WAV 文件(样本以浮点 32 位格式编写):样本范围不是 [-1.0,+1.0],而是 [-5.0,+5.0] ].

使用 SoX 从 WAV 文件中获取原始 PCM 音频样本:

sox --bits 32 --channels 1 --encoding floating-point --rate 48000 input.wav output.raw

我收到警告:

sox WARN sox: `input.wav' input clipped 1163400 samples
sox WARN sox: `output.raw' output clipped 605664 samples; decrease volume?

当我查看输出时,我看到样本被裁剪了,范围现在是 [-1.0,+1.0]。然而,这不是我想要的。

我希望输出与输入完全相同,只是格式不同(RAW 而不是 WAV)。我需要使用命令行工具来完成任务。有没有办法阻止 SoX 进行剪辑?

我从SoX mailing list那里得到了答案。

所需的行为是不可能的,但是,在这种特定情况下,有一种解决方法。将输入样本编码覆盖为 32 位 有符号整数 而不是浮点数,值将被原封不动地复制;由于输出是无标头的,因此 SoX 认为样本是什么并不重要。

所以,这有效:
sox --bits 32 --channels 1 --encoding signed-integer --rate 48000 input.wav output.raw