一曲の録音に含まれる音の間隔:人の演奏のゆらぎを数で見る
遊びを見つける執筆にClaudeを使用しています。

雨音のピアノで30秒の短い曲を録音し、再生して聴き直す場面を考えてみます。弾いている最中は一定の速さのつもりでも、再生すると、どこかで急いでいたり、ためらっていたりすると感じることがあります。この「揺れた気がする」を、数で言い直せるかどうかを確かめるのがこの記事の問いです。 雨音のピアノの録音は、30秒・128音までです。すべての音を30秒に均等に並べると、1音あたり約0.23秒(30÷128)になります。これは上限から出る計算で、演奏の結果ではありません。人が弾く場合、音の間隔はこの平均のまわりで増えたり減ったりします。その増減を取り出して眺めるのが、ここでの分析です。 数値の結果は載せません。記録ページの作り方、集計の単位、読み方の基準を示すので、読者自身の演奏で答えを出してください。
問いを数に直す:発音の間隔とずれ
「揺れ」は、次の2つの数に分けて考えると扱いやすくなります。
- 発音間隔(IOI):ある音が鳴ってから次の音が鳴るまでの時間です。ミリ秒(1000分の1秒)で表します。N個の音があれば、間隔はN−1個できます。
- 格子とのずれ:「この速さで刻むはず」という目標の間隔で等間隔の目盛り(格子)を作り、実際の発音時刻との差を取ったものです。最初の音を0として、2音目は目標間隔のところ、3音目はその2倍のところ、と並べます。
間隔は「隣り合う音どうしの揃い方」を、ずれは「全体としてテンポを守れたか」を教えてくれます。たとえば、少しずつ速くなる演奏では、隣どうしの間隔はほぼ揃っていても、格子とのずれは時間とともに大きくなります。見る面が違うので、両方を記録します。
間隔の揃い方は、次の3つの値で要約できます。
- 間隔の平均:演奏の平均的な速さです。
- 標準偏差:間隔が平均からどれだけ散らばるかを示します。
- 変動係数:標準偏差を平均で割った値です。速さが違う演奏どうしでも比べられます。
準備するもの:雨音のピアノと記録ページ
用意するのは次のものです。
- 雨音のピアノ(耳で確認する用途です)
- 下に載せる記録ページ(HTMLを1つ保存して、ブラウザで開くだけです)
- 物差しとなる一定のテンポ(任意です)。手元のメトロノームアプリなどを使うと、「目標の速さ」を外から与えられます。
雨音のピアノの録音は、画面を開いている間だけ残る仕様です。録音した音の発音時刻を数値で書き出せるかどうかは、この記事では確認できていません。作品を開いて確かめてください。そこで、数える役は別の記録ページに任せ、雨音のピアノは「同じ曲をもう一度聴いて、数と耳の印象を照らし合わせる」ために使います。
雨音のピアノのキーボード操作はA W S E D F T G Y H U Jの12キーです。記録ページも同じ12キーだけを数えるようにしておけば、指の動きを作品と揃えられます。
手順:弾く・記録する・計算する
記録ページ(コード)
次のHTMLをテキストエディタに貼り付け、kankaku.htmlなどの名前で保存してブラウザで開きます。外部ライブラリは使わず、通信もしません。
<!doctype html>
<meta charset="utf-8">
<title>打鍵の間隔</title>
<p>キーA〜Jで弾き、Enterで集計、Escでやり直しです。</p>
<label>目標の間隔(ミリ秒)<input id="t" type="number" value="500"></label>
<pre id="out"></pre>
<script>
let times = [];
const out = document.getElementById('out');
addEventListener('keydown', e => {
if (e.target.id === 't') return;
if (e.repeat) return;
if (e.key === 'Escape') { times = []; out.textContent = ''; return; }
if (e.key === 'Enter') { report(); return; }
if (e.key.length === 1 && 'awsedftgyhuj'.includes(e.key.toLowerCase())) {
times.push(performance.now());
out.textContent = times.length + '音';
}
});
function stat(a) {
const m = a.reduce((s, x) => s + x, 0) / a.length;
const v = a.reduce((s, x) => s + (x - m) ** 2, 0) / a.length;
return { m, sd: Math.sqrt(v) };
}
function report() {
if (times.length < 4) { out.textContent = '4音以上弾いてください'; return; }
const ioi = times.slice(1).map((x, i) => x - times[i]);
const s = stat(ioi);
const T = Number(document.getElementById('t').value);
const dev = times.map((x, i) => x - times[0] - i * T);
let text = '間隔の平均 ' + s.m.toFixed(1) + ' ms\n';
text += '標準偏差 ' + s.sd.toFixed(1) + ' ms\n';
text += '変動係数 ' + (s.sd / s.m).toFixed(3) + '\n';
text += '格子とのずれ(ms)\n' + dev.map(d => d.toFixed(0)).join(', ');
out.textContent = text;
}
</script>このページは音を鳴らしません。キーを押した瞬間の時刻(performance.now())を並べ、Enterで平均・標準偏差・変動係数と、格子とのずれの一覧を表示します。目標の間隔の欄に数字を入れたあとは、ページの空いた場所をクリックして入力欄から離れてください。入力欄にフォーカスがあると、キー入力は数えられません。
3つの条件で記録する
1回の測定では偶然の影響が大きいので、条件を分けて、各条件を複数回行います。
- A、弾き方:同じキー(例:Aだけ)を、自分の感覚で一定に20回ほど弾く、見たいこと:内なるテンポの安定さ
- B、弾き方:同じキーを、メトロノーム等に合わせて20回ほど弾く(目標の間隔を欄に入力)、見たいこと:外の拍に合わせたときのずれ
- C、弾き方:雨音のピアノで録音するのと同じ短いフレーズを弾く、見たいこと:音の並びによる間隔の変化
記録の取り方は次のとおりです。
- 単位は「1回の演奏」です。1回ごとに集計し、結果を紙か表計算に書き写します。
- 各条件を5回以上行います。連続して一気に行うより、時間を置いて行うほうが、疲れや慣れの影響を分けて見られます。
- 条件Cは、雨音のピアノでも同じフレーズを録音しておきます。記録ページで集計した直後に、作品内の再生を聴き直し、気になった場所の番号(何音目か)をメモします。
条件Aの目標の間隔は、最初に何回か弾いて出た平均値を入力し直すと、全体のテンポのずれ(ドリフト)と、細かいゆらぎを切り分けられます。
結果の読み方
出力された数値は、次のように読みます。
変動係数を見る:同じ人が、同じ条件を繰り返したときの数値が近ければ、そのゆらぎはその人の癖として安定していると言えます。回ごとに大きく変わるなら、集中や体調、環境の影響が大きいと考えられます。条件AとBを比べて、変動係数がどちらで小さくなるかを見ると、外の拍がゆらぎを抑えるのかどうかを自分のデータで確かめられます。
格子とのずれの並びを見る:ずれの一覧は、形で読みます。
- 一方向に増え続ける(右肩上がり、または右肩下がり):目標より遅い、または速いテンポで弾いていたということです。目標の間隔を平均に合わせ直して計算し直すと、傾きが消えます。
- 行ったり来たりする:テンポは守れていて、1音ごとの揺れが残っています。
- 途中で段差のように変わる:その位置で、息継ぎやつまずきがあった可能性があります。条件Cでは、弾いたフレーズのどの音かと照らし合わせます。
条件Cで耳と数を照合する:間隔が長くなった場所は、「ためた」と聞こえる場所かもしれません。同じ場所を雨音のピアノの再生で聴き、数が大きい音と、耳が「揺れた」と感じた音が一致するかを確かめます。一致しなければ、耳の印象は音の強さや余韻に引っ張られている可能性があります。
なお、ゆらぎが小さいほどよい演奏、とは限りません。演奏では、あえてテンポを動かして表情をつけることがあります。数は「どこが動いたか」を示す道具で、良し悪しの判定ではありません。
起こりやすい誤り
- 押した時刻と、音が聞こえる時刻は別です:記録ページが取るのはキーを押した時刻です。作品側で音が鳴るまでの遅れは、この記事では測っていません。間隔どうしの比較なら遅れの一定分は打ち消されますが、メトロノームの音との絶対的なずれを論じるときは注意してください。
- 押しっぱなしの連打を数えないこと:ページはe.repeatで長押しの連続入力を除いています。ただし、キーを押し直すつもりでも、押したまま次のキーに移ると、取りこぼしが出ることがあります。音の数が弾いた数と合っているか、毎回確認します。
- 音が少なすぎること:間隔が数個しかないと、標準偏差は安定しません。20音以上を目安に、複数回の結果を並べて見ます。
- 回数を絞って都合のよい回だけ選ぶこと:最も揃った1回だけを見ると、普段のゆらぎがわかりません。取った回はすべて残してください。
- 別の端末や環境で比べること:キーボードの種類や処理の混み具合で、時刻の取り方は変わり得ます。比較は同じ環境の中で行います。
- 他人の数と並べること:人によって、弾く速さも癖も違います。数は自分の中での比較に使うほうが意味を持ちます。
次の行動
記録ページを保存して、条件Aを5回、短く記録するところから始めてください。そのあと雨音のピアノで同じように弾いて録音し、再生を聴きながら、数の大きかった音が耳でも気になるかどうかを照らし合わせてみてください。録音の時刻が作品から書き出せるかは、作品を開いて確かめてください。

