HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2008
1214
ホルン曲にタイミングをつけたい10解決


ホルン

リンク

2008/12/14(Sun) 23:00:27|NO.21566

タイトルのとおり、曲にタイミングをつけてリズムゲームを作りたいのですが、
タイミングを付けるいい方法がわかりません。教えてください。

Easy3Dには、midiのミュージックタイムを使ってタイミングを付ける機能が、
あるみたいなのですが、再生したいのはwaveファイルなので、無理です。



この記事に返信する


pen

リンク

2008/12/14(Sun) 23:14:52|NO.21569

ビートマニアみたいなやつ?

配列変数に
 ・表示させたい時間と
 ・そのときに表示したいマーク
の種類をいれて

常に配列変数を確認する

という方法がいいかと

time(0)=0   mark(0)=↑
time(1)=10  mark(1)=→
time(2)=15  mark(2)=↓

みたいな



pen

リンク

2008/12/14(Sun) 23:15:30|NO.21570

うわーごめんなさい 間違えて解決ボタン押しちゃった(> <)



ホルン

リンク

2008/12/14(Sun) 23:32:44|NO.21571

えっと、
某リズムゲーム 太鼓の○人みたいに、次のイベントが、あとどれくらいの時間で
来るかを求めたいのですが・・・。



レヴィン

リンク

2008/12/15(Mon) 02:20:12|NO.21576

とりあえず曲のシークの位置を知りたいなら、hmmやdsoundといったプラグインがあります。

てかE3DにMidiの再生機能があるということ自体はじめて知りましたよw



とおりすがりかも

リンク

2008/12/15(Mon) 11:10:11|NO.21577

wav用のE3DGetReferenceTimeもありますよ。



New Monkey

リンク

2008/12/15(Mon) 17:12:30|NO.21581

こういうことですか?
http://hsp.tv/play/pforum.php?mode=all&num=21135



ホルン

リンク

2008/12/15(Mon) 17:54:37|NO.21582

皆さんありがとうございます。
とりあえず、Easy3DのE3DGetReferenceTimeを使うことにしたのですが、
どうやっても、いいタイミングの取得の仕方がわかりません。
テキストファイルにタイミングデータを書き、
そこからタイミングを取得したいのですが・・・。



pen

リンク

2008/12/15(Mon) 20:51:34|NO.21593


/*************************************** 適当に作りました 19〜23行目で変数の中身を適当に決めているので そこをいじくれば何とかなると思います ***************************************/ screen 0,800,200 objsize 800,50 pos 0,150 : button gosub "再生/停止",*再生 : objstat_1=stat //objstat_1=ボタンのオブジェクトID font "MS ゴシック",32 //変数リスト flag_stop=0 //止まっていたらフラグは1,再生中は0 flag_key=0 //スペースキーが押されてたら1 押されてなければ0 sdim mark,8,100 //表示させるマーク dim timing,100 //表示させる時間 dim flag_hit,100 //マークのところでスペースキーが押されると1が代入される randomize repeat 100 //今は変数データを保存してないので適当に乱数で代入しておきます mark(cnt)=str(rnd(8))+1 //表示させたいマーク,いまは数字を文字列として入れてあります timing(cnt)=rnd(200)*80+600 //左から何コマ(1コマ=ルーチン1ループ)後にくるか loop *main gosub *時間 gosub *確認 gosub *描画 await 5 goto *main *時間 //時間をカウントしていく time=time+1 //時間が増える、増やす値を変えれば早くなる return *描画 redraw 0 color 255,255,255 : boxf 0,0,800,200 //画面を消す //キーフラグがたっているかどうかでヒットスペースの色が変わる if flag_key>0 : color 255,0,0 : else : color 0,0,0 boxf 380,0,420,150 //ヒットスペースを描画 repeat 100 if (time<timing(cnt))&(time+800>timing(cnt)){ //マークが表示される位置か判断 //マークの位置を決める pos time-timing(cnt)+800,59 //スペースキーが押してあり、タイミングが合っていればヒットフラグが立つ //マークのx座標が380〜400にあり なおかつ キーのフラグがたっていればHITしたと判断する //得点は(文字の数×100)点 if (ginfo_cx>380)&(ginfo_cx<400)&(flag_key>0)&(flag_hit(cnt)=0) : flag_hit(cnt)=1 : score+=int(mark(cnt))*100 //フラグの状態によって色を変える if flag_hit(cnt)=1 : color 0,255,0 : else : color 0,0,255 mes mark(cnt) //マークを描画 } loop title "SCORE : "+score+"p redraw 1 return *再生 //停止ボタンが押されたとき if flag_stop=0 : flag_stop=1 : stop if flag_stop=1 : flag_stop=0 : goto *main *確認 //ボタンが押されたか確認する stick k if k&16 : flag_key=10 : else : flag_key-=1 //スペースキー押してたらフラグが立つ //押されたら10が代入され,押されないと減っていく //0になるとフラグは倒れていると判断する if flag_key<0 : flag_key=0 //flag_keyが減り過ぎないようにする return

hspda.asを#includeしといて
mark変数とtiming変数をDAT.TXTなどの名前をつけて保存,読み込みすれば良いと思う(・∀・)
保存,読み込みはvload,vsave



A.C

リンク

2008/12/16(Tue) 23:59:03|NO.21647

(本人書き込み無いからもう解決しているかもしれないけど)
こんにちは、A.Cです。

> 次のイベントが、あとどれくらいの時間で来るか

えっと、もしかしてあるオブジェから次のオブジェまでの間隔はわかっているが、
時間に直す方法がわからないという意味ですかね?
そうだとすれば、簡単に書くと下の通りです。

オブジェAとオブジェBの間隔がちょうど1拍でbpmは150
この時のAとBの時間差は(bpm60の時、1拍=1秒なので)

60/150 で0.4秒

もっと細かい場合、たとえばAとBの間隔が3/4拍(16分音符3つ分)で、bpmは90の場合
BM…じゃなくて、某フォーマットに習って1拍を48分割して考えると
(最大192分音符分のズレ(1/48拍)まで計測可能、この場合、3連符の計算も楽)
3/4拍=36/48拍なので、

1拍の時間 * 36/48 つまり、 (60/90) * ((48*3/4)/48) となります。
(60/90)→bpmの倍率計算(上と同じ)、この値が1拍の時間
(48*3/4)→<3/4拍=a/48拍>この式のaを求めている(この場合36になる)

ただし、このままだと切り捨てられた小数分だけずれるので、並び替えて、

60*48*3/4/90/48 で0.5秒 となります。
参考までに。



A.C

リンク

2008/12/17(Wed) 00:08:30|NO.21648

あぁ、最後の式48いらないですね^^;
あと、1拍で考えるより1小節で考えた方が計算しやすいかもです。

3/4拍=36/192小節 bpm240の時、1小節1秒なので 240*36/192/90 = 0.5秒
連投申し訳ないです。



ONION software Copyright 1997-2021(c) All rights reserved.