Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用C语言中的NAUDIO分析WAVE文件中的数据#_C#_Wav_Naudio_Waveform - Fatal编程技术网

C# 用C语言中的NAUDIO分析WAVE文件中的数据#

C# 用C语言中的NAUDIO分析WAVE文件中的数据#,c#,wav,naudio,waveform,C#,Wav,Naudio,Waveform,我想从一个.wav文件到屏幕上画出一个小周期的波形。以下是我迄今为止创建的代码: NAudio.Wave.WaveFileReader wave = new NAudio.Wave.WaveFileReader(@"C:\test.wav"); long le = wave.Length; byte[] data = new byte[le]; wave.Read(data, 0, (int)le); for (int i = 0;

我想从一个.wav文件到屏幕上画出一个小周期的波形。以下是我迄今为止创建的代码:

      NAudio.Wave.WaveFileReader wave = new NAudio.Wave.WaveFileReader(@"C:\test.wav");
      long le = wave.Length;
      byte[] data = new byte[le];

      wave.Read(data, 0, (int)le);

      for (int i = 0; i < 100; i++)
      {
            System.Console.WriteLine(data[i]);
      }

      System.Console.ReadKey();
NAudio.Wave.waveilereader Wave=新的NAudio.Wave.waveilereader(@“C:\test.wav”);
long le=波长;
字节[]数据=新字节[le];
波形读取(数据,0,(int)le);
对于(int i=0;i<100;i++)
{
System.Console.WriteLine(数据[i]);
}
System.Console.ReadKey();

我只是想得到datachunk的前100个样本,但我不完全理解结果。这些数字是声波的振幅值吗

它们是振幅,但每个通道的“振幅”每秒变化44100次

试试这篇文章:


如果失败了,请记住这一点。声音是空气压力的变化。空气压力变化是由扬声器通过电压变化产生的。电压变化是通过快速激活数模转换器上的各种输入电平产生的。输入电平(数字)是从文件中读取PCM数据时得到的值。

您的WAV文件可能是16位的(您可以通过查看WaveileReader的WaveFormat属性和位深度来检查)。在这种情况下,每两个字节代表一个样本。您可以使用
BitConverter.ToInt16
逐个检查每个样本的值。例如,您可以将代码修改为如下内容:

  NAudio.Wave.WaveFileReader wave = new NAudio.Wave.WaveFileReader(@"C:\test.wav");
  byte[] data = new byte[200];

  int read = wave.Read(data, 0, data.Length);

  for (int i = 0; i < read; i+=2)
  {
        System.Console.WriteLine(BitConverter.ToInt16(data,i));
  }

  System.Console.ReadKey();
NAudio.Wave.waveilereader Wave=新的NAudio.Wave.waveilereader(@“C:\test.wav”);
字节[]数据=新字节[200];
int read=wave.read(数据,0,数据长度);
对于(int i=0;i
因此,如果我做对了,这些数据就是pcm编码中的振幅值(一个样本长度为8位),如果我想绘制正弦波,我需要创建某种类型的d/a转换器。但我怎么能做到这一点呢?