2012-12-19 8 views
6

をオーディオサンプルを再生するには、私はNAudioを通じて抽出されたオーディオサンプルを持って、私はパラメータを知っている:純どのように直接

  • チャンネル
  • サンプルあたりのバイト数、再生するためにどのよう
  • サンプルレート

を.Net api /その他の.Netライブラリを使用してサンプルします。

ここでコード:

openFileDialog1.ShowDialog(); 
    using (var reader = new Mp3FileReader(openFileDialog1.FileName)) 
    { 
     var pcmLength = (int)reader.Length; 
     var _leftBuffer = new byte[pcmLength/2]; 
     var buffer = new byte[pcmLength]; 
     var bytesRead = reader.Read(buffer, 0, pcmLength); 
     int index = 0; 
     for (int i = 0; i < bytesRead; i += 4) 
     { 
      //extracting only left channel 
      _leftBuffer[index] = buffer[i]; 
      index++; 
      _leftBuffer[index] = buffer[i + 1]; 
      index++; 
     } 

     // How to play _leftBuffer (Single channel, 2 bytes per sample, 44100 samples per secound) 
} 
+0

のための私の答えhttp://stackoverflow.com/questions/1284322/playing-a-wav-file- in-net/20010577#20010577はNAudioを使ってファイルを再生します。 – Pat

答えて

1

YES、私が見つけた解決策:A low-level audio player in C#

全働いコード:

public partial class Form1 : Form 
    { 
     private byte[] _leftBuffer; 
     private BiQuadFilter _leftFilter; 
     private BiQuadFilter _rightFilter; 
     public Form1() 
     { 
      InitializeComponent(); 
     } 


     private void button1_Click(object sender, EventArgs e) 
     { 
      openFileDialog1.ShowDialog(); 
      using (var reader = new Mp3FileReader(openFileDialog1.FileName)) 
      { 
       var pcmLength = (int)reader.Length; 
       _leftBuffer = new byte[pcmLength/2]; 
       var buffer = new byte[pcmLength]; 
       var bytesRead = reader.Read(buffer, 0, pcmLength); 

       int index = 0; 
       for (int i = 0; i < bytesRead; i += 4) 
       { 
        _leftBuffer[index] = buffer[i]; 
        index++; 
        _leftBuffer[index] = buffer[i + 1]; 
        index++; 
       } 
       var player = new WaveLib.WaveOutPlayer(-1, new WaveLib.WaveFormat(44100, 16, 1), _leftBuffer.Length, 1, (data, size) => 
                               { 
                                byte[] b = _leftBuffer; 
                                System.Runtime.InteropServices.Marshal.Copy(b, 0, data, size); 
                               }); 
      } 
     } 
    } 
1

まず、例えば、WaveProvider16ようNAudioが付属してIWaveProvider実装のIWaveProviderまたはユーザー1を実装する必要があります。次に、IWaveProviderを使用してオブジェクトをWaveOut.Init(IWaveProvider Provider)で初期化し、最後にWaveOut.Play()を呼び出します。

関連する問題