このクラスを使用してSoundPlayer
、WPFアプリケーションでWAVファイルを再生しています。ファイルは短く、アプリケーションの一部であり、プログラムで発生するイベントに応答して再生されます。ユーザーはどのサウンドを再生するかを制御できず、自分でサウンドを再生することを決定することはできません。WPFMediaPlayer
コントロールも使用してみましたが、そのコントロールに問題がありました。はSoundPlayer
うまく機能していますが、問題があります。
基本的に、私は音のキューを維持し、それらがキューに入れられるときに次々に音を再生する必要があります。状況によっては、再生中のサウンドを停止して、代わりに別のサウンドを再生する必要があります。SoundPlayer
したがって、コントロールと相互に排他的であることが判明した2つの要件があります。
- 私のコードは、サウンドの再生がいつ終了したかを知る必要があります。
- サウンドはバックグラウンドで再生する必要があります
これを実装するために、というクラスを作成しましたSoundController
。これにはバックグラウンドスレッドがあり、Thread
's Dispatcher
を使用して、を使用してサウンドを再生するために使用するメソッドへの呼び出しをキューに入れますBeginInvoke
。このメソッドは、サウンドを再生するSoundController
ために呼び出す前にイベントでイベントを発生させ、リターン後に別のイベントを発生させます。SoundPlayer.PlaySync
PlaySync
UIスレッドで、サウンドを停止する必要がある時点で、SoundController
クラスのStop
メソッドを呼び出します。SoundPlayer
のStop
メソッドを呼び出して、サウンドの再生を停止します。そして、ここで問題が発生します。SoundPlayer.Stop
音が止まらないことがわかりますが、音が終わるのを待ってから戻ります。
これでGUIが機能しなくなります。非同期で呼び出すこともできますが、GUIは停止しませんが、サウンドも停止しません。
私が言ったように、WPF MediaPlayerは私たちのために機能せず、とにかくそれはやり過ぎでした。イベントを発生させ、バックグラウンドスレッドでサウンドを再生し、再生を停止する機能を提供するサウンドを再生するための他の代替手段はありますか?
2012年6月26日編集:
これは1か月以上ここにあり、応答がありません。SoundPlayer
ですから、コントロール に代わるものは他にないと思います。
問題に別の角度からやってくる新しい質問を投稿します。