【发布时间】:2011-01-06 15:04:19
【问题描述】:
我有一个问题。 在 Java 中,我需要从 wav 文件中读取样本。 文件格式为:wav, PCM_SIGNED, signed int of 2bytes = 16bits, little endian... 该对象读取 BYTES 中的音频样本,我需要将这两个字节转换为一个双精度值。 我尝试使用这个公式,但它并不完全正确:
mono = (double)((audioBytes[k] & 0xFF) | (audioBytes[k + 1] << 8));
将结果与 Matlab 进行比较,我总是注意到 Matlab 中的实际值与 Java 中转换后的值之间的差异。 有人可以帮我吗? 谢谢, 戴夫
【问题讨论】:
-
你有一个短字节序列的例子,你的预期输出是什么,你的实际输出是什么?
-
如果audioBytes[k]是一个字节,audioBytes[k] & 0xFF == audioBytes[k],所以掩码没用。
-
如果 audioBytes[k] == -1, audioBytes[k] & 0xFF == 255(在我将结果传递给 System.out.println 之后)。
-
你是对的,我错了......而且很尴尬:)
-
这是我在 Matlab 中的期望值:-3.295876945438848e-05,而在 Java 中是:-3.0517578125E-5。奇怪的事实是 Matlab*32768 = -1.0800 而 Java*32768 = .1
标签: java double wav signed pcm