マガジン

音の出だしを削ると楽器は別の楽器に聞こえるか

遊びをつくる

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

つなぎ目のない銅色のリボンとテープリールで、自然なBGMループを表した写真風イメージ。
記事のテーマをもとに制作したAI生成イラスト。

ピアノの音から、鍵盤を叩いた瞬間の「コッ」という部分だけを切り落として、伸びている部分から再生します。これをピアノと答えられる人は、どのくらいいるでしょうか。同じ操作をギターやフルートに行うと、答えやすさは楽器ごとに違うのでしょうか。この記事は、その差を自分の耳と数人の協力者で確かめるための実験の設計書です。 音の出だしは「アタック」と呼ばれます。音色を決めるのは持続している部分の倍音の構成だけではなく、立ち上がりの数十ミリ秒にも手がかりがある、という話は音響の入門書などでよく紹介されます。ただ、その手がかりがどの楽器でどれほど効くかは、実際に聞き比べないと実感できません。ここでは結果を先取りせず、条件の組み方、記録の仕方、結果の読み方を具体的に示します。 ゲームを作る人にとっては、この問いは実用にもつながります。効果音の先頭を数十ミリ秒削って反応を速くしたいとき、あるいは軽量化のために音を短くしたいとき、「削っても何の音か伝わるか」は設計上の判断材料になります。

この記事の目次
  1. 何を確かめる実験か
  2. 準備するもの
  3. 条件の組み方と手順
  4. 記録の取り方
  5. 結果の読み方と誤りやすい点
  6. 次の行動

何を確かめる実験か

確かめる問いは一つです。同じ録音から先頭を削った音を、聞き手は元の楽器だと答えられるか、という問いです。

変える条件は「削る長さ」だけです。音高、音量、録音環境、再生機器、聞く人は固定します。見る指標は「正解の楽器を選べた割合」と「答えの確信度」の2つです。

先に自分の予想を書いておくと、結果の読み方が楽になります。たとえば次のように、楽器ごとに予想を立てます。

  • 打鍵や撥弦のように立ち上がりが鋭い楽器は、削ると答えにくくなるはずです。
  • 息や弓で音を保つ楽器は、削っても持続部分で答えられるはずです。
  • 削る長さが短いうちは差が出ず、ある長さを超えると急に答えにくくなるはずです。

予想は外れてもかまいません。外れた箇所が、この実験でいちばん学べるところです。

準備するもの

音源

楽器の単音を3〜5種類用意します。たとえば撥弦(ギターなど)、打鍵(ピアノなど)、吹奏(フルートなど)、擦弦(バイオリンなど)のように、音の立ち上がり方が異なる種類を混ぜると、差が見えやすくなります。

音源は自分で録音するか、再配布や加工が許可されている素材を使います。ライセンスの扱いは素材ごとに違うため、利用条件は配布元の表記で確認してください。加工した音を人に聞かせるだけでも、公開や配布を伴う場合は特に注意が必要です。判断に迷う場合は、公式情報や専門家に確認するのが確実です。

そろえる条件は次のとおりです。

  • 音高は全楽器でそろえます(たとえば同じ高さのド)。
  • 長さは1〜2秒程度にそろえます。
  • 音量は聞こえ方がおおよそ同じになるよう調整します。
  • 形式はWAVを推奨します。MP3などの圧縮形式は、先頭に変換由来の短い空白が入ることがあり、削る長さの基準がずれます。

先頭の無音を取り除く

録音ファイルの先頭には、演奏が始まる前の無音が含まれていることがよくあります。波形を表示できる音声編集ソフトで、音が立ち上がる直前までを切り取り、立ち上がりがファイルの先頭ちょうどに来るようにそろえます。

この作業を省くと、「50ミリ秒削った」つもりでも実際には無音を削っただけ、ということが起こります。実験の条件が崩れる原因の筆頭です。

再生用の小さなページ

次のHTMLを trim.html として保存し、ブラウザで開きます。音声ファイルを選び、削る長さ(ミリ秒)とフェードイン、音量を指定して再生できます。サーバーも外部ライブラリも不要です。

html
<!doctype html>
<meta charset="utf-8">
<input type="file" id="file" accept="audio/*"><br>
削る長さ(ms) <input type="number" id="cut" value="0" min="0" step="10"><br>
フェードイン(ms) <input type="number" id="fade" value="5" min="1" step="1"><br>
音量(0〜1) <input type="number" id="vol" value="0.8" min="0" max="1" step="0.05"><br>
<button id="play">再生</button>
<pre id="info"></pre>
<script>
const ctx = new AudioContext();
let buf = null;
const $ = id => document.getElementById(id);
$('file').onchange = async e => {
  const f = e.target.files[0];
  if (!f) return;
  buf = await ctx.decodeAudioData(await f.arrayBuffer());
  $('info').textContent = '長さ: ' + Math.round(buf.duration * 1000) + 'ms';
};
$('play').onclick = async () => {
  if (!buf) return;
  await ctx.resume();
  const cut = Math.min($('cut').value / 1000, buf.duration - 0.1);
  const fade = Math.max($('fade').value / 1000, 0.001);
  const src = ctx.createBufferSource();
  const g = ctx.createGain();
  src.buffer = buf;
  const t = ctx.currentTime + 0.05;
  g.gain.setValueAtTime(0, t);
  g.gain.linearRampToValueAtTime($('vol').value, t + fade);
  src.connect(g).connect(ctx.destination);
  src.start(t, cut);
};
</script>

src.start(t, cut) の第2引数が、音源の先頭から何秒目の位置で再生を始めるかを表します。ここが「削る」操作の本体です。フェードインは、途中から再生するときに出る「プツッ」というクリック音を避けるためのものです。

