2010-12-08 12 views
5

के बाद बंद हो जाता है मैं सी # में naudio lib का उपयोग कर रहा हूं और एक साधारण फ़ाइल खेलना चाहता हूं। समस्या यह है कि प्लेबैक 1 सेकंड के बाद बंद हो जाता है। मैं इसका कारण समझ नहीं सकता कि ऐसा क्यों करता है।नोडियो का उपयोग करके .wav फ़ाइल बजाना, प्लेबैक 1 सेकंड

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using NAudio.Wave; 

namespace NAudioTest 
{ 
    class Program 
    { 
     static IWavePlayer waveout; 
     static WaveStream outputStream; 
     static string filename = null; 

     static void Main(string[] args) 
     { 
      waveout = new WaveOut(); 

      filename = "C:\\1.wav"; 

      outputStream = CreateInputStream(filename); 

      try 
      { 
       waveout.Init(outputStream); 
      } 
      catch (Exception ex) 
      { 
       Console.WriteLine("Error while loading output"); 
       Console.WriteLine("Details: " + ex.Message); 
       Console.ReadLine(); 
       return; 
      } 

      Console.WriteLine("Press [Enter] to start playback"); 
      Console.ReadLine(); 

      waveout.Play(); //this stops after 1 sec. should it play until i hit enter cause of the next line? 

      Console.WriteLine("Press [Enter] to abort"); 
      Console.ReadLine(); 
      waveout.Dispose(); 
      Console.ReadLine(); 
     } 


     static WaveStream CreateInputStream(string name) 
     { 
      WaveChannel32 inputStream; 
      if (name.EndsWith(".wav")) 
      { 
       WaveStream readerStream = new WaveFileReader(name); 
       if (readerStream.WaveFormat.Encoding != WaveFormatEncoding.Pcm) 
       { 
        readerStream = WaveFormatConversionStream.CreatePcmStream(readerStream); 
        readerStream = new BlockAlignReductionStream(readerStream); 
       } 

       if (readerStream.WaveFormat.BitsPerSample != 16) 
       { 
        var format = new WaveFormat(readerStream.WaveFormat.SampleRate, 16, readerStream.WaveFormat.Channels); 
        readerStream = new WaveFormatConversionStream(format, readerStream); 
       } 
       inputStream = new WaveChannel32(readerStream); 
      } 
      else 
      { 
       throw new InvalidOperationException("Invalid extension"); 
      } 
      return inputStream; 
     } 
    } 
} 
+0

आप देख रहे हैं '" प्रेस [Enter] निरस्त करने के लिए "' जब यह चलना शुरू होता? –

+0

'System.Media.SoundPlayer' का उपयोग तब तक कर सकता है जब तक कि आप किसी बड़े एप्लिकेशन के लिए सबूत कोड में डेमो ऐप का उपयोग नहीं कर रहे हों। –

+0

कोड में खेद है डीबग कोड का टुकड़ा जो मैंने परीक्षण किया है, मैं इसे सही करता हूं। @mark, हाँ मैं इसे देखता हूं जबकि मैं 1 सेकंड खेलता हूं। – Robby

उत्तर

6

आप सुनिश्चित करें कि आप समारोह कॉलबैक उपयोग कर रहे हैं आप, एक कंसोल app से ऑडियो चलाने के लिए कोशिश कर रहे हैं के बाद से WaveOut के लिए डिफ़ॉल्ट विंडो कॉलबैक उपयोग करने के लिए है बनाने की जरूरत है।

new WaveOut(WaveCallbackInfo.FunctionCallback()) 

अद्यतन: NAudio के नए संस्करणों के साथ अब मैं सुझाव है कि आप समारोह कॉलबैक से बचने के रूप में वे कुछ चालकों के साथ गतिरोध पैदा कर सकता है। इसके बजाय, WaveOutEvent घटना कॉलबैक का उपयोग करता है जो और एक पृष्ठभूमि धागा पसंदीदा तंत्र है:

new WaveOutEvent() 
+0

बहुत धन्यवाद :) इसने समस्या हल की। – Robby

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