マガジン

音の高さで「上・下」は伝わるか:目を閉じて位置を当てる実験の設計書

遊びをつくる

執筆にClaudeを使用しています。

成功、失敗、選択に応じた三種類の音を、異なる形の響きで表したイラスト。
記事のテーマをもとに制作したAI生成イラスト。

画面の外にいる敵や、壁の向こうのアイテムの位置を、音だけで知らせたい場面を考えてみます。いちばん手軽な方法は、高い音を「上」、低い音を「下」に対応させることです。ただし、この対応が説明なしで通じるのか、通じるとしてどの程度の精度なのかは、自分で確かめるまでわかりません。 高い音を上に感じやすいという傾向は、感覚どうしの結びつきを扱う分野で広く話題になっています。ただし、その強さは人や状況によって違うはずです。そこで、自分と周りの数人で「目を閉じて、鳴った音の位置を当てる」実験を組み、設計に使える数字を手元で作ります。この記事は、その手順書です。結果は書いてありません。 確かめるのは次の三つです。

この記事の目次
  1. 準備するもの
  2. 手順:三つの条件と試行の組み方
  3. 記録の取り方
  4. 結果の読み方と、起こりやすい誤り
  5. ゲームの設計に持ち帰る
  6. 次の行動

準備するもの

必要なのは、ブラウザ、イヤホンかヘッドホン、そして実験を手伝ってくれる人です。自分一人でも実施できますが、「高い=上」を事前に知っている人の結果は、説明なし条件の参考になりません。説明なし条件は、この実験の意図を知らない人に担当してもらいます。

下のコードを pitch.html として保存し、ブラウザで開きます。外部ライブラリは使いません。サイン波を0.5秒鳴らし、1・2・3キーで回答を記録します。ランダムに「上・中・下」を選び、対応する高さの音を鳴らすだけの構成です。

html
<!doctype html>
<meta charset="utf-8">
<p>スペース:出題 / 1=上 2=中 3=下 / Enter:結果表示</p>
<pre id="log"></pre>
<script>
const FREQ = {1:880, 2:440, 3:220}; // 条件Cは 1:220, 3:880 に書き換え
let ctx, ans = null, t0 = 0, rows = [];
function play(f){
  ctx = ctx || new AudioContext();
  const o = ctx.createOscillator(), g = ctx.createGain();
  const t = ctx.currentTime;
  o.frequency.value = f; o.connect(g); g.connect(ctx.destination);
  g.gain.setValueAtTime(0.0001, t);
  g.gain.exponentialRampToValueAtTime(0.2, t+0.02);
  g.gain.exponentialRampToValueAtTime(0.0001, t+0.5);
  o.start(t); o.stop(t+0.55);
}
addEventListener('keydown', e=>{
  if(e.code==='Space' && ans===null){
    ans = 1+Math.floor(Math.random()*3);
    play(FREQ[ans]); t0 = performance.now();
  } else if(ans!==null && e.key.length===1 && '123'.includes(e.key)){
    rows.push([rows.length+1, ans, +e.key, Math.round(performance.now()-t0)]);
    ans = null;
  } else if(e.key==='Enter'){
    const ok = rows.filter(r=>r[1]===r[2]).length;
    document.getElementById('log').textContent =
      '回,出題,回答,ms\n'+rows.map(r=>r.join(',')).join('\n')+
      '\n正答 '+ok+' / '+rows.length;
  }
});
</script>

このコードは、回答するたびに正誤を表示することはしません。Enterを押したときだけ結果を出します。回答のたびに答えが見えると、その場で学習が始まり、「直感」を測れなくなるためです。

出題の「出題」列は位置(1=上、2=中、3=下)です。音の高さは FREQ で決まります。条件Cでは、1と3の周波数を入れ替えます。

手順:三つの条件と試行の組み方

条件の定義

条件は次の三つです。いずれも、フィードバックなしで30回を1セットとします。

  • A、事前の説明:「音が鳴ったら、上・中・下のどれだと感じるか選んでください」とだけ伝える、FREQ:1:880、2:440、3:220
  • B、事前の説明:「高い音が上、低い音が下です」と伝える、FREQ:同上
  • C、事前の説明:「高い音が下、低い音が上です」と伝える、FREQ:1:220、2:440、3:880

条件Aは、「正解」を知らない回答者に選んでもらう条件です。コード上は高い音を「上」としているので、Aの正答率は「直感が高い=上にどれだけ揃うか」の指標になります。ここで見たいのは、正答率というより、回答の揃い方です。

順序の決め方

同じ人が全条件を受けると、先に聞いた説明が後に影響します。次の順序を守ってください。

  1. 全員が最初にAを受けます。
  2. 次にBとCを受けます。順序は人ごとに入れ替えます。1人目はB→C、2人目はC→Bという具合です。
  3. 条件の間に2〜3分の休憩を入れます。

人数が少なく入れ替えが難しい場合は、「順序の影響が残る」と記録に書き添えて読んでください。

1セットの進め方

  1. 音量を、小さく聞こえない程度の中くらいに合わせます。セット中は変えません。
  2. 本番の前に、練習として5回だけ鳴らします。正答の確認はしません。目的は、キーの位置を指で覚えることです。
  3. 目を閉じます。画面を伏せる方法でも構いませんが、目を閉じるほうがログが目に入りません。
  4. スペースで出題し、音を聞いたら1・2・3で答えます。これを30回繰り返します。
  5. 30回が終わったらEnterで結果を表示し、内容を記録シートに写します。

