がりらぼ

WindowsRuntimeの応援ブログ

WindowsPhoneのSliverlightで音楽再生

以前、WindowsPhoneのXNAで音楽再生という記事を書いたのですが、ゆきよ(@yky_sokkou)さんの要望により、Silverlight分も書きます。

基本的にはXNAと同じようにSoundEffectクラスを使うのですがファイルの読み込み方が違い、XNAではContent.Loadメソッドでコンテンツパイプラインで行なっていたものを、ファイルストリームで行うこととなります。

まずMicrosoft.XNA.Framework.dllを参照に追加します。
その後プロジェクト→追加→既存の項目より再生したいwavファイルを追加します。

SoundEffectクラスを使用するためにXNAとリソースを参照するための名前空間を指定します。

using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using System.Windows.Resources;

XNAを有効にするためにFrameworkDispatcherを更新します。
これは一回呼び出すだけでいいです。

FrameworkDispatcher.Update();

サウンドを読み込みます。

StreamResourceInfo SoundFileInfo = App.GetResourceStream(new Uri("wavファイルのパス", UriKind.Relative));

SoundEffect sound= SoundEffect.FromStream(SoundFileInfo.Stream);

コレで読み込めます。

再生時は

sound.Play();

でおkです。

なぜFrameworkDispatcher.Update();を呼び出さなければXNAを使用できないかについては、どうやらXNAのメッセージキューはFrameworkDispatcherによって呼び出されるそうでUpdateしないとXNA使えないみたいです。
しかし実行は一回でいいみたいです。
MSDNが参考になりました。

追伸:wavファイルじゃないと、mp3ファイルなどを再生しようとするとInvalidOperationExceptionが発生します。