2011-12-28 10 views
3

これはいくつかの非常に簡単な質問のように聞こえるが、私は本当にここで立ち往生している。確かに、私はNaudioを使ってオーディオプレーヤーを構築しています。多くのチュートリアルでは、人々がいつもあなたを始められる簡単な方法を示していることに気付きました。しかし、私の意見では、実際のアプリケーションで実際に何が行われているかを常に忘れています。たとえば、Naudioで音楽を演奏するときは、次のようにします:Naudio:MP3とWAVファイルを再生するには?

Void PlayAudioMusic(string FilePath) 

    { 

    using (var ms = File.OpenRead(FilePath)) 
    using (var rdr = new Mp3FileReader(ms)) 
    using (var wavStream = WaveFormatConversionStream.CreatePcmStream(rdr)) 
    using (var baStream = new BlockAlignReductionStream(wavStream)) 
    using (var waveOut = new WaveOut(WaveCallbackInfo.FunctionCallback())) 
    { 
     waveOut.Init(baStream); 
     waveOut.Play(); 

    } 
} 

これは簡単なコンソールアプリケーションでのテストに最適です。しかし、これは実際に深刻なアプリケーションを構築している場合は役に立ちません。リソースを配置

  1. し、それを別の例外が何をする
  2. を処理するための
  3. 最善の方法を行うためにする場合:たとえば、どのような多くのチュートリアルが言うことはありませんすることなど、最も重要な物事を処理する方法の例ですアプリケーションを一時停止、停止、巻き戻し、または終了する前に
  4. 他にも私は存在しません。 私はこのプロセスを進んでおり、アプリケーションには例外が多すぎるという通知がありますので、誰かがこれを処理するために使用したNaudioのラッパークラスのように共有してください。私は、Naudioを使用しようとしているときに私たちのいくつかが苦しんでいた問題の多くに答えると確信しています。

ありがとうございます。

答えて

6
  1. アンマネージドリソースを廃棄するには、WaveStreamのCloseメソッドを呼び出します。 「いつ行うべきか」の部分はむしろ明白です...管理されていないリソースを処分するのが適切な時が本当に分かりませんか?あなたはそれらをもう使用しないときにそれらを処分します。
  2. 私はこれに答えることはできません。ごめんなさい。
  3. 一時停止するには、WaveOutオブジェクトの一時停止メソッドを呼び出します。巻き戻すには、WaveStreamのSeekメソッドを呼び出します。停止するには、WaveOutのStopメソッドを呼び出さないでください。 Pauseを呼び出してから、WaveStreamのSeekメソッドを呼び出してバッファの先頭に移動する必要があります。
  4. 表示されているコードのほとんどが実際には不要なため、例外がスローされる可能性が最も高くなります。 MP3ファイルを再生するために必要な作業は、

です。

WaveStream mainOutputStream = new MP3FileReader(path_of_the_file_you_want_to_play); 
WaveChannel32 volumeStream = new WaveChannel32(mainOutputStream); 

WaveOutEvent player = new WaveOutEvent(); 

player.Init(volumeStream); 

player.Play(); 

は、私は個人的にあなたがC#ので作りたいアプリケーションの絶対的にあらゆる種類の、でもXNAゲームのためにNAudioを使用することを可能にする、それはフォームやWPFを使用する必要はありませんので、代わりにWaveOutのWaveOutEventを使用することを好みます。また、WaveOutEventはとても使い勝手の良い使い勝手があり、コンストラクタはコールバックを要求しません。

これらのWaveStreamは、バッファに関する情報(ビットレートのサンプルレートなど)を変更するためのもので、NAudioに例外をスローするよう要求する方法です。このように使用するとほとんど動作しません。バッファの一部を変換したい場合は、WaveFormatConversionStreamのStaticメソッドを呼び出す必要があります(その名前は、少なくとも自明です)。

+0

素晴らしい答えです。正確には、小文字の「p」を持つMp3FileReaderである必要があることを指摘しておきます。 – henon

関連する問題