2012-05-07 7 views
2

WAVファイルのサウンドデータのサンプル値を取得する必要があります。そのサンプル値を使用することで、毎秒そのサウンドデータの振幅値を取得する必要があります。Cでサウンドデータのサンプル値を取得するには

重要:Naudioライブラリまたはwmpライブラリを使用してオーディオデータのサンプル値を取得する方法はありますか?

byte[] data = File.ReadAllBytes(File_textBox.Text); 
      var samples=new int[data.Length]; 
      int x = 0; 
      for (int i = 44; i <data.Length; i += 2) 
      { 
       samples[x] = BitConverter.ToInt16(data, i); 
       x++; 
      } 

をしかし、私はもっと(-326260)のような負の値を取得しています:

私は、このようにサンプル値を取得しています。それが正しいか間違っていますか? 私は、サンプル値が負であるかどうかを調べることができます。正しい場合は、何が音や静寂を意味しますか?

答えて

1

NAudioはこれを行うことができます。これはライブラリにあります(WaveStreamまたはWaveReaderクラスなどと似ています)。私はそれがあまりにも多くのオーバーヘッドでないなら、それの使用をお勧めすることができます。

自分でロールして、任意のWAVファイルを処理したい場合は、WAVファイルフォーマットを読み、ヘッダを自分で分析する必要があります。

一般に WAVファイルには16ビットのサンプルが含まれていますが、正確なフォーマットによっては、リトルエンディアンまたはビッグエンディアンで保存される可能性があります。

ヘッダーには、サンプルレート、チャンネル数、1サンプルあたりのビット数、1サンプルあたりのバイト数などの情報が含まれています。実際の数学を使って正確に1つのサンプルを得ることができます。

+0

私はWAVファイルフォーマットを研究し、44バイト目以降に音声データがあることを知りました。しかし、私がサンプルの負の値を取得している場合、音の黙っていることを何を意味するのかを知るために必要なことはすべて?私は多くの負のサンプル値を取得していますが、WAVファイルには目立つ音があります。 – azeem

+0

負の値が必要です。あなたはショートパンツを読んでいるので、負の値を持つことは完全に正常です。 16ビットのサンプルは符号付きの値として格納されます。 0は音がないことを意味します。また、あなたのサンプル配列はint(問題ではないはずです)であり、そのサイズが必要以上に長いことに注意してください((data.Length - 44)/ 2で十分です)。 –

+0

いいえ私はショーツを読んでいません。コードで見ることができるので、私はバイトをINT16に変換しています。しかし、私は負の値を得ています。 サンプル配列では、インデックス1で値が-32465、インデックス2が32465であるとします。だから私はこれが何であるのか混乱しています...どちらが音であり、どちらが無音であるかOR 1つはより大きな音であり、1つはより遅い音である。 – azeem

関連する問題