2012-12-19 17 views
6

मैं ऑडियो नमूने NAudio के माध्यम से निकाले गए हैं, मैं मानकों पता:नेट ऑडियो नमूने खेलने के लिए कैसे सीधे

  • चैनलों नमूना प्रति
  • बाइट्स,
  • sampleRate

कैसे खेलने के लिए .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- इन-नेट/20010577 # 20010577 NAudio का उपयोग कर एक फ़ाइल चलाएगा। – Pat

उत्तर

1

हाँ, मैं ने पाया है एक समाधान: 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

सबसे पहले, आप IWaveProvider या उपयोगकर्ता एक IWaveProvider कार्यान्वयन कि उदाहरण के लिए, WaveProvider16 तरह NAudio के साथ आने का लागू करना होगा। इसके बाद, WaveOut.Init(IWaveProvider Provider) का उपयोग करके IWaveProvider के साथ WaveOut ऑब्जेक्ट प्रारंभ करें, और अंत में, WaveOut.Play() पर कॉल करें।

संबंधित मुद्दे