ならば

音とかで遊んでいたログ

ミッシング・ファンダメンタル

ある音の音高(ピッチ)は、その音の波形に含まれる周波数成分と強い関係がある。単独のサイン波で表される音(純音)ならば、その周波数が音高を決める。複数のサイン波の合成でできた複合音であれば、通常は最も低い周波数(基本周波数、基音)が音高を決める。周波数成分の構成が異なる色々な音(楽器音や歌声)の音高を合わせることができるのは、それぞれの基本周波数を合わせれば良いからだ。ただし、倍音以外の周波数成分が多く含まれている音の場合には、はっきりとした音高が感じられないこともある。噪音

(註:厳密には、音高とはヒトの感覚を表す心理的な用語なので、物理量である基本周波数とは区別する必要がある。実際に、音高と基本周波数は単純には対応しない。純音の音高でも音圧や持続時間など周波数以外の要素の影響を受ける。)


複合音の音高の知覚には、ミッシング・ファンダメンタル(missing fundamental)という現象がある。ファンダメンタルとは基本周波数のこと。基本周波数を欠いた倍音列を聴くと、存在しないはずの基本周波数の音高が知覚される。例えば、780Hz、1040Hz、1300Hzという周波数成分を持つ複合音を聴くと、基本周波数としてこれらの最大公約数である260Hzの音高が知覚される。
ChucKのプログラム。基本周波数を260Hzにして実験。

Gain g => dac;
2::second => dur T;

[[260.0],
 [260.0, 520.0, 780.0, 1040.0, 1300.0],
 [520.0, 780.0, 1040.0, 1300.0],
 [780.0, 1040.0, 1300.0]]
 @=> float harmonics[][];

fun void harmonic(float f[]) {
    f.cap() => int n;
    SinOsc s[n];
    for (int i; i < n; i++) {
        f[i] => s[i].freq;
        s[i] => g;
    }
    1.0/n => g.gain;
    T => now;
}

for (int i; i < harmonics.cap(); i++) {
    spork ~ harmonic(harmonics[i]);
    T => now;
}

比較のために最初に純音を鳴らす。次に第5倍音までの全ての倍音を含む複合音を鳴らした後、この音からまず基音、さらに第2倍音を除いた複合音を順に鳴らす。周波数成分の構成が変わるから音色は当然変化していくけど、音高はずっと同じ音として聴こえる。

録音したもの。
Download


ミッシング・ファンダメンタルは低音域の表現に応用されることがある。

  • ヒトの声の基本周波数は300Hz未満。それに対して電話が伝送可能な周波数帯域は大体300Hzから3500Hz。基本周波数は伝送されなくても声に含まれる300Hz以上の倍音列が伝送されるので電話越しに聴こえる声の高さは直接会って聴く場合と変わらない
  • 100Hz以下の周波数の音を再現できない小さなスピーカーやイヤホンでも、倍音列を上手く調整した音を再生すれば低音域を聴くことができる