条件の組み方と手順

削る長さは、0ミリ秒(元のまま)を基準に、短い値から長い値へ段階的に並べます。たとえば 0、10、30、100、300 ミリ秒の5段階です。楽器によって立ち上がりの長さが違うため、最初は広めに取り、差が出る範囲が見えてから細かく刻み直すと効率的です。

フェードインは全条件で同じ値に固定します。ここを変えると、「削った効果」と「立ち上がりをなだらかにした効果」が混ざってしまいます。0ミリ秒の条件にも同じフェードを適用し、基準の音もフェードありで統一してください。

手順は次のとおりです。

  1. 出題者が、楽器と削る長さの組み合わせの一覧を作ります。楽器4種類 × 削る長さ5段階なら20通りです。
  2. 一覧の順番をランダムに並べ替えます。カードに書いて混ぜてもかまいません。
  3. 回答者には画面と一覧を見せず、再生だけを聞かせます。出題者は回答者に背を向けて操作します。
  4. 各回の再生は1回までにします。聞き直しを許すと、条件間の差が曖昧になります。
  5. 回答者は、選択肢(実験に使った楽器の名前を並べた紙)から1つを選び、確信度を1〜5で答えます。
  6. 回答のたびに、出題者が記録します。

回答者は、できれば3人以上に協力してもらいます。出題者自身は音源を知っているため、回答者にはなれません。一人で行う場合は、数日置いてから、自分で作った一覧を見ずに再生順を決める方法もありますが、完全には記憶を消せません。その限界は結果の解釈に織り込んでください。

始める前に、各楽器の元の音を一度ずつ聞かせるかどうかを決めます。聞かせると手がかりが増えて正答率が上がり、聞かせないと楽器の名前だけで判断することになります。どちらにするかを全員で統一し、記録に残してください。

記録の取り方

1回の回答を1行として、次の項目を記録します。

  • 回答者、内容:名前でなく記号(A、B、C)で記録します
  • 試行番号、内容:再生した順に1から振ります
  • 楽器(正解)、内容:出題者だけが知っている欄です
  • 削った長さ、内容:ミリ秒で記録します
  • 回答、内容:選んだ楽器です
  • 確信度、内容:1〜5
  • 備考、内容:「クリック音が気になった」などの自由記述です

集計は2段階で行います。

  • 正答率は、削った長さごと、楽器ごとに「正解数 ÷ 出題数」を出します。
  • 誤答の行き先は、楽器ごとに、どの楽器と答えたかを数えます。

試行数が少ないと、1回の偶然で割合が大きく動きます。楽器と削る長さの1組につき、最低でも回答者3人 × 各1回の3回分は集めたいところです。余裕があれば、同じ組み合わせを別の日にもう一度聞いてもらうと、安定度が分かります。

結果の読み方と誤りやすい点

結果の読み方

まず、偶然で当たる確率を計算します。選択肢が4つなら25%です。削る長さ0ミリ秒の条件でも正答率がこの水準に近いなら、音源の選び方か選択肢の作り方が難しすぎて、実験が成立していません。音源を差し替えてやり直すのが先です。

基準が十分高いことを確認できたら、削る長さを増やしたときの動きを楽器ごとに見ます。判断の目安は次のとおりです。

  • 削るにつれて正答率が偶然の水準へ近づくなら、その楽器は出だしが大きな手がかりです。
  • 長く削っても正答率が高いなら、持続部分だけで足りるか、もともと他の楽器と区別しやすい音です。
  • ある段階で急に落ちるなら、その長さの前後に手がかりが集中している可能性があります。刻みを細かくして追加で確かめます。

誤答の行き先も重要です。たとえば、削ったある楽器の音がいつも同じ別の楽器と答えられるなら、その2つは持続部分が似ていて、出だしの違いに頼って区別されていたと考えられます。ゲームの音づくりでは、「出だしを削ってよい音」と「出だしを残すべき音」の分類にそのまま使えます。

確信度は、正答率と別に見ます。正答率が同じでも、確信度が下がっているなら、迷いながら当てているということです。

人数が少ない実験では、傾向は分かっても断定はできません。「この実験の範囲ではこう見える」と留めておくのが妥当です。

誤りやすい点

  • 削った後の音量が変わる問題があります。アタックには音量の山があることが多く、削ると全体が静かに聞こえます。音量差を手がかりに答えられてしまうため、聞こえ方がそろうよう音量欄で調整してください。
  • クリック音が混入することがあります。フェードインの値を短くしすぎると出やすくなります。回答者の備考にクリックへの言及が多いときは、フェードを少し伸ばして全条件を取り直します。
  • 録音の部屋鳴りが違うと、楽器以外の理由で区別できてしまいます。録音環境はそろえてください。
  • 順番の学習効果があります。削る長さが短い順に並べて聞かせると、前に聞いた音を手がかりにできます。必ずランダム順にします。
  • 聞く環境の違いも影響します。スピーカーとイヤホンでは低音や立ち上がりの聞こえ方が変わります。回答者全員が同じ機器で聞くようにしてください。
  • 長時間続けると耳が疲れます。20回前後ごとに休憩を入れます。

次の行動

まず1種類の楽器だけで、0ミリ秒と100ミリ秒の2条件を、ランダムな順で友人に聞いてもらってください。それで手応えが得られたら、楽器と段階を増やします。

この実験の結果は、ゲームの効果音やBGMの先頭を何ミリ秒まで削ってよいか、判断する基準として使えます。再生ページ自体も、音声ファイルを同梱して相対パスで読み込むようにすれば、アソバースに作品として投稿する材料になります。サイズや形式の条件は、投稿画面の案内で確認してください。