ゲームでBGMを演奏する際に、どうしても曲のループを考えないといけない。
HSPでdsoundexを使用しての話。
前にゲームを作ったときに困ったのが、『ループの際は前奏を飛ばしたい』ということなのだが、よく考えれば現在演奏中のポイントを管理しながら、然るべきタイミングでループしたあとの再生開始ポイントを設定してやれば済むだけの話だった。
以下のスクリプトのように、『ds_getp』で常に曲の再生位置を取得し、曲が最後まで行ったら『ds_setp』でループポイントを設定してやればうまく繰り返し再生できる。
あとは、これをゲームの中でBGMを切り替えて使えるようなルーチンに最適化してやればいいだけか。
#include "dsoundex.as" ds_init ds_load "a.wav",1 ds_loop 1 repeat getkey flag, 27 if flag : end //現在の再生ポイントを取得 ds_getp 1 sp = stat await //再生ポイントの判定と、ループポイントの設定 if sp>2822400 { sp=1411200 ds_setp 1,sp } loop stop