如何可视化 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));
我有一个我知道有效的 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));