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

c#波形-如何显示麦克风数据,c#,audio,typeconverter,waveform,C#,Audio,Typeconverter,Waveform,我试图显示一个波形(我在麦克风中录制了自己的声音) 将数据保存在字节数组中 此外,我的采样率为44100,样本大小为16bit 我的数组只包含正值,但在一些示例中,我看到值介于-1.0到1.0之间。为什么呢? 另外,如果我的样本大小是16位,并且我使用的是字节数组,那么我需要进行转换。 到目前为止,我一直在尝试这样做: double[] x = new double[Arc.Buffer.Count / 2]; byte[] y = new byte[2];

我试图显示一个波形(我在麦克风中录制了自己的声音)

将数据保存在字节数组中

此外,我的采样率为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));
                }                
double[]x=新的双精度[Arc.Buffer.Count/2];
字节[]y=新字节[2];
对于(i=0;ix[i]=(double)((y[1]假设这是PCM数据,可能有多种WAV/RIFF格式。如果样本大小为16位,则读取的值将在-32768和32767之间进行签名


快速搜索“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;
}          
double[]x=新的双精度[Arc.Buffer.Count/2];
字节[]y=新字节[2];
对于(i=0;ix[i]=((y[1]我不知道为什么你会得到这么大的值,但是为了在曲线中显示数据,我可以推荐Oxyplot。我以前用过它,它有很多很酷而且性能很好的功能。我有一个用于显示的库。我只想知道我的逻辑是否错误……在我的示例中,我每2个字节转换一次(因为我使用的样本大小是16位)我说得对吗?很抱歉,我没有处理字节的经验。你调试过代码以查看到底发生了什么吗?归根结底,你必须知道数据是如何存储在字节数组中的。它可以是
short
s或unsigned
short
或压缩的小范围浮点值之类的版本。仅将原始字节数据转换为
双精度
可能会或可能不会让您到达需要的位置,这取决于原始数据的外观。如果我不得不猜测,可能不会。在您确定原始数据格式之前,我们无法向您提供很多建议。