FM/PD合成の仕組み ❷位相への演算
前回は、そもそもsin・cosが何であるか、そして円周で角度を表す「弧度法」について説明しました。
FMもPDも、サイン波/コサイン波を変形させて新しい波形を作ります。そしてその「変形」というのは、フィルターを通すとかエフェクターを通すとかいうことではなく、数式を変形させるものです。
FM/PDが行う演算はそれなりに難しいものですので、この記事ではまず「数式と連動してグラフが動く」ことを、感覚的に身体に落とし込みます。
二次関数の平行移動
手始めに準備運動として、二次関数の話を思い出してみます。
「平行移動」の話です。②のように数式の末尾にポンと定数を足してあげると、当然ながらそのぶんyの値が底上げされて、グラフが上にずれる。
一方で③のように、2乗の計算が行われるよりも"手前"の段階に潜り込んでxに+1してあげた場合、グラフは左へとずれる。(この件を忘れてしまっている人は、実際にいくつか数値を代入して確かめるとよいでしょう)
FM/PDの理解において重要になるのは、②ではなく③の操作だけ、つまりは横方向に関する変形だけです。
三角関数の平行移動
三角関数の場合も、実は変形のやり方は完全に同じです。sinとかcosとかの計算が入るよりも手前の段階で数値をプラスすれば、その分グラフが左へとずれる。
「サインのグラフでも二次関数と同じ要領で、sinの計算をする前段階で数値を足すとグラフが左にずれる」ということを覚えていてください。
それにしても、なぜ数値を「プラス」した場合に「左」にずれるのでしょうか? 「実際計算したらそうなるから」と言えばそうですけど、これはちょっぴり直観に反するところがないでしょうか。数値をプラスしたら、何となく右に動く気がします。
この「直観のずれ」を解消しておくとFM/PDの原理もいくぶん理解しやすくなるので、この点をじっくりと紐解きたいと思います。
「時間」の象徴としての横軸
演算と直観を結びつけるために意識して頂きたいことがひとつあって、それは波形をグラフィックで表す世界において横軸は「時間の流れ」を象徴しているということです。DAWを初めとして、音楽のデータというのは左から始まって右へと再生されていきますよね。
何なら楽譜だってそうです。音楽を可視のデータ化するとき、我々は横軸を時間のメタファーとして用いているのです。
波形のグラフも、1秒に満たないミニマムな世界ではありますが、時間の流れがそこに表現されています。
コンピュータは時間の流れに沿って、左から右へと波形を再生します。
これになぞらえると、x=0, x=1, x=2…と数値を代入してy座標を確かめていく作業というのは、まるで時計がチクタクと少しずつ時間を進めていく動作に似ています。sin()という箱の中に入った「x」という文字は、淀みなく流れていく時間そのものを象徴しているのです。
そこへ来ると、sin()のカッコの中をいじくりまわす行為というのは、時間を操っているのと同じこと、というようなイメージをぜひ持って頂きたいのです。
「時間の流れ」というのは、「波形の再生速度」と言い換えてもいいかもしれません。YouTubeで動画の再生スピードを速くしたり遅くしたりするのと同じことを、波形の世界で行うのがFM/PDシンセシスです。
▼「時間を操作する」イメージ
マンガ「ジョジョの奇妙な冒険」では、“スタンド”という超能力を持った敵キャラが未来を予見したり、過去に時間を巻き戻したり、時を加速させたりします。空想話ですけども、実はFM/PDもそれに似ています。
sin(x)をsin(x+1)に変えたときに起きていることはこうです。「時間そのもの」であるxに+1をするということは、時計の針が1秒先へと強制的に動かされるようなもの。つまり、「未来が1秒早く訪れる」ことであり、「1秒先の未来を見る」ことになるのです。
xをx+1に変えることで、“右側にある未来を手前に引き寄せてくるから、グラフが左にずれる”という感覚です。
▼「フィルムをたぐり寄せる」イメージ
あるいは動画の"再生速度”の比喩になぞらえるなら、次のようなイメージになります。
こうやって先へ進んでいくというイメージではなくて、
映画のフィルムをたぐり寄せて、1コマ先へ進めるような操作なのです。どちらも動画を再生する行為ですが、捉え方しだいで左右の感覚は正反対になりますよね。そしてFM合成においては、この「たぐり寄せる」方の感覚で波形グラフに接してほしいのです。
sin(x)のカッコ内に正の数を足すと、それだけイベントがどんどん手前へと“前倒し”されるため、グラフは左へ左へとずれていく。
このような説明で、「+1で左にずれる」ことを直感的に違和感のないものとして落とし込んでもらえたら嬉しいです。
数式とグラフを直感で繋げておくことはすごく重要で、これがあるとFM/PD合成の仕組みはグッと理解しやすくなります。
位相(Phase)
さて波形編集の世界では、「波形の横軸上の位置」というような意味合いで「位相(Phase)」という言葉を使います。
技術的に言えば、sin( )のカッコの中の部分を指し示す言葉です。
ただし、日常レベルでは「位相」は本来の波形からの「ずれ」を意味する言葉として使われます。つまり、xに対して足し算する部分だけを指す。
微妙な意味のブレがあってややこしいです。この定数部分は、x=0を代入した時の初期値ということで「初期位相」とも言いまして、シンセの世界で単に「位相」と言えばこの初期位相を指すことがしばしばあります。
例えばシンセのOSCやLFOにある“phase”のパラメータは大体こちらの意味であって、ノブをひねると波形の開始地点がずれます。
数式の方でいうと、先ほどのsin(x)をsin(x+1)にしてグラフを平行移動させる行為は、まさしく初期位相をずらす操作であるので「Phase Shift」などと表現します。ようやく話がシンセっぽくなってきた感じがしますね!
sinへのかけ算
もうひとつ押さえておくべき演算が、sinに対するかけ算です。そしてかけ算といっても、sin()のカッコの中で掛けるか外で掛けるか、そのタイミングによって結果は全く異なります。
y=2sin(x)のようにsinの外側に2を掛けた場合には、単に波形の振れ幅が2倍になります。
物理で言うところの「振幅」、音楽的に言えば「音量」が大きくなるということです。
一方でy=sin(2x)のようにsinの内側で2をかけた場合には、波形が縮みます。
これは物理で言うところの「周波数」が倍になることを意味し、音楽的に言えば「ピッチ」が1オクターブ高くなります。(逆に1未満の数字をかければ、波形は伸びてピッチは落ちる。)
なぜsinの内側でかけ算をすると波形が伸び縮みするのかというと、これもまた「時間の流れ・再生スピード」というイメージと結び付けられます。
×2をすれば時間の流れるスピードが2倍になるから、あたかもYouTube動画を倍速再生するかのように、内容がギュッと短時間に圧縮されて縮むわけです。
「再生速度を上げれば、波形が縮む」というアイデアは、FM/PDシンセシスの根幹となる重要な概念です。
y=sin(x)を音響合成向けに整える
「周波数」についても、もう少し深堀りしておきます。周波数は、1秒で音波が何サイクルするかを表したもの。440Hzだったら、1秒で440サイクルするということです。
y=sin(x)は、2π(=360°)で1周です。もしx軸の単位を「秒」だとすると、1サイクルに2π秒かかるという話になります。角度の単位にπを採用したせいで、時間にもπが入ってきてしまいました。
音響合成において、この状況はやっぱり都合が悪いです。1サイクルがぴったり1秒になる状態を基本の式とすべきでしょう。
2π≒6.28ですから、だいぶ波形を縮めることになります。どんな計算をすればいいでしょうか?
ここで、先ほどの演算の話が活きてきます。波形を縮めたいのだから、縮めえたい分だけかけ算をすればいいのです。2πの長さを1にまで縮めたいなら、2πをかけます。
y=sin(2πx)。これならx=1でちょうど一周することになり、何かと計算の都合がよくなります。音響合成におけるサイン波の数式の“基本形”となりますので、「2π」が居座っているこの状況に慣れて頂きたいと思います。
▼sinの数式まとめ
位相、周波数、振幅。全部をまとめると次のようになります。
だいたい、こうやって文字がいっぱいの数式が出てきた辺りからちょっと拒否反応が出てくるかと思います。そうなったら一度立ち止まり、それぞれが何を表していたかをひとつずつ整理してあげるとよいです。
周波数・位相の計算順序は f(x+p)であって(fx+p)ではないというのは、FM合成をプログラミングする際に絶対忘れてはならないポイントとなります。
まとめ
y=sin(x)という基本波形について、カッコの中のエリアで足し算・かけ算を行うと、波形をずらしたり伸縮したりすることができる。
xはphaseと呼ばれる「時間の象徴」であり、足し算でもかけ算でもとにかく数値が(正の方向に)大きくなればそれだけ“未来がはやく来る”ことになる。
これを理解したらば、FM/PDが行う操作を理解する下地は整ったことになります。
この記事が気に入ったらサポートをしてみませんか?