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 を調べることで確認できます)。その場合、2 バイトごとに 1 つのサンプルが表されます。BitConverter.ToInt16各サンプルの値を 1 つずつ調べるために使用できます。たとえば、コードを次のように変更できます。

  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 に答える