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)。

我是这门学科的新手,我会很感激你的帮助!(:

c#波形-如何显示麦克风数据

假设这是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;
}