よく調律された楽器で和音を鳴らしたとき、澄みきって聞こえることもあれば、かすかに「ワウワウ」と音量が揺れて聞こえることもあります。この揺れは気のせいではなく、周波数から計算で求まる、はっきりした物理現象です。今回は、その揺れ——うなり——の正体をたどり、平均律と純正律という二つの調律を、プログラムでどう鳴らし分けるのかを見ていきます。
少しだけこの連載のことを。ここでは楽器の音をプログラムで作る仕組みを紹介しています。筆者は個人で音感トレーニングアプリ Harmonize を作っていて、これはまさに今回の「うなりが消える位置」を耳で探し当てる練習をするアプリです。純正律や平均律が音楽やトレーニングのなかでどんな意味を持つかは Harmonize の Q&A にまとめてあるので、本記事では現象そのものと、その作り方に絞ります。
うなりには二段階ある
まず揺れそのものから。じつは、うなりの起き方には二段階あって、ここを分けておかないと話が混ざります。
ひとつめは、高さのごく近い二つの音のあいだで起きるうなりです。440Hz と 442Hz のように基音(その音のいちばん低い成分)どうしが近いと、二つの波が少しずつズレていき、山と山が重なる瞬間は大きく、山と谷がぶつかる瞬間は小さくなる。これがくり返されて音量が脈打ちます。その速さは二つの周波数の差にちょうど等しく、$442 - 440 = 2$ で1秒に2回。差が縮むほどゆっくりになり、ぴったり同じ高さで消えます。ここで大事なのは、これは倍音がなくても、純粋なサイン波どうしでも起きるということです。
問題はふたつめ、ドとソのように離れた二つの音——和音——のうなりです。ドが 261Hz、ソが 392Hz なら、基音どうしは 130Hz も離れていて、これは「ゆっくりした脈打ち」ではなく、もう別の一つの高さとして聞こえてしまいます。だから基音だけを見るかぎり、和音にうなりは出ません。実際、サイン波でこの5度を鳴らすと、少し外れて感じることはあっても、ワウワウとは揺れないのです。
それでも本物の楽器では、和音にはっきりうなりが出ます。その正体が倍音です。
澄む条件は「倍音がぴたり重なる」
ひとつの楽器の音には、基音のほかに、その2倍・3倍・4倍…の高さの成分がいくつも含まれています。これが倍音です。だから和音を鳴らすと、耳もとには両方の倍音がずらりと並びます。そして、片方の高い倍音と、もう片方の低い倍音が「近いけれど少し違う高さ」で出会うと、そこで——さきほどの近い二音のうなりとまったく同じ理屈で——うなりが生まれます。
上の図は、その重なるはずの二つ——ドの3倍音と、ソの2倍音——を波として重ね、足し合わせたものです。純正律では二つが同じ高さでずっとそろっているので、足しても音量は変わりません。平均律ではソをわずかに低く取るぶん、二つの波が少しずつずれていき、山と山が重なって大きくなる瞬間と、山と谷がぶつかって打ち消し合う瞬間をくり返します。この音量の脈打ちが、うなりの正体です。脈打ちの速さ(毎秒およそ0.9回)は、二つの波の周波数の差にちょうど等しくなります。和音が澄むか濁るかは、この「重なるはずの倍音」がぴたり合うかどうかで決まるわけです。だから、倍音をあまり持たない音(サイン波に近い音)ほど和音のうなりは出にくく、倍音の豊かな楽器ほどはっきり出る。楽器によって濁り方が違うのは、このためです。
では、重なるはずの倍音がぴたり合うのはどんなときか。二つの音の周波数が簡単な整数比のときです。ソをドのちょうど $3/2$ 倍にすると、ドの3倍音($3 \times$ 基音)とソの2倍音($2 \times \tfrac{3}{2} \times$ 基音 $= 3 \times$ 基音)が同じ高さになり、うなりが消えます。長3度なら $5/4$、オクターブなら $2/1$。こうして音程を単純な整数比でそろえる決め方が純正律で、うなりが最も少ない、いちばん澄んだ響きです。
一方、ピアノなどが使う平均律は、1オクターブ(周波数がちょうど2倍になる幅)を12の等しい比で割った実用的な妥協です。半音ひとつが $2^{1/12}$(およそ 1.0595)倍で、どの調へ移っても均一に弾ける代わりに、どの音程もわずかに整数比からズレます。平均律の5度は $2^{7/12} \approx 1.4983$ で純正の 1.5 にごく近く、うなりはゆっくり。3度は $2^{4/12} \approx 1.2599$ で純正の 1.25 より上ずっていて、はっきりしたうなりになります。純正律と平均律のこうした使い分けの事情は Q&A のほうに譲ります。
触ってみる
鳴らして聴くのが早いので、デモを用意しました。長3度や完全5度、ドミソの和音を鳴らしたまま、平均律と純正律を切り替えてみてください。平均律ではうなりが出て、純正律にした瞬間に止まって澄む——その違いが、下のスコープの音量の脈打ちとあわせて分かります。
うまく表示されないときは、デモを別タブで開く 。
ここでぜひ試してほしいのが、波形を「サイン波(倍音なし)」に切り替えることです。和音のまま倍音を取り去ると、平均律にしてもうなりが出なくなります。さきほどの「和音のうなりは倍音のしわざ」が、耳で確かめられます。もとの「ノコギリ波」は倍音をたっぷり含むので、うなりがはっきり出ます。長3度がいちばん分かりやすく、完全5度はうなりがゆっくりなので静かなところで耳を澄ませてみてください。
どう作るか
ここまでの話は、そのまま短い式になります。平均律は、基準の高さ $f_0$ から半音 $n$ 個ぶん上がった音を
$$f = f_0 \times 2^{n/12}$$
で出すだけ。純正律は $2^{n/12}$ のかわりに、その音程の整数比(5度なら $\tfrac{3}{2}$、長3度なら $\tfrac{5}{4}$)を掛けます。オシレータの周波数にこの値を入れれば鳴ります。
const A4 = 440;
const equal = n => A4 * Math.pow(2, n / 12); // 平均律:半音n個ぶん
const just = (num, den) => A4 * num / den; // 純正律:整数比 num/den
// 完全5度:equal(7) ≈ 659.26Hz / just(3,2) = 660Hz
うなりの速さも計算で出せます。和音のうなりは、重なるはずの倍音どうしの差です。5度なら、低い音の3倍音と高い音の2倍音を引き算する。純正律ならこの差はゼロになり、うなりは消えます。
const root = 261.63; // ド
const beat = tuning =>
Math.abs(root * 3 - (tuning === 'just' ? root * 3/2 : root * Math.pow(2, 7/12)) * 2);
// 平均律 ≈ 0.9(1秒に約0.9回のうなり) / 純正律 = 0
冒頭のアプリ Harmonize は、この差がゼロになる位置を、数値ではなく耳で探す訓練をするものです。画面のヒントに頼らず、うなりが消える感覚だけで音を合わせられるようになると、それが相対音感と呼ばれる耳の力になります。
参考文献
- 青木直史『サウンドプログラミング入門――音響合成の基本とC言語による実装 』技術評論社(2013)。波の合成やうなりを含め、音の基礎をC言語の実装つきで解説する定番書。
- 音律の音楽的な背景は Wikipedia: 音律 、うなりの物理は Wikipedia: うなり が詳しいです。
- デモの実装には Web Audio API を使用。倍音の有無を切り替えるため
OscillatorNodeのノコギリ波とサイン波を使っています。
同じ和音が、比の取り方ひとつで澄んだり濁ったりする。まずはデモで、うなりが消える瞬間を耳で確かめてみてください。
