使用C#中的NAUDIO分析来自WAV文件的数据块

时间:2012-09-28 19:41:27

标签: 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; i < 100; i++)
      {
            System.Console.WriteLine(data[i]);
      }

      System.Console.ReadKey();

我只是试图获得datachunk的前100个样本,但我不完全理解结果。这些数字是语音波的振幅值吗?

2 个答案:

答案 0 :(得分:2)

您的WAV文件很可能是16位(您可以通过查看WaveFileReader的WaveFormat属性并查看BitDepth来查看)。在这种情况下,每两个字节代表一个样本。您可以使用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();

答案 1 :(得分:0)

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

试试这篇文章:http://en.wikipedia.org/wiki/Pulse-code_modulation

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