マガジン

ドラムマシンの16ステップを15にすると、リズムはどう聞こえるか

遊びを見つける

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

振り子と色の異なる円を並べ、ゲームのリズムや間を表す立体作品。
記事のテーマをもとに制作したAI生成イメージ。実際のゲーム画面ではありません。

4つのキックが等間隔に並ぶ16ステップのループから、最後の1ステップだけを切り落として15ステップにする場面を考えてみます。キックの間隔は「4・4・4・4」から「4・4・4・3」に変わります。たった1ステップの差ですが、ループの頭に戻る場所が1つ手前になります。 この記事は、その差を耳でどう感じるかを、自分で確かめるための実験の設計書です。結果は書きません。「手拍子が合うか」「どこで頭が分からなくなるか」は、聴く人、テンポ、使う音によって変わるためです。読者が同じ手順を踏めば、自分の耳で答えが出る形にします。 舞台は、4つの音を16ステップに並べてループ再生するリズムスタジオ「WAVE / WAVE」です。ただし、この作品に15ステップへ切り替える設定があるかどうかは、確認できている範囲では分かりません。そこで「WAVE / WAVEで16ステップを使い切るケース」「最後の1ステップを空けるケース」と、短いコードで作る「本当に15で回るケース」の3条件を比べます。

この記事の目次
  1. 16と15の違いを、数字で先に整理する
  2. 準備するもの
  3. 手順:3条件を同じ土俵で聴き比べる
  4. 結果の読み方
  5. 誤りやすい点
  6. 次の行動

16と15の違いを、数字で先に整理する

比べる前に、何が変わるのかを数えておきます。1ステップを16分音符とし、テンポを100BPM(1分間に100拍)とします。1拍は4ステップなので、1ステップは60÷100÷4=0.15秒です。

  • 16ステップの1周は、0.15×16=2.4秒です。
  • 15ステップの1周は、0.15×15=2.25秒です。

ここで、拍子の見え方も整理します。

  • A:16ステップ、1周の長さ:16、キックの間隔(ステップ):4・4・4・4、ループの周期:16
  • B:15ステップ分だけ使い、最後を空ける、1周の長さ:16、キックの間隔(ステップ):4・4・4・4(最後の1つは無音)、ループの周期:16
  • C:本当に15で回す、1周の長さ:15、キックの間隔(ステップ):4・4・4・3、ループの周期:15

条件Bは、見た目は15ステップ分のパターンでも、ループの長さは16のままです。空白を1つ含んだ16拍子です。条件Cは、1周そのものが15で、頭が1ステップ早く戻ってきます。BとCは似ていますが、問いが違います。Bは「最後に休符が入ると聞こえ方が変わるか」、Cは「周期そのものが変わると聞こえ方が変わるか」を確かめます。

準備するもの

用意するのは次の4つです。

  • WAVE / WAVE(ブラウザで開きます。保存があるので、作ったパターンは後から開き直せます)
  • ヘッドホンまたはスピーカー(3条件で同じ機器を使います)
  • 記録用のメモ(表は後述します)
  • 条件Cを鳴らす小さなHTMLファイル

条件Cは、次のコードを 15.html のような名前で保存し、ブラウザで開けば動きます。外部ライブラリは不要で、ステップ数とテンポの欄を変えるだけで、16にも15にも戻せます。

html
<!doctype html>
<meta charset="utf-8">
<button id="b">開始/停止</button>
<label>ステップ数 <input id="n" type="number" value="15" min="8" max="16"></label>
<label>テンポ(BPM) <input id="t" type="number" value="100" min="60" max="180"></label>
<script>
let ctx, timer = 0, i = 0, when = 0;
const K = [0, 4, 8, 12], S = [4, 12];
function hit(t, f, d, g, type) {
  const o = ctx.createOscillator(), v = ctx.createGain();
  o.type = type; o.frequency.value = f;
  v.gain.setValueAtTime(g, t);
  v.gain.exponentialRampToValueAtTime(0.001, t + d);
  o.connect(v); v.connect(ctx.destination);
  o.start(t); o.stop(t + d);
}
function tick() {
  const n = +document.getElementById("n").value;
  const len = 60 / +document.getElementById("t").value / 4;
  while (when < ctx.currentTime + 0.2) {
    const s = i % n;
    if (K.includes(s)) hit(when, 80, 0.2, 0.9, "sine");
    if (S.includes(s)) hit(when, 220, 0.1, 0.4, "square");
    hit(when, 2000, 0.03, s % 4 ? 0.05 : 0.12, "square");
    when += len; i++;
  }
}
document.getElementById("b").onclick = () => {
  if (timer) { clearInterval(timer); timer = 0; return; }
  ctx = ctx || new AudioContext();
  ctx.resume(); i = 0; when = ctx.currentTime + 0.1;
  timer = setInterval(tick, 25);
};
</script>

キックを0・4・8・12、スネアを4・12、ハットを全ステップに置いた最小のパターンです。ステップ数を15にすると、12番目のキックの次は2ステップ先ではなく、3ステップ先で頭のキックに戻ります。

手順:3条件を同じ土俵で聴き比べる

1. 条件Aを作る

