为什么当我尝试更改采样率时 sox 会破坏我的 wav 文件?

Why does sox corrupt my wav file when I try and change the sample rate?

当我尝试使用 sox 更改 wav 文件的采样率时,我得到了一个噪音和垃圾文件以及以下 2 个错误:

sox WARN rate: rate clipped 579 samples; decrease volume?
sox WARN dither: dither clipped 518 samples; decrease volume?

尽管那里有问号,但我一直没有回答。他们更多地是作为一种地位出现的。

我开始使用的是我自己制作的 PCM 文件。规格是:

16 bit signed
big endian
1 channel 
44100 sample rate

我可以将文件 (0.wav) 导入 Audacity,没问题。

然后我使用以下行将文件转换为 wav 文件:

sox -r 44100 -e signed-integer  -b 16 -c 1 0.raw 1.wav

我可以将该文件导入 Audacity,它也很好。

但是当我尝试更改采样率时:

sox 1.wav -r 16000 2.wav

如果有人知道我做错了什么或遗漏了什么,我将不胜感激。另外我把原始的放在这里:http://warptv.com/raw.html

这似乎是字节序问题。您的原始文件以大端字节顺序存储,而 WAV 是 at least most of the time, little-endian.

在这种情况下,您必须明确告知 SoX 原始文件的字节顺序,以便在转换时考虑到这一点。相应的开关是 -B,将您的命令更改为:

sox -r 44100 -e signed-integer -B -b 16 -c 1 0.raw 1.wav

将原始文件正确转换为 wav 文件后,您尝试进行的后续速率转换应该会按预期工作。至少它对我有用。

尝试一下 Audacity,它似乎有一些检测(或猜测)SoX 所缺乏的原始文件的字节顺序的方法,这就是您发现的差异的来源。