BGM |
1.mci命令 |
前にも書きましたが、mmplay命令でMIDIファイルの音楽を流そうとすると、mmplay命令を行ってから実際に流れ出すまでの間、ファイルの読み込みのためにプログラムが止まってしまいます。そこで、mci命令を使います。
例.音楽を流し、Zキーで止めます。
mci "open rkm.mid alias bgm" mci "set bgm time format milliseconds" mci "play bgm from 0" *Main_Loop await 16 getkey key, 90 if key == 1 { mci "stop bgm" } goto *Main_Loop
2.一時停止 |
本講座のサンプル・ゲームでは扱いませんが、音楽を一時停止する方法を説明します。
mci "status bgm position" bgm_position = stat mci "stop bgm"
現在の再生位置を変数bgm_positionに入れて曲を止めます。
mci "play bgm from " + bgm_position
一時停止した位置から再生します。
例.Zキーで一時停止、再生を行います。
mes "Zキーで一時停止、再生を行います" mci "open rkm.mid alias bgm" mci "set bgm time format milliseconds" mci "play bgm from 0" playing_f = 1 zkey = 0 *Main_Loop await 16 gosub *Input_Key if pre_zkey == 0 & zkey == 1 { if playing_f == 1 { mci "status bgm position" bgm_position = stat mci "stop bgm" playing_f = 0 } else { mci "play bgm from " + bgm_position playing_f = 1 } } goto *Main_Loop ;キー入力 *Input_Key pre_zkey = zkey getkey zkey, 90 return
playing_fは曲が再生中かどうかのフラグで、再生中なら1、そうでないなら0を入れます。
3.音楽のループ再生 |
本講座のサンプル・ゲームでは扱いませんが、音楽をループ再生する方法を説明します。
mes "Zキーで一時停止、再生を行います" mci "open rkm.mid alias bgm" mci "set bgm time format milliseconds" mci "status bgm length" bgm_length = stat mci "play bgm from 0" playing_f = 1 zkey = 0 *Main_Loop await 16 gosub *Input_Key if pre_zkey == 0 & zkey == 1 { if playing_f == 1 { mci "status bgm position" bgm_position = stat mci "stop bgm" playing_f = 0 } else { mci "play bgm from " + bgm_position playing_f = 1 } } mci "status bgm position" p = stat if p >= bgm_length { mci "seek bgm to start" mci "play bgm" } goto *Main_Loop ;キー入力 *Input_Key pre_zkey = zkey getkey zkey, 90 return
mci "status bgm position" p = stat if p >= bgm_length { mci "seek bgm to start" mci "play bgm" }
現在の再生位置が曲の終わりに来たら先頭から流し直します。
補足 |
・音楽のファイル |
効果音と同様、フリー素材を探すのが手っ取り早いです。自分で作るのは、それなりの技術とセンスがいると思われます。自分で作曲する場合は使いやすそうなフリーソフト(あるいは有料のツール)を探してください。 |