Modulator (Chorus&Flanger) をJavaで自作
先週はディレイを作ったので、その応用となるコーラスでもプログラミングしようかと思う。コーラスは名前の通り、多重演奏的な音響効果が得られるもの。個人的には使いそうもないけど、モジュレーション系のエフェクトの勉強はしておきたいので、設計的興味ということで、チャレンジしてみようと思う。 予備知識もあまりないので、 ARI のホームページを参考に考えてみる。原理の説明は少しあるのだが、具体的な部分はないので、後は適当に作ろうかと思う。分かったことは複数のディレイを作って、ディレイタイムを共通の5~30msec程度に設定。そして取り出し位置を変調により変化させる。ディレイが3つであれば、開始位置を2pi/3ラジアンずらして合成するとよい。またフィードバックはない。これ以上の情報は調べていないので、以下のことは間違っているかもしれない。勝手な想像でプログラムを組んでます。 変調と言われても、あまりピンとこないので、下図のようにイメージしてみた。最近あまり見かけないがカセットテープが分かりやすいと思えた。まず2つの再生ヘッドがある。DrySoundという再生ヘッドは通常の音を再生する。もうひとつのDelayTimeの再生ヘッドはDrySoundよりも少し遅れて再生する。このヘッドが-1~1の間を滑らかに行ったり来たりする。+1をどこにするのか不明だが、最大でもDryの再生ヘッド位置より進むことはあり得ないので、この位置を限界として+1とした。その移動スピードは0.1~10Hzの範囲で往復。動きはサイン波を使い、振幅値が移動地点になる。 この再生ヘッドの移動で、音はどう変化するのだろうか。テープの進行方向にDelayTime再生ヘッドが移動するときはテープ本来のスピードよりも、ゆっくりになるので、音程は下がる。逆方向に移動するときはスピードが速くなるので、音程が上がる。Dry音と同じピッチは+1と、-1のときで、サイン波を微分して0の位置になったとき。つまり再生ヘッドが一時的に停止した状態のとき。こういう仕掛けで、音程が微妙に上がったり下がったりする。このDelayTime再生ヘッドが3つあって、それぞれがDelayTime位置を0として、0、2pi/3、4pi/3ラジアンの位置からスタートする。フリーの数理処理ソフトMaximaでグラフにすると、こんな感じになる