ループ再生に生きる

結局XPではMIDIの途中再生って出来るのかな。これってツクールで出来るかどうかはともかく、俺みたいな素人でも頭ン中では出来そうな気がする。XPは持ってないしスクリプト覗いても無いので有るか知らないけどMIDIを再生する際その開始位置(時間)さえ弄れれば。
MIDIを演奏し始めてからの経過時間を変数に格納し(戦闘などが終わって)再び再生する際開始位置を先ほど格納した値にすれば実現できるんとちゃうかなー…と。ループに関してはツクールの方でやってくれるからね。まぁ、少なくとも2003以前では必ず頭から再生しなくちゃいけないので100%無理だけど。
でもVCなら出来る気がする。っていうか、以前これやってたゲームを見て「いつかこういう事したい」と強く思ったもんだ。月日は流れ、ライブラリに依るところが大きいが漸くちょっとしたもの(決してゲームとは言わない)が出来るようになった。画像表示に関しては心強いライブラリがあるのでいいのだが、このライブラリは音楽再生の方はツクール2000と同じところまでしかサポートしてくれてない。つか、頼りすぎるのも如何なものかと思うが。
そこで再びMIDIに関して調べてみると、意外と沢山ヒット。前やったときは検索ワードが悪かったのか。それでも見つかりました。
なるほど、DirectXで出来るんね。DirectXってグラフィックしか依存してないと思ってました、スイマセン。というか、それも知らずにゲームつくろうなんて俺いい根性してますね。すいまs(ry
んで、そこには細かくサンプルプログラムが載っていた。とても親切。最初は斜め読みしたんで今度はしっかりと、よーく見てみたんですが
if(FAILED(m_pPerformance->CreateStandardAudioPath(
        DMUS_APATH_DYNAMIC_3D, 64, TRUE, &path))){
    return FALSE;
}

( ゜д゜) ・・・

(つд⊂)ゴシゴシ


if(FAILED(g_pSegment1->SetLoopPoints(0, 0))){
    return FALSE;
}

(;゜д゜) ・・・

(つд⊂)ゴシゴシゴシ


// MIDI読み込み
if(!g_cdxAudio.LoadMidiFile(&g_pSegment1, "Data\\sample.mid")){ return FALSE; }
if(!g_cdxAudio.Download(g_pSegment1)){ return FALSE; }
// MIDIのループ設定
if(FAILED(g_pSegment1->SetLoopPoints(0, 0))){ return FALSE; }
if(FAILED(g_pSegment1->SetRepeats(DMUS_SEG_REPEAT_INFINITE))){ return FALSE; }
// MIDI再生
g_cdxAudio.PlaySegment(g_pSegment1, 0, NULL, NULL); (サンプルプログラムより)

  _, ._
(;゜ Д゜) …!?


ゴメンナサイ、サッパリ判りません
そもそもファイルの読み書きも出来ず、そしてDirectXの使用経験も無い俺がどうしてサンプル見ただけで出来ようか。ライブラリないと全然出来ない訳だし。
そういう訳で軽々に大言をぬかした事を反省しています。
当たり前だがゲーム作りってのは大変だよね…今更改めてツクールの凄さを実感しました。


※ちなみに、上記のプログラムはもんしょの巣穴さん(http://monsho.hp.infoseek.co.jp/index.html)から拝借いたしました。
DirectXが分かる人にはとても良さそうなページです。勝 手に流用してよかったのかな…