ステレオの錯覚
視覚の錯覚(錯視)ほど有名ではないけど、聴覚にも錯覚(auditory illusion)がある。生理的な錯覚は音楽の才能や経験には関係なく起こるため、ヒトの認知・知覚のシステムを解明するのに役立つだろうってことで、いろいろと研究されている。中でもダイアナ・ドイチュという研究者は聴覚の錯覚を数多く発見したことで有名なようだ。
ドイチュの発見の中から、単純なステレオの錯覚を再現してみる。「オクターブの錯覚」と「音階の錯覚」、「半音階の錯覚」の三つ。聴くときはヘッドフォン必須。作りは単純だけど結果は複雑で、聴こえ方には大まかな傾向はあるものの人によって結構違うらしい。特にヘッドフォンの左右を入れ替えたとき、右利きと左利きの人で差が出るのは面白い。
今回の内容は全部ドイチュの研究を解説したサイト
「http://deutsch.ucsd.edu/psychology/deutsch_research1.php」
の中に書いてある。楽譜付きだし音も聴けるから自分でやっても意味ないんだけど、でもやる。
オクターブの錯覚
1オクターブ離れた二つの音を次のように左右交互に鳴らす。
左耳へ: 低 高 低 高 ・・・ 右耳へ: 高 低 高 低 ・・・
これは大半の人には次のように聴こえるらしい。「静」は無音。
片方の耳 : 高 静 高 静 ・・・ もう一方の耳: 静 低 静 低 ・・・
ヘッドフォンの左右を入れ替えても聴こえ方はひっくり返らないことが多くて、特に右利きの人の場合は高い方の音の列を右耳で感じる傾向が強いらしい。
ChucKで実験を再現。
SinOsc left => dac.left; SinOsc right => dac.right; .5 => left.gain => right.gain; 67 => int low; for (int b; ; 1 ^=> b) { low + b * 12 => Std.mtof => left.freq; low + !b * 12 => Std.mtof => right.freq; .25::second => now; }
録音したもの。http記法だとループができないので、前に使ったプレイヤーを使うことにした。
右利きの自分の結果、この実験では多数派に属すみたい。右耳に高い音の列。
音階の錯覚
無限音階という錯覚がある*1けど、これはそれとは違う。「ドイチュの音階の錯覚(Deutsch's scale illusion)」とはっきり書くほうがいいか。
「CDEFGABC'(ドレミファソラシド)」の音階を次のように鳴らす。楽譜を描く気はない。
左耳へ: C B E G G E B C 右耳へ: C' D A F F A D C'
この場合は音が高い側と低い側で分離されて、次のように聴こえる人が多いらしい。
片方の耳: C' B A G G A B C' もう一方の耳: C D E F F E D C
ChucKのプログラム。
SinOsc left => dac.left; SinOsc right => dac.right; .5 => left.gain => right.gain; [60, 62, 64, 65, 67, 69, 71, 72] @=> int scale[]; scale.cap() => int n; for (int i; ; (i + 1) % n => i) { if (i % 2) { scale[i] => Std.mtof => right.freq; scale[n-i-1] => Std.mtof => left.freq; } else { scale[i] => Std.mtof => left.freq; scale[n-i-1] => Std.mtof => right.freq; } .25::second => now; }
音階の錯覚の変種が次の半音階の錯覚。
半音階の錯覚
半音とはピアノで隣り合うキー*2の間の音高の隔たりのこと。半音階の錯覚では、扱う範囲の中にあるキーを全て使う。2オクターブに渡って、音階の錯覚と同様に音を鳴らすと、結果も同じようになる。
片方の耳: 高い方の1オクターブを下がって上がる音の列が聴こえる もう一方の耳:低い方の1オクターブを上がって下がる音の列が聴こえる
音階・半音階の錯覚の場合も、ヘッドフォンの左右を入れ替えても耳の左右の聴こえ方は変わらないことが多いらしい。利き手による違いもオクターブの錯覚のときと同様。
ChucKのプログラム。
SinOsc left => dac.left; SinOsc right => dac.right; .5 => left.gain => right.gain; 60 => int C4; // 一番低い音 25 => int n; // 範囲内にあるキーの数 for (int i; ; (i + 1) % n => i) { if (i % 2) { C4 + i => Std.mtof => right.freq; C4 + n - i - 1 => Std.mtof => left.freq; } else { C4 + i => Std.mtof => left.freq; C4 + n - i - 1 => Std.mtof => right.freq; } .15::second => now; }
録音したもの。この実験でも自分は多数派だった。
こういう錯覚を利用した音楽はあるんだろうか。ヘッドフォンで聴くと違うメロディが! とかいう。人による差が大きすぎて難しいかな。