如何可视化PCM数据

时间:2016-06-26 17:47:03

标签: android visualization pcm

我有一个我知道有效的PCM数据文件。我可以播放它,将它编辑成碎片等等,它将始终播放,以及各个部分。

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

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

该文件为16位,单通道和44100采样。我看不到任何看起来像波形文件的东西。

作为测试,我在消音器中录制,中间有一个非常响亮的声音。当我尝试这个时,我从我的摄入量制作的图表仍然像其他图表一样。我在某种程度上做错了吗?或者误解我正在阅读/尝试的内容?

所有我想做的就是检测一个非常低的阈值来找到一个单词间隙。

由于

1 个答案:

答案 0 :(得分:3)

我的精神力量表明这是big-endian vs little-endian事。

如果源文件以big-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));