2010-12-08 47 views
5

C#でnaudio libを使用していて、簡単なファイルを再生したい。問題は、再生が1秒後に停止することです。なぜそれがそれを行うのかわからない。naudioを使用して.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

コードで申し訳ありませんが、私がテストしたデバッグコードの一部でした、私はそれを修正します。 @マーク、はい私は1秒を再生中にそれを参照してください。 – Robby

答えて

6

コンソールアプリから音声を再生しようとしている場合はWaveOutのデフォルトは、ウィンドウのコールバックを使用することですので、あなたは、あなたが関数コールバックを使用していることを確認する必要があります。

new WaveOut(WaveCallbackInfo.FunctionCallback()) 

アップデート:私は今、彼らは特定のドライバでデッドロックが発生する可能性があなたが、関数コールバックを避けることをお勧めしますNAudioの新しいバージョンで。代わりに、イベントコールバックを使用し、バックグラウンドスレッドが推奨メカニズムですWaveOutEvent

new WaveOutEvent() 
+0

多くの感謝:)これは問題を解決しました。 – Robby

関連する問題