スマートフォンの小さなスピーカーで音楽を聴いても、ベースラインが今どの高さを弾いているかは、ちゃんと低いまま追えます。よく考えると不思議です。あの数ミリのスピーカーは低い音がとても苦手で、ベースの最低音のあたりは大きく痩せて(減衰して)しか出ません。低音の量はごっそり削られているのに、その音の高さは低いまま届いている。同じことは電話でも起きていて、電話回線はおよそ300Hzから下をばっさり削るのに、低い男性の声は低い高さのままに聞こえます。
このからくりがミッシング・ファンダメンタル(失われた基音)と呼ばれる知覚現象で、鳴らしていない低音が聞こえる差音の回 の終わりに、少しだけ顔を出した話でもあります。今回はこれを主役に据えて、なぜ「無いはずの低音」が聞こえるのか、その仕組みを音デモで確かめられるところまで掘っていきます。
低音は削れても、音の高さは残る
まず言葉をそろえておきます。楽器の音のような高さのある音は、いちばん低い成分である基音と、その整数倍の高さの成分である倍音の重なりでできています。ベースが110Hzの音を弾けば、110Hzの基音に、220Hz、330Hz、440Hz……の倍音が乗る。この配合が音色を決める、というのが倍音の回 でやった話でした。
小さいスピーカーは、この一家のうち低いほうがとても苦手です。低い音を空気に伝えるには大きな膜でたくさんの空気を押す必要があり、スマホやノートPCのスピーカーは、数百Hzから下になるほど急に力が落ちます(ある実測の例では、iPhoneのスピーカーが低域で1オクターブあたり十数デシベルも痩せていました。機種や世代で差はあります)。まったく出ないわけではありませんが、110Hzのような最低音は、上の倍音に比べてぐっと小さくしか鳴りません。だからスマホで聴くベースは、実際に低音の“量”がかなり削られています。低音がよく出るイヤホンと、小さなスピーカーとで同じ曲を聴き比べれば、この差はすぐに分かります。
ここで取り違えやすいのですが、削られているのは低音の“量”(エネルギー)であって、音の“高さ”ではありません。低い成分が痩せれば、音はやや軽く・細くなります。これは実際に耳で分かる変化で、基音をしっかり出せる環境ほど、ベースは太くずっしり聞こえます。それでも、その音が指し示す高さ ── ベースが110Hzを弾いている、という高さの感覚 ── のほうは、量が減っても頑固に残る。量は削れても、高さは残る。この不思議の正体を、次に見ていきます。
高さを決めているのは、基音の棒ではない
種明かしの鍵は、音の高さがそもそも何で決まっているかにあります。素朴には「スペクトラム(どの高さの成分がどれだけ含まれるかのグラフ)のいちばん低い棒が、音の高さを決める」と考えたくなりますが、これが違うのです。音の高さの正体は、波が1秒に何回くり返すかでした。110Hzの音とは、波形が1秒に110回、同じ形をくり返す音のことです。
ここで倍音の並びを見直すと、面白いことに気づきます。110Hz、220Hz、330Hz……と等間隔に並んだ成分を足し合わせた波は、1秒に110回くり返します。では、いちばん下の110Hzだけを抜いたら? 残りは220、330、440……ですが、この組み合わせが共通してくり返せる周期は、やはり1秒に110回のまま。330Hzは220Hzの整数倍ではないので、両者の波が同じ顔に戻るのは110分の1秒ごとだからです。つまり基音の棒を抜いても、波形の形は変わるのに、くり返しの間隔だけは頑固に変わらないのです。
そして私たちの聴覚は、この「くり返しの間隔」のほうを音の高さとして聞いています。脳は届いた成分の一本一本を別々の音としてではなく、110Hzおきに整然と並んだひとそろいとして束ね、その並びが指し示す根っこ、つまり基音の高さにラベルを貼る。だから基音の位置が空でも、倍音の間隔さえ残っていれば、聞こえる高さは変わりません。逆に言えば、スピーカーや電話回線がどれだけ低音を削っても、倍音という「基音の痕跡」が届く限り、脳が毎回その場で高さを復元してくれるわけです。ここで復元されるのはあくまで音の高さで、削られた低音の量そのものが戻るわけではない点に注意してください。低音が苦手な機器ほど、この錯覚に助けられていることになります。
触ってみる
理屈はここまでにして、耳で確かめるのがいちばんです。基音110Hzと倍音8本を鳴らしながら、基音をオン・オフできるデモを用意しました。ぜひイヤホンかヘッドホンで聴いてください。低音がよく出る環境ほど、基音のオン・オフでの“量”の変化も、このあとのオクターブ比較も、はっきり分かります。
うまく表示されないときは、デモを別タブで開く 。
鳴らしたまま「基音を抜く」を押すと、スペクトラムの110Hzの棒が消えて、音はすこし軽く・細くなります。低音の“量”が減るからで、これは実際に起きる変化です。ところが、音の“高さ”のほうは動きません。ベースが弾いている高さは110Hzのまま。さらに「2倍音まで抜く」「3倍音まで抜く」と下から順に抜いていっても、残った倍音の間隔が110Hzのままなので、高さは保たれ続けます。量は減るのに、高さは残る。この二つを分けて聴くのがコツです。
ここでいちばん効くのが「比較用:本当のオクターブ上」です。これは倍音の間隔そのものを220Hzに広げた音で(この音自身の基音は220Hzで、こちらは実際に鳴っています)、はっきり1オクターブ高く聞こえます。「基音を抜く」音と並べると、これが決定的な証拠になります。どちらの音にも110Hzの成分は含まれていません。それなのに、倍音の間隔が110Hzの「抜く」ほうは低い110Hzに聞こえ、間隔を220Hzに広げたこちらは高い220Hzに聞こえる。同じ「110Hzがそこに無い」音なのに、聞こえる高さがきっちり1オクターブ違うのです。つまり脳は、低音が実在するかどうかではなく、倍音がどんな間隔で並んでいるかを読んで高さを決めている。ここまで来ると、低音を大きく削るスピーカーや電話でもベースの高さが分かる理由が、すとんと腑に落ちるはずです。
差音とは別の仕組み
「そこに無い低音が聞こえる」と聞いて、差音の回 を思い出した方のために、両者の関係を整理しておきます。あちらで扱った差音は、2つの音が歪みのような非線形を通ったときに、2つの周波数の差にあたる成分が物理的に新しく生まれる現象でした。生まれた低音は空気中や耳の中に実在し、条件がそろえばマイクでも測れます。
今回のミッシング・ファンダメンタルは、物理の側では最後まで何も起きません。デモのスペクトラムが示すとおり、基音の位置はずっと空のままで、どこを測ってもその低音は存在しない。それでも聞こえるのは、倍音の並びから脳が基音を推定しているからです。片方は信号の中に本当に生える低音、もう片方は頭の中でだけ鳴る低音。仕組みはまったく別ですが、どちらも「鳴らしていない低さを耳が聞く」仲間で、パイプオルガンの合成低音のように、2つが同じ高さを指して見分けがつかなくなる場面もあります。
鐘の音は、鳴っていない高さに聞こえる
この脳の推定ぶりがいちばん劇的なのは、鐘の音かもしれません。ここまでの話は「倍音がきれいな整数倍に並ぶ」ことが前提でしたが、鐘やベルの部分音(鳴っている成分の一本一本のことで、整数倍に並ぶとは限らないのでこう呼びます)は、整数倍からずれてバラバラに並びます。ところが教会の鐘のゴーンという音を聞いて、私たちはちゃんと「この鐘はこの音程」と感じる。その打音と呼ばれる音程を調べると、実際の部分音がほとんど無い高さであることが珍しくありません。部分音のうち上のほうの数本が、たまたまほぼ2倍・3倍・4倍の関係に並ぶため、脳がその共通の根っこを計算して、そこに音程を聞いてしまうのです。鐘の音程とは、金属の中ではなく聴き手の頭の中で決まっている、と言ってもそう大げさではありません。
ここで宣伝を少しだけ。筆者が個人開発している音感トレーニングアプリ Harmonize には、チューブラーベル(NHKのど自慢の鐘でおなじみの、あの金属管の楽器です)の音色が入っています。この音は録音ではなく、整数倍からわざとずらした部分音を数本重ねる加算合成で作っているのですが、ずれた並びのまま鳴らしても、耳にはちゃんとひとつの音程として届きます。作っている側からすると、最後のまとめ上げを聴き手の脳にやってもらっている感覚です。
どう実現するか
デモの中身は、倍音の回 の加算合成とほとんど同じです。違いはたった一箇所、ループを1からではなく2から始めること。つまり基音を最初から作らないだけです。
// 基音110Hzを作らずに、倍音だけを鳴らす
const f0 = 110;
for (let n = 2; n <= 8; n++) { // n = 1(基音)を飛ばす
const osc = ctx.createOscillator();
osc.frequency.value = f0 * n; // 220, 330, 440, ... Hz
const gain = ctx.createGain();
gain.gain.value = 1 / n;
osc.connect(gain).connect(master);
osc.start();
}
このコードはどこにも110Hzを出力していません。スペクトラムを見ても110Hzの棒は立ちません。それでも再生すると110Hzの低さに聞こえる。最後の一手を担当しているのが聴き手の脳なので、プログラム側の仕事はここまでで終わりです。逆に、電話のような「低音を削る装置」をまねたければ、普通に作った音をハイパスフィルタ(低い成分を削るフィルタ)に通すだけで、声の低さが保たれたまま痩せていく様子を確かめられます。
参考文献
- 青木直史『サウンドプログラミング入門――音響合成の基本とC言語による実装 』技術評論社(2013)。倍音と加算合成を含め、音の基礎をC言語の実装つきで解説する定番書。
- 現象の全体像は Wikipedia: Missing fundamental 、鐘の打音は Wikipedia: Strike tone が詳しいです。
- デモの実装には Web Audio API を使用。倍音1本ごとに OscillatorNode を立て、GainNode で抜き差ししています。
基音の棒を消しても、低さは消えない。ぜひイヤホンで、その瞬間を聴いてみてください。
