2

我想从 .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();

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

4

2 回答 2

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();
于 2012-09-28T21:44:23.620 回答
0

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

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

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

于 2012-09-28T19:56:19.380 回答