如何可视化 PCM 数据

How can I visualize PCM data

我有一个我知道有效的 PCM 数据文件。我可以播放它,将它编辑成片段等,它会一直播放,就像单个片段一样。

但是当我尝试将它从字节转换为短裤时

bytes[i] | (bytes[i+1] << 8)

文件为16位,单通道,44100采样。我在视觉上看不到任何看起来像 wave 文件的东西。

作为测试,我在消音器中间录制了一个非常响亮的声音。当我尝试这个时,我根据摄入量制作的图表仍然和其他图表一样。我以某种方式做错了吗?或者误解我是什么 reading/attempting?

我要做的就是检测一个非常低的阈值以找到单词间隙。

谢谢

我的灵能表明这是 big-endian vs little-endian 的事情。

如果源文件以大端存储样本,这可能是您想要的:

(bytes[i] << 8) | (bytes[i+1])

就其价值而言,WAV 文件是小端格式的。

其他可能性包括:

我没有看到您的代码,但也许您的代码在每次循环迭代中仅将 i 递增 1 而不是递增 2。 (我在自己的代码中犯的一个常见错误)。

签名类型或转换。明确说明如何对有符号和无符号进行位操作。我不确定 "bytes" 是 "unsigned char" 还是 "char" 的数组。我也不确定 "char" 默认为签名还是未签名。这可能会更好:

unsigned char b1 = (unsigned char)(bytes[i]);
unsigned char b2 = (unsigned char)(bytes[i+1]);
short sample = (short)((b1 << 8) | (b2));