c#波形-如何显示麦克风数据
本文关键字:显示 麦克风 数据 波形 何显示 | 更新日期: 2023-09-27 18:15:55
我正试图显示一个波形(我在麦克风中记录了我自己)。
将数据保存在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)。
我是这门学科的新手,我会很感激你的帮助!(:假设这是PCM数据,那么有许多可能的WAV/RIFF格式。如果你的样本大小是16位,你正在读取的值将被符号化,在-32,768和32,767之间。
快速搜索"wav riff格式"出现了一个关于解析数字音频数据的资源。
由于您正在处理16位带符号样本,因此值将在-32768和32767之间。要得到-1.0到1.0的双精度范围,你需要除以32768.0
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] = ((y[1] << 8) | (y[0] & 0x00FF)) / 32768.0;
}