RHYTHM TOY / WEB AUDIO

トンタタン

ノーツは降ってきません。音を聴いて耳で合わせる方式。リズム能力を8つの軸に分け、軸ごとに練習ステージを1本ずつ置いています。判定はブラウザの音声時計。

打つ: スペース / タップ ズレ補正 0 ms 出力遅延 -- ms 判定 -- 音声 未起動

しくみ(リズムゲームで本当に難しいのは時計)

  1. 1親時計は AudioContext.currentTime
    画面のフレームや setTimeout を時計にすると必ずズレます。曲の位置は「開始時刻からの経過秒 ÷ 1拍の長さ」で毎回計算し直します。
  2. 2音は 120ms 先読みで予約する
    25msごとに「もうすぐ鳴る音」だけを start(t) で未来の時刻に予約。ブラウザがサンプル精度で鳴らすので、重い処理が入っても拍がヨレません。
  3. 3絵は拍から逆算して描く
    豆の位置は「いま何拍目か」の関数。フレーム数で動かさないので、カクついても音と絵の関係は崩れません。
  4. 4入力は端末ごとの遅れを引く
    押した時刻(event.timeStamp)を音声時計に換算し、較正で測った出力遅延を差し引いて判定。ズレ補正なしでは、うまい人ほど「おそい」と判定されます。
  5. 5鍛える対象を軸に分けて、測る
    「リズム感」をひとかたまりで扱うと上達を測れません。同期・裏拍・細分・記憶・保持・追従・分離・切替の8軸に分け、練習ステージを軸ごとに1本、それとは別に凍結した測定ステージを置いています。
  6. 6見せないことがルール
    ノーツを降らせないので、予告は音でやる必要があります。豆は「シュッ」の2拍後、山びこは「聴いた1小節をそのまま返す」。目で追う遊びから耳で合わせる遊びになります。