DOBON.NET DOBON.NETプログラミング掲示板過去ログ

ページ間でMediaElementをクロスフェードさせたい

環境/言語:[Win8/WinRT]
分類:[.NET]

[Winストアアプリ]
Windows8/WindowsRT、VisualStudio2012、.NET4.5、C#

お世話になります。
現在ストア向けにゲームを練習で作ってます。
タイトル→ステージ選択←→ゲーム画面の3つをPageを分けて
Navigateで遷移させるようにしています。
各画面はそれぞれBGMを持っていて、遷移時にクロスフェード再生させようとしています。

そこで問題となっているのがVolumeの設定です。XAMLではなくコードで
インスタンス生成&保持しているMediaElement型変数があり、この
MediaElementのVolumeをタイマーを使って変動させているのですが、
ページ内のGridのChildrenにAddしておかないとVolumeが反映されません。
(これはバグ?仕様?)

しかし、Children.Addしておくとページが遷移した時にすぐに停止されてしまいます。
(次のページに遷移してもBGM自体は鳴り続けさせておきたい、タイマーでVolume=0になったときに止めたい)

ページ遷移時に発生するSaveState内でChildren.Removeしても変わらず、困り果てました。
そもそもゲームならページ遷移させるような設計にするな、ということかもしれませんが…
ご教示頂ければ幸いです。

以上よろしくお願いいたします。
http://social.msdn.microsoft.com/Forums/ja-JP/acdfb67a-757e-48f1-a004-00c7f1a1ad0f/mediaelementvolume
ちょうど見かけたので。
MediaElementでは難しいみたいですね。
■No31708に返信(Hongliangさんの記事)
> http://social.msdn.microsoft.com/Forums/ja-JP/acdfb67a-757e-48f1-a004-00c7f1a1ad0f/mediaelementvolume
> ちょうど見かけたので。
> MediaElementでは難しいみたいですね。

ありがとうございます。
参考にしようとしましたが、XAudio2はC++向けみたいですね…
軽く調べただけの印象ではストアアプリでのDirectXはほとんどC++の
サンプルしかなかったので、今回はもうページを統合して1つのGridとし、
そこにMediaElementをAddする形で対応しようと思います。
(もっとも、本来ゲームはそうやって作るもののような気がしますし…)

とりあえず今回は解決とします、ありがとうございました。

※MediaElementはループ再生時にギャップが発生する問題もあるので
 いつかはC#でDirectXを使いたいですね
解決付け忘れました…
解決済み!
> 参考にしようとしましたが、XAudio2はC++向けみたいですね…
> 軽く調べただけの印象ではストアアプリでのDirectXはほとんどC++の
> サンプルしかなかった

> ※MediaElementはループ再生時にギャップが発生する問題もあるので
>  いつかはC#でDirectXを使いたいですね

DirectXといっても結局COMにすぎないので、C#から扱うことは可能です。
DirectXラッパライブラリはいくつか公開されていますが、例えばSharpDXはMetroに対応していると謳っていますね。
http://www.sharpdx.org/
// 使うかどうかは、ライセンスの都合もあるでしょうが。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板