16bit WAVE取值范围

16bit WAVE value range

我遇到过这个 MSDN link: Intro to Audio Programming, Part 2: Demystifying the WAV Format。 post 表示:

16-bit samples range from -32760 to 32760

这不是 +/-(2^16)/2 因为

some crazy business involving Endianness and 2’s complement

这里有很多错误post,但这部分最让我恼火。如果有的话,其中有多少是真的?

post在这方面是错误的。首先,字节顺序与任何事情都没有任何关系。但是 2s 补码存在一个问题,即负值多于正值。通常在执行信号处理时,这些值将被转换为 -1.0 到 1.0 范围内的双精度,以便稍后转换为所需的输出位分辨率。如果您要乘以 32768 并转换为整数,那么您显然会在正数 1.0 上溢出。所以最好乘以 32767。我不知道这是否以任何方式形式化,但根据我的经验,它就是这样。如果您遵循这个假设,您 运行 遇到一个值为 -32768 的波形文件的风险很小,并且在转换为浮点数时您会得到一个略小于 -1.0 的数字。

I don't know if this is formalized in any way.

是的!这是!这两个似乎是 official RIFF spec and Broadcast WAVE format spec(应该被 WAVE 兼容应用程序使用)断言一个非常清晰的 16 位样本范围为 -32768 到 32767,正如 jaket 所假设的那样。

我发现我经常需要对 MSDN 文章持保留态度,但有时很难忽略它们,因为它们的呈现具有权威性。在网上搜索 "wav 32760" 将发现这篇文章造成的一些破坏。