。wav文件中的原始数据是什么意思?

问题描述 投票:0回答:1

因此,我试图从.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

java audio wav twos-complement javax.sound.sampled
1个回答
0
投票

我建议通过AudioSystem方法将.wav数据导入Java,而不是尝试处理原始字节。引入适当的AudioFormat后,就无需处理数据的标头或任何类型的包组织信息。

当我以这种方式输入数据时,解码后的PCM将存储为带符号的短裤。因此,它的范围是-32768到32767。如果是16位编码,则从两个字节中获取值,并按bigEndian标志指定的顺序进行组合。]

https://docs.oracle.com/javase/9/docs/api/javax/sound/sampled/AudioFormat.html

第二个担心是,不应将各个PCM值视为音量的有用指示。通常,音量是通过对信号进行RMS (root-mean-square)分析来确定的。

[周期函数的所有时间的均方根值等于一期功能。连续函数的RMS值或信号的近似值可以通过以下公式得出:等距观察。

© www.soinside.com 2019 - 2024. All rights reserved.