練習の5回は、ログの先頭5行にあたります。集計時に除いてください。つまり1セットは練習5回+本番30回の計35回です。

記録の取り方

記録の単位は「1回の出題」です。ログに出る行をそのまま使えます。1セットが終わるごとに、次の表の形で写してください。

  • 回答者ID、内容:名前ではなく A1、A2 などの記号
  • 条件、内容:A・B・C と、実施した順番
  • 正答数、内容:本番30回のうち、出題と回答が一致した回数
  • 上下の取り違え数、内容:出題が1で回答が3、または出題が3で回答が1だった回数
  • 隣の誤り数、内容:上と中、中と下を取り違えた回数
  • 反応時間の中央値、内容:本番30回の ms の中央値(平均ではなく中央値)
  • 使用機器・音量、内容:イヤホン/ヘッドホン、スピーカーの別と音量メモ

「上下の取り違え」を別に数えるのが、この実験のポイントです。ゲームで「上にいる」と知らせたつもりが「下」と受け取られるのは、「中」と間違われるよりも深刻な失敗です。正答率が同じでも、誤りの内訳が違えば設計の判断は変わります。

反応時間に中央値を使うのは、1回だけ極端に遅い回答(迷った、キーを探した)が平均を引きずるのを避けるためです。

結果の読み方と、起こりやすい誤り

偶然との見分け方

3択で当てずっぽうに答えると、30回のうち正答は平均10回前後になります。偶然のばらつきは標準偏差で2.6回ほどなので、15回前後までは偶然の範囲として揺れる可能性があります。そこで、次のような目安を自分たちで置いてください。

  • 正答15回以下:偶然と区別しにくい。その条件では位置が伝わっているとは言いにくい。
  • 正答16〜24回:偶然よりは高いが、ゲームで頼るには不安が残る。
  • 正答25回以上:安定して読み取れている。

境界は自分たちで置く目安であり、統計的な保証ではありません。人数が少ないうちは、個人の差が大きく出ます。1人分の結果で結論を出さず、全員の傾向を並べて読んでください。

条件の比べ方

三つの条件の比較で、次のように判断します。

  • AとBの差が小さい場合: 説明がなくても通じやすい対応だと言えます。案内文なしでも使える可能性があります。
  • BがAを大きく上回る場合: 一言の説明が効いています。ゲーム内のチュートリアルや最初の一回の例示を入れる価値があります。
  • Aで「上下の取り違え」が目立つ場合: 回答者が逆の対応で受け取っています。説明なしで使うのは避け、必ず案内を添えます。
  • BとCの差が小さい場合: 対応の向きよりも、「事前に伝えたこと」のほうが効いています。直感に合わなくても、伝えれば使える対応だと読めます。
  • CがBより低く、上下の取り違えが増える場合: 逆の対応は覚えにくく、とっさの場面では間違えやすい対応です。理由がなければ高=上にそろえるのが無難です。
  • 反応時間が条件で違う場合: 正答率が近くても、遅いほうは迷いが多い対応です。アクションの速いゲームでは、反応時間の差を重く見てください。

起こりやすい誤り

  • 音量や機器がセットごとに変わる: 聞こえ方が変わり、条件の差か機器の差か区別できません。セット中は固定し、変えたら記録します。
  • 周波数の差が小さすぎる: 3段階の差を狭くすると、音の高さの違い自体を聞き分けにくくなります。聞き分けの問題と空間の対応の問題が混ざるので、まずは本記事の3つの周波数で試し、その後に差を縮めて試してください。
  • 音色を変える: サイン波以外に変えると、高さ以外の要素(明るさ、鋭さ)が位置の印象に影響する可能性があります。比較するなら、音色を変える実験を別に組みます。
  • ログを途中で見てしまう: 回答のたびに結果が見えると学習が起きます。Enterは30回が終わるまで押さないでください。
  • キー位置を忘れて目を開ける: 目を閉じると1・2・3の場所を見失う人がいます。練習の5回で指の位置を確認し、必要ならキーボードに付箋を貼ります。
  • 人数が少ないのに断定する: 3〜5人では個人差がそのまま結果になります。「この範囲の人では」という言い方にとどめてください。
  • 出題の偏り: 乱数なので、1が12回、3が6回のように偏る回もあります。偏りが大きい回は、位置別の正答も見てください。

ゲームの設計に持ち帰る

結果が出たら、ゲームへの落とし込みを三つの観点で考えます。

一つ目は、音を唯一の手がかりにしないことです。聞こえ方には個人差があり、環境によっては音を出せません。「こだまの森」のように音なしでも遊べる作品があるのは、そうした条件を考えた設計の一例です。光や形など、見た目の手がかりを併用する案も並べて考えてください。

二つ目は、音域を変えて同じ実験をくり返すことです。「雨音のピアノ」にはZとXで音域を切り替える機能があります。使いたい音域が決まっていない段階なら、このような道具で高い・低いの聞こえ方を耳で確かめてから、FREQ の値を決めるのも手です。

三つ目は、上下だけでなく左右も試すことです。本記事のコードは FREQ の定義を増やすだけで、段階数を変えられます。左右の定位(左右のスピーカーに振り分ける方法)を加えれば、二次元の位置を音で伝える実験に広げられます。

次の行動

まずは pitch.html を保存し、自分でBの条件を30回試して、キー操作と音量に慣れてください。次に、事情を知らない1人にAの条件をお願いし、回答が「高い=上」に揃うかを確かめます。記録シートの「上下の取り違え数」を見れば、自分のゲームで高低を使ってよいかの判断材料になります。