2012-12-19 27 views
6
Ben ses örnekleri NAudio aracılığıyla çıkartmışlardır

i parametreleri biliyoruz:Net doğrudan

  • kanalları numune başına
  • bayt,
  • samplerate Nasıl oynanır

bu örnekleri kullanarak. Net api/veya diğer .Net kitaplığı

İşte kod:

İlk
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

için Cevabım http://stackoverflow.com/questions/1284322/playing-a-wav-file- in-net/20010577 # 20010577 NAudio kullanarak bir dosya oynayacak. – Pat

cevap

1

EVET, bulduk bir çözüm: A low-level audio player in C#

Tam çalıştı kodu:

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

, örneğin, WaveProvider16 gibi NAudio ile gelen IWaveProvider uygulamaların IWaveProvider veya kullanıcıyı bir uygulamamız gerekmektedir. Ardından WaveOut nesnesini WaveOut.Init(IWaveProvider Provider) kullanarak IWaveProvider ile başlatın ve son olarak WaveOut.Play() numaralı telefonu arayın.