【发布时间】:2015-10-02 15:11:46
【问题描述】:
我正在尝试显示波形(我在麦克风中记录了自己)。
将数据保存在 byte 数组中。
另外我的采样率为 44100,采样大小为 16bit。
我的数组只包含正值,但在某些示例中,我看到这些值介于 -1.0 到 1.0 之间。这是为什么? 此外,如果我的样本大小是 16 位并且我使用的是字节数组 - 我需要进行转换。 到目前为止,这是我尝试做的:
double[] x = new double[Arc.Buffer.Count / 2];
byte[] y = new byte[2];
for (i = 0; i < Arc.Buffer.Count; i++)
{
Array.Copy(Arc.Buffer.ToArray(), 2*i, y, 0, 2);
x[i] = (double)((y[1] << 8) | (y[0] & 0x00FF));
}
但在这段代码之后,我的 x 数组包含巨大的值(而不是 -1.0 到 1.0)。
我是这个主题的新手,如果有任何帮助,我将不胜感激! (:
【问题讨论】:
-
我不知道为什么你会得到巨大的值,但是为了以曲线显示数据,我可以推荐 Oxyplot。我以前用过它,它有很多很酷且性能良好的功能
-
我有一个库供展示。我只想知道我的逻辑是否错误......在我的示例中,我将每 2 个字节(因为我使用 16 位的样本大小)转换为两倍。我说的对吗?
-
很抱歉,我没有任何使用字节的经验。您是否调试了代码以查看究竟发生了什么?
-
嗯,归根结底你必须知道数据是如何存储在字节数组中的。它可以是
shorts 或无符号short或压缩类型的小范围浮点或其他。将原始字节数据转换为double可能会或可能不会将您带到您需要到达的位置,具体取决于原始数据的外观。如果我不得不猜测,可能不会。在您弄清楚原始数据格式之前,我们无法为您提供很多建议。
标签: c# audio typeconverter waveform