WAVE / WAVEで、4つ打ちに近い単純なパターンを作ります。3つのお手本から近いものを選んでもかまいません。お手本の読み込み方や、ステップを増減させる操作は、作品を開いて確かめてください。キック、スネア、ハットの位置は、上のコードと同じ位置(キックは1・5・9・13番目、スネアは5・13番目)にそろえると、条件Cとの比較が公平になります。ここでのステップ番号は、1から数えた場合の位置です。

テンポは100BPM前後に固定し、スウィング(跳ねる揺れ)は最初はオフにします。条件ごとに変える要素は、ステップ数だけにするためです。

2. 条件Bを作る

条件Aのパターンから、16番目のステップのハットなど、鳴っている音をすべて消します。ループの長さは16のままなので、頭に戻る位置は条件Aと同じです。その代わり、最後の1つだけ無音になります。

3. 条件Cを鳴らす

保存したHTMLを開き、ステップ数を15、テンポを条件AとBと同じ値にして、開始を押します。コードが鳴らす音色はWAVE / WAVEと違います。音色による差を避けたいときは、WAVE / WAVEの音色にできるだけ近い、低音・中音・高音の3つのトラックを選んで比べてください。

4. 順番と回数を決める

聴く順番は、A→B→Cの固定にしません。たとえば1回目をA→B→C、2回目をC→A→B、3回目をB→C→Aとし、各条件を合計3回聴きます。1回の長さは、ループ12周ほど(約30秒)を目安にします。最初の数周は「何が起きているか」を探す時間になりやすいので、後半の数周で評価します。

5. 記録を取る

1回聴いたら、1分以内に次の表をメモします。

  • 条件(A/B/C)、記録のしかた:他の人に聴いてもらう場合は、条件名を伏せて記号だけで記録します
  • 手拍子、記録のしかた:4拍子で手拍子をして、ずれずに最後まで続けられた周数を記録します
  • 頭の分かりやすさ、記録のしかた:ループの頭がどこか、1〜5点で記録します
  • つんのめり感、記録のしかた:次の周に入るときの違和感を、1〜5点で記録します
  • 一言メモ、記録のしかた:「急に戻る」「休んだ」など、感じたことを短く書きます

点数は感覚で構いませんが、評価の基準は3回の間で変えないでください。

結果の読み方

数字がそろったら、条件ごとに平均を出し、次の順に読みます。

AとCを比べます。 手拍子を続けられた周数や頭の分かりやすさに差が出たなら、1ステップの違いが体感できる大きさだったと判断できます。差がほとんどないときは、テンポを速くしたり、ハットを消してキックとスネアだけにしたりして、条件を単純にしてもう一度聴きます。ハットが刻みの手がかりになって、周期の違いを隠している可能性があります。

BとCを比べます。 「頭に戻る場所」と「最後の休符」のどちらが違和感の原因か、ここで分かります。Bの違和感が小さくCの違和感が大きいなら、休符よりも周期が変わることの影響が大きいと読めます。逆にBの違和感がCと同じくらい大きいなら、違和感の主な原因は、16拍の中に生まれた不規則な間にあると考えられます。

Aと「慣れた後のC」を比べます。 Cを聴く回数を重ねると、違和感が変化するかもしれません。1回目と3回目の点数を並べて、変化があったかを見ます。変化が出た場合、それは15拍子そのものの性質というより、耳が慣れる過程の可能性があります。

どの結果でも、3回の試行だけで「15は聴きにくい」「15は気持ちいい」と一般化しないでください。ここで分かるのは、自分の耳と、このパターン、このテンポでの傾向です。

誤りやすい点

  • 条件Bを15ステップだと思い込む:Bは周期16のままです。休符が入っただけなので、Cとは別の条件として扱います。
  • テンポが違うまま比べる:15ステップは1周が短いため、体感が速くなったと感じることがあります。数字のテンポを必ずそろえます。
  • 音量や音色が違う:コードの音とWAVE / WAVEの音は別物です。音色の違いを見たいのではないので、3条件のうちどの比較でも、同じ音の組み合わせで比べるのが理想です。条件Cだけ別の音になってしまうなら、条件Aも同じコードで鳴らす(ステップ数を16にする)方法も使えます。
  • ミュートを使わず要素が多すぎる:トラックごとのミュートが使えます。まずキックだけ、次にキックとスネアだけ、と減らして聴くと、どの音が周期の手がかりになっているかが分かります。
  • スウィングが入ったまま:スウィングは1ステップごとの長さを不均一にするので、周期の違いと区別がつかなくなります。最初はオフで始めます。
  • 聴く順番が毎回同じ:最初に聴いた条件が基準になってしまいます。順番を入れ替えます。
  • ブラウザの音の遅れを周期の違いと取り違える:開始直後の数周は、音の出だしが不安定なことがあります。評価は後半の周に限ります。

次の行動

まずWAVE / WAVEで、キックとスネアだけの16ステップのパターンを作り、2分ほど聴いてみてください。次に、16番目のステップを空にして条件Bを作り、最後に上のHTMLでステップ数を15にして条件Cを聴きます。3回分の記録表がそろったら、自分の耳が「どこで頭を見失うか」を一言で書き出してみましょう。