ページ 11

連続ですがDirectMusicについてです

Posted: 2011年3月29日(火) 12:32
by Suikaba
連続で質問して申し訳ありません。
DirectMusicを使って音を鳴らしているのですが、再生が終了したかどうかがわかる関数などありますでしょうか。
資料が少なくて困っております。わかる方がいればよろしくお願いします。

ちなみに、DirectX9とC++でVisual C++ 2008 使ってます。

Re: 連続ですがDirectMusicについてです

Posted: 2011年3月29日(火) 14:33
by lriki
一番確実な方法はこんな感じだと思います。

コード:

// 現在の再生時間を取得
MUSIC_TIME now_time;
mSegmentState->GetSeek( &now_time );

// 全体の再生時間を取得
MUSIC_TIME end_time;
mSegment->GetLength( &end_time );

if ( now_time == end_time )
{
	// 再生が終了している
}
ちなみに IDirectMusicPerformance8 の中に IsPlaying というメソッドがありますが、
これを使えば現在音が聞こえているかどうかを簡単に判定することができます。
http://msdn.microsoft.com/ja-jp/library/cc356058.aspx

ただ、msdn のヘルプにもあるように「再生終了」を判定するのではなく
「音が鳴っているかどうか」を判定するので、場合によっては不具合がでるかもしれません。
(あと、どういうわけかノートPCで実行したとき IsPlaying が入ってるだけで処理落ちしたことがあります。)

ゲームで実装するのでしたら面倒でも GetSeek と GetLength を組み合わせて判定するのが無難かと思います。

Re: 連続ですがDirectMusicについてです

Posted: 2011年3月29日(火) 17:24
by Suikaba
>>梨樹さん

ありがとうございます。ここら辺の資料みつけにくいですね・・・

それで実装してみます。本当にありがとうございました。