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

时间:2015-10-02 15:11:46

标签: c# audio typeconverter waveform

我试图显示波形(我在麦克风中录制了我自己)。

将数据保存在字节数组中。

此外,我的采样率为44100,样本量 16位

我的数组仅包含正值,但在某些示例中,我看到值介于 -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)。

我是这个主题的新人,我将不胜感激任何帮助! (:

2 个答案:

答案 0 :(得分:0)

假设这是PCM数据,可以使用多种WAV / RIFF格式。如果您的样本大小为16位,则您正在读取的值将在-32,768和32,767之间进行签名。

快速搜索“wav riff formats”,发现a resource有关解析数字音频数据的信息。

答案 1 :(得分:0)

由于您正在处理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;
}