ナナエフ

同人ゲームサークル『7-FIELD』制作ブログ  -ゲーム制作やイベント参加などの活動情報 + 雑記-

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. --/--/--(--) --:--:--|
  2. スポンサー広告

C#でのバックグラウンド処理問題点…DirectXの AudioVideoPlayback.Audio でイベント非発生。

tetsuwoです。 【 twitter

以前、バックグラウンド処理すごい!お手軽簡単!とお伝えしました。

  【 参考 】 130530 - C#でのバックグラウンド処理実行方法…時間のかかる処理はマルチスレッドで。

ゲーム中に使用する素材の読み込みを別スレッドに移した結果、サウンドに問題が起こってしまいました。
 
 
注意!

ゲームの素材と書きましたが、具体的には画像ファイル (.png) と、サウンドファイル (.mp3) です。

画像を   < Microsoft.DirectX.Direct3D.Texture > として

サウンドを < Microsoft.DirectX.AudioVideoPlayback.Audio > として格納しております。



問題はサウンド。

ループ再生するはずのBGMが、一度しか再生されない事態に・・・。

Audio.Ending イベントが発生しないことが原因でした。


 
DirectX.AudioVideoPlayback.Audio について

Audio クラス 】 - msdn

Audio.Ending 】 - msdn

  Ending イベント
  
  ファイルの終わりで発生する。


Audio に格納されたサウンドは、最後まで再生しても自動で停止しません。

その代わりに Ending イベントが発生するので、そこで停止などの指示をあたえてやる必要があります。

ループするなら再生位置を先頭に設定しないといけない。


しかし、バックグラウンドで読んだファイルは最後まで再生しきってもイベントが発生しなかったのです。

そのため再生終了しても、自動で先頭に戻らないのでループしないというわけでした。


Audio.Play や Stop などといったメソッドは動きますし

Audio.CurrentPosition や Playing などのプロパティも取得・設定出来ます・・・なぜ・・・


解決策

残念ながら、イベントを発生させる方法はわかりませんでした orz

なので画像は別スレッドで、サウンドは本スレッドで取得することにしました。



他には、上記の通りプロパティは取得できるので

ファイルごとの長さ(再生ミリ秒数)を判定して、末端まで到達したら再生位置を先頭に戻す。

試してはおりませんが、そういった方法もあると思います。



XNA の次の規格ーー!!はやくきてくれー!!


宣伝

2031年 秋、北守新都市。生活にAR技術が根付いたこの街で

"傷"を抱えた7人がそれぞれに見出す"真実"とは。


ad4_introduction01.png

当サークル第2弾作品「薄鈍アドベント」DL販売中です。

体験版も公開しておりますので、目に止まりましたらお試しあれ。
 
スポンサーサイト
  1. 2013/06/13(木) 19:00:00|
  2. 制作
  3. | トラックバック:0

トラックバック

トラックバック URL
http://7fblog.blog.fc2.com/tb.php/219-c7196863
この記事にトラックバックする(FC2ブログユーザー)

カウンター

プロフィール

akinasi, tetsuwo

Author:akinasi, tetsuwo
FC2ブログへようこそ!

検索フォーム

カレンダー

03 | 2017/04 | 05
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 - - - - - -

最新記事

最新コメント

最新トラックバック

月別アーカイブ

カテゴリ

告知 (63)
制作 (88)
ソフト紹介 (19)
素材紹介 (10)
言外 (7)
雑記 (361)
ナナエ (29)

リンク

このブログをリンクに追加する

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。