ならば

音とかで遊んでいたログ

音脈分凝

高い音と低い音が交互に鳴る音の列は、音の間の時間間隔がそれほど短くなければ、音高が上下するひとかたまりの音の列として聴こえる。でも音の間の時間間隔が短いと、高い音の列と低い音の列が分離して別々のまとまりとして聴こえることがある。高い音と低い音の音程が大きいほど、また時間間隔が短いほど分離して聴こえやすい。
    
このように、音の列が分離して複数のまとまりとして知覚される現象を音脈分凝*1という。ひとつひとつのまとまりを音脈と呼ぶ。上の例だと音脈は二つ。以前実験したステレオの錯覚も音脈分凝の一種だと考えられる。

音脈分凝は、音高や時間間隔以外に、音色や音量などの要素によっても引き起こされることがある。どの場合でも、音の列の中で類似した部分(音高、音色、音量が同じくらいの音の分布)がまとめられてひとつの音脈として知覚される。

音色の違いによって音脈分凝を起こす実験をしてみた。今回使った音の列。
    
まず比較のために音色が全部同じ場合。このときは音脈分凝は起こらず、上の図の通りに上昇を繰り返す音の列が聴こえる。
次に、音色が交互に替わる場合。赤い音符と青い音符で異なる音色を使う。
    
音色が交互に替わると、意識しても上昇を繰り返す音の列には聴こえにくい。それよりはむしろ音色ごとに音の列がまとめられて、下降を繰り返す二つの音の列が聴こえる。

今回のChucKのプログラム。

Gain g => dac;
.5 => g.gain;
.4::second => dur T;

[Std.mtof(64), Std.mtof(69), Std.mtof(74)] @=> float freqs[];
[new PercFlut, new Rhodey] @=> FM insts[];  // 二種類の音色
insts[0] => g;
insts[1] => g;

for (int i; ; (i + 1) % 6 => i) {
    freqs[i%3] => insts[i%2].freq;
    1 => insts[i%2].noteOn;
    T => now;
    1 => insts[i%2].noteOff;
    T/2 => now;
}

初めて使う楽器系ユニットジェネレータについて。これらはFM音源を基にしている。

  • PercFlut:多分、キー・パーカッションという特殊奏法でのフルートの音をシミュレートする
  • Rhodey:ローズ・ピアノの音をシミュレートする

FM音源を基にしたユニットジェネレータは全てFMクラスを継承しているので、PercFlutとRhodeyのオブジェクトはFMクラスへの参照型の配列に格納できる。個々の楽器系ユニットジェネレータではパラメータ.noteOn、.noteOff、.freqはオーバーライドされているため、配列の要素を参照する側は、その要素が具体的に何の楽器のオブジェクトなのかを気にせずにパラメータ.noteOn、.noteOff、.freqを使うことができる。


音脈分凝は、経験的にはかなり昔から知られていた現象で、バロック時代には既に作曲にも応用されていた。音程が大きな高い音と低い音を織り交ぜた音の列を素早く演奏することで、複数のメロディを同時に演奏しているかのように聴かせることができる。そういう曲の例としては、バッハの無伴奏チェロ組曲がある。

*1:おんみゃくぶんぎょう;auditory stream segregation。「分凝」は認知科学や心理学分野の専門用語らしい