リズムゲームは何を測っているのか:反応と予測の違い
遊びを見つける執筆にClaudeを使用しています。

リズムゲームの上手な人は、反射神経が優れているのでしょうか。画面に音符が現れてから指を動かしているのなら、その速さは「見てから動くまでの時間」で決まります。ところが、合図の前に指が動き出しているとしたらどうでしょう。判定の基準が「合図とほぼ同時」である以上、見てから動いたのでは、構造上いつも少し遅れることになります。 この記事は、この違いを自分の手で確かめる手順を示します。合図が「規則的に来る場合」と「不規則に来る場合」で、タップのタイミングが合図に対してどうずれるかを記録します。規則的な場合にずれが0付近か負(合図より先)になり、不規則な場合に正(合図より後)へ寄るなら、予測が働いている証拠として読めます。結果は人と環境によって変わるため、数値は書きません。結果を出すところまでを読者が行う形です。
この記事の目次
反応と予測は、時間軸が違います
反応は、合図が出た後に始まる動作です。合図を知覚し、判断し、指を動かす時間がかかります。単純な合図に反応するまでの時間は、一般に0.2秒前後といわれていますが、個人差があり、画面や音の遅延も上乗せされます。
予測は、次の合図がいつ来るかを前もって見積もり、その時刻に合わせて動作を始めることです。合図を待たないので、動作の完了を合図の時刻に重ねられます。メトロノームに合わせて手を叩くとき、人は音を聞いてから叩いているのではなく、次の音の時刻に向けて叩いています。
この差が効いてくるのは、拍の間隔が短いときです。BPM(1分あたりの拍数)が150なら、1拍は60÷150で0.4秒です。8分音符の間隔なら0.2秒になり、反応時間とほぼ同じ長さです。合図を見てから動くやり方では、この間隔に間に合いません。速い曲で高得点を出せる人は、反応が速いというより、次の拍の時刻を正確に見積もれている人だと考えられます。
つまりリズムゲームの判定は、「合図に対して何秒遅れたか」ではなく、「自分が見積もった時刻が実際の拍とどれだけ近かったか」を測っていると読めます。
測る量は「符号つきのずれ」と「ばらつき」です
確かめるために、タップ1回ごとに次の量を記録します。
- ずれ:タップ時刻から、最も近い合図の時刻を引いた値です。合図より後なら正、前なら負になります。絶対値ではなく符号つきで扱います。
- 偏り:ずれの中央値です。平均ではなく中央値を使うのは、うっかり見逃した1回の大きな値に引きずられないためです。
- ばらつき:ずれの四分位範囲です。小さいほうから25%の位置と75%の位置の幅を見ます。
偏りとばらつきは別のものです。偏りは「いつも少し遅い」といった一定の傾向を表し、ばらつきは「毎回安定しているか」を表します。予測が上手になると、一般には偏りが0に近づき、ばらつきが小さくなると見込めます。ただし、この記事の手順ではそう決め打ちせず、自分のデータで確認します。
手順:最小の計測ツールで二つの条件を比べます
次のコードを test.html という名前で保存し、ブラウザで開きます。外部のライブラリもサーバーも使いません。合図として四角が光り、短い音が鳴ります。四角をタップした時刻を記録し、終了後に中央値と四分位を表示します。
<!doctype html>
<meta charset="utf-8">
<button id="b">開始</button>
<select id="m"><option value="r">規則</option><option value="i">不規則</option></select>
間隔(ms)<input id="g" type="number" value="1200">
<div id="f" style="width:240px;height:240px;background:#345;margin:1em 0">ここをタップ</div>
<pre id="o"></pre>
<script>
const $=i=>document.getElementById(i);
let ac,T=[],P=[],run=0;
function beep(){const o=ac.createOscillator();o.connect(ac.destination);o.start();o.stop(ac.currentTime+0.05);}
function flash(){$('f').style.background='#fc4';setTimeout(()=>$('f').style.background='#345',100);}
$('f').onpointerdown=()=>{if(run)P.push(performance.now());};
$('b').onclick=()=>{
ac=ac||new AudioContext();T=[];P=[];run=1;$('o').textContent='計測中';
const g=+$('g').value,reg=$('m').value=='r';
let n=0;
(function next(){
if(n++>=25){setTimeout(()=>{run=0;report();},g*1.5);return;}
const w=reg?g:g*(0.83+Math.random()*0.34);
setTimeout(()=>{T.push(performance.now());flash();beep();next();},w);
})();
};
function report(){
const d=P.map(t=>{let k=0;T.forEach((x,i)=>{if(Math.abs(t-x)<Math.abs(t-T[k]))k=i;});return k<5?null:t-T[k];})
.filter(x=>x!==null).sort((a,b)=>a-b);
const q=p=>Math.round(d[Math.floor(p*(d.length-1))]);
$('o').textContent='n='+d.length+' 中央値='+q(.5)+'ms 四分位='+q(.25)+'〜'+q(.75)+'ms';
}
</script>「規則」は毎回同じ間隔で合図が出ます。「不規則」は平均が同じで、間隔が約17%の幅で毎回変わります。間隔は初期値の1200msのままで構いません。
計測のルール
次のルールを、計測の前に決めて紙に書いておきます。
- 「規則」と「不規則」を、それぞれ最低3セット行います。条件は交互に行い、同じ条件を続けて行わないようにします。順番による慣れの影響を混ぜないためです。
- 1セットは合図25回です。ツールは最初の5回を慣れの区間として集計から外し、約20回分を集計します。
- 合図1回につきタップは1回とします。連打や遅れて追いかけるタップは、判定を乱す原因になります。
- 指で押す場所、使う音の出力(スピーカーかイヤホンか)、姿勢は全セットで揃えます。
- 各セットの結果は、条件・セット番号・n・中央値・四分位範囲を1行にして書き写します。
不規則の間隔の下限は初期値で約1000msです。最も近い合図で判定するこのツールでは、反応が半拍分(約500ms)を超えると前後の合図を取り違えます。間隔を変えるときは、800ms以上にしてください。
結果の読み方を先に決めておきます
結果を見てから解釈を考えると、都合のよい読み方を選びがちです。次の表を、計測の前に読んでおきます。
- 0付近か負、不規則の中央値:正、読み方の候補:規則条件では次の合図の時刻を見積もれていると読めます。不規則では見てから動く動作に近づいています。
- 正、不規則の中央値:正(規則と近い値)、読み方の候補:規則でも予測できず、見てから動いている可能性があります。間隔が長すぎて拍を取りにくい場合もあるため、間隔を縮めて再計測します。
- 負、不規則の中央値:負、読み方の候補:合図ではなく自分のリズムで叩いている可能性があります。不規則でも負なら、判定が前後の合図を取り違えていないか確認します。
四分位範囲も見ます。規則条件のほうが不規則条件より幅が狭ければ、規則性がタップの安定に寄与していると読めます。逆に、どちらも広く差がなければ、環境の揺れが大きい可能性があります。
もう一つ試せることがあります。不規則の条件は固定したまま、規則の条件だけ間隔を1200→800→600と縮めて、四分位範囲がどう変わるかを見ます。間隔が反応時間に近づいても、予測で叩ける人の幅は保たれるのかどうか。ここが、反応で追う動作と予測で合わせる動作の分かれ目です。
起こりやすい誤りを避けます
最も多いのは、機器の遅延を自分の遅れだと読み違えることです。音の出力にはオーディオの遅延があり、Bluetoothのイヤホンではさらに大きくなることがあります。画面の更新にも遅れがあります。ツールも、実際の発光や発音の時刻ではなく、命令を出した時刻を記録しています。したがって、規則条件の中央値が0からずれていても、それだけで「自分は遅い」「自分は早い」とは言えません。
その誤差は、条件を超えてほぼ一定のはずです。同じ機器・同じ出力で行ったなら、「不規則の中央値」から「規則の中央値」を引いた差は、遅延の影響が相殺された値として読めます。絶対値ではなく、この差と四分位範囲の変化を主な手がかりにしてください。
次に多いのは、セット数が少ないまま結論を出すことです。1セットだけでは、その時の集中や偶然に左右されます。3セット以上の中央値が揃っているかを見て、揃っていなければ、まず環境と姿勢を見直します。
最後に、解釈の範囲です。この計測でわかるのは、タップと合図の時間関係に規則性の有無が関わっているかどうかまでです。脳の中で何が起きているかまでは、これだけでは言えません。
公式作品で、予測の感覚を確かめます
アソバースの「WAVE / WAVE」は、4つの音を16ステップに並べてループ再生するリズムスタジオです。パッド演奏の録音やテンポの調整ができます。ループが一定の間隔で繰り返されるので、次の音がいつ来るかを予測しやすい環境です。
テンポを遅い設定と速い設定で変えながら、パッドを叩いてみます。遅いテンポでは拍を待つ余裕があり、速くなるほど「聞いてから叩く」ことが難しくなる感覚が出るかどうか、自分の手で確かめられます。録音した演奏がどう表示・再生されるかは、作品を開いて確認してください。
次の行動
まず上のコードで、規則と不規則を3セットずつ記録してみてください。規則のほうでタップが合図より先に出ていれば、その瞬間に起きているのは反応ではなく予測です。そのうえでWAVE / WAVEを開いてテンポを変え、同じ感覚が音楽の中でも起きるか確かめてみてください。

