【发布时间】:2020-06-20 19:47:05
【问题描述】:
所以我试图从 .wav 文件中提取不同样本的幅度,以便能够根据时间重建波形。在研究 .wav 文件的格式时,我发现了一些非常有用的信息。但是,当涉及到原始数据部分时,我感到很困惑。我发现的文章说,“在 16 位 PCM 的情况下,16 位样本存储为 2 的补码无符号整数,范围从 0 到 65535"。我很困惑,因为如果文件没有符号,我不知道文件如何区分正振幅和负振幅。例如,如果一个振幅是 5,表示为二进制的 00000000 00000101,那么使用 2 的补码 -5应该表示为 11111111 11111011 ,它是十进制的 65531 作为整数。这让我认为 -5 的幅度被认为比 +5 幅度大得多。显然这不是它的工作原理,所以我做错了什么?另外,当我将 .wav 文件保存到二进制数组并输出值时,我得到负数!如果文章说只应该存储 0 到 65535 之间的值,这些负数是从哪里来的。只是很困惑,真的需要把事情弄清楚。我所指的文章的链接附在下面。作者所说的引述在页面的最底部。谢谢。
http://www.ievs.ch/projects/var/upload/Documentation%20Microsoft%20Wave%20File%20Format.pdf
【问题讨论】:
-
1111111111111011 不是 -5 和 65531 - 如果解释为有符号整数(它是),它是 -5,如果解释为无符号整数(它不是),它是 65531。
-
“2's-complement unsigned”在术语上不是矛盾的吗?
-
@kaya3。但是根据文章,它被存储为无符号整数,这就是我感到困惑的地方。文章是不是不正确?
-
正如 khelwood 所说,没有“二进制补码无符号整数”之类的东西,所以这篇文章明显不正确。
标签: java audio wav twos-complement javax.sound.sampled