見出し画像

FM/PD合成の仕組み ❶三角関数とラジアン

先日FM Anthemというu-he HIVE用のプリセット/ウェイブテーブル集をリリースしました。

UHMというウェイブテーブル生成言語を用いて、FMシンセのアルゴリズムそのものをウェイブテーブル内で再現するというプロダクトです。

画像9

製品を作るにあたって、YAMAHA DX7のFMシンセシス、およびCASIO CZ-1000のPDシンセシスが具体的にどのような演算をして波形を作り出しているかというのを学習しましたので、それを解説しようと思います。

この記事はあくまでもFM/PD合成が行う「演算」の解説で、かなりシンセの“内側”の内容であり、サウンドプログラミング環境でDX7/CZ-1000を再現したい人などに向けて書かれます。「FMでエレピの音を再現するコツ」といった内容ではありません。
またOSC、エンヴェロープといったシンセの基礎については理解していることを前提とします。

この記事ではまず、基本中の基本である「サイン波」「コサイン波」「ラジアン」についての説明をします。

サイン波について

サイン波は、音響合成における元素のような存在で、波形の中では音響学的に最もシンプルでピュアなサウンドを有しています。その姿を観測すると、いかにも音波ですという顔をした、綺麗な曲線になっています。

画像6

(サイン波がなぜ・どのように「最もシンプルでピュア」なのかは、FM合成の演算を理解するうえでは肝要でないので省略)

波形のグラフは数式によって表されます。サイン波の場合は、y=sin(x)というのが最も基本形で、そこにさらに手を加えると、波形のグラフは伸び縮みしたり縦横にずれたりする。

ここではまず三角関数の話、すなわちサイン・コサインが何なのかというところから、改めて確認します。

サインとは

カエル氏の暮らしには、娯楽がない。

画像9

あるとすれば、水車にへばりついてグルグル回るくらいです。水車グルグルは、上半分は空、下半分は川が楽しめるという点でエキサイティングな乗り物なのであります。

画像12

カエル氏の一大関心事は、高度についてでした。例えば、水車に乗り込んでから何度回転したら、頂上の半分の高さまで行くのであろうか?

画像13

頂上の半分に到達するタイミング。これは円の中に正三角形を描いてあげれば、30°であると解けます。

画像6

そして、この「30° 回ったら、高さは頂上の1/2」という文章を数式で表したものが、これです。

sin(30°) = 1/2

ここでsinの登場です! sin(x)とかいうと難しく聞こえるけど、ようは「x°回ったら、高さはy」というのを数式内で表すための表現だったのです。

そして水車が90°回転すればもちろん頂上に、180°で再び地上、そして270°回ったらば水底です。360°回転したらまた高度0から再スタートで、あとは同じことを永遠に繰り返すだけ。それぞれを数式に直すと以下のようになります。

sin(90°)  = 1
sin(180°) = 0
sin(270°) = -1
sin(360°) = 0
sin(390°) = sin(30°) = 1/2

sinはあくまで「頂上を1、底を-1」として数値化したもので、円の大きさは関係ありません。いわば高度を「割合」で示してくれるのがsinです。だから、角度さえ与えられればsinの値は自動的にひとつに定まります。

「角度と高さの関係」は測量などでとても役立つ情報なので、1°とか0.5°刻みで表にまとめられています

▼グラフにする
さて、「x° 回ると、高さはy」という関係性をx軸・y軸のグラフにして表すとこうなります。

画像8

上がって下がってをグルグル繰り返すため、結果的に音波のようなグラフが現れます! 円の回転運動のグラフが、音波のグラフになる。なんだか不思議な気がします。

▼周期と周波数
サイン波は360°ぶん進んだら事実上のリスタートで、あとは全く同じ形を繰り返すこととなります。この一周ぶんのサイクル、ないし一周にかかる時間を「周期」といい、そして1秒に何サイクルするかを表すのが「周波数」です。これはご存知のとおり、音のピッチへと直結します。

440Hzだったら、波が1秒に440サイクルしているということ。逆に言えば、1サイクルは1/440秒の出来事を切り取っているということになります。すごくミクロな世界です。

ラジアンについて

カエル氏にはひとつモヤモヤするところがありました。180°とか360°とかいった角度の表し方が、やたら数字が大きいし、「°」という記号が数式に入ってくるのも変な感じがするのです。

そこで、自分の回りっぷりを「角度」じゃなく「道のり」で考えることにしました。すなわち、円周を角度の基準とすることを決心したのです。

画像10

半径1の円だと、円周はですね。だから、円一周ぶんの角度を「360°」と言う代わりに「2π」と言うことにしよう。そう決めました。
このような角度の表し方を弧度法といい、「ラジアン(rad)」という単位で表します。

そうすると、主要な角度は次のように表されます。

画像12

sin(180°)=0 などと書いていたところも、ラジアンで書くならsin(π)=0 という風に置き換わります。

音響合成をプログラムする環境では基本的にラジアンが採用されているので、この記事群もここからはラジアンを使って角度を表すことにします。

画像11

こうやって、角度がπで表されることに慣れる必要があります。

コサインとは

PDシンセシスの場合には、サイン波ではなくコサイン波を基本波形とする場合もあります。CASIO CZ-1000がその一例です。
コサインはFM合成にとってあくまでも「おまけ」に過ぎないのですが、CZ式のPD合成を原機どおりに再現するにあたっては必要となるので、せっかくだから一緒に紹介しておきます。

サインとコサインは概念的にはかなり似ていて、違うのはサインが回転の「上下」の情報であるのに対し、コサインは「左右」であること。その一点です。

つまり、カエル氏の当初の関心は自分の「高さ」でしたが、次には自分が「左右」で見てどれくらいの場所にいるかが気になったのです。

画像9

そうすると、最初は右端(=1)にいたのが、90° 回るとセンター(=0)に来る。180° 回ったら左端(=-1)に到達する…。

この「x° 回ったら、左右の位置はy地点」というのを数式で表現したのがy=cos(x)なのです。これをグラフに表すと、下のようになります。

画像12

「左右」の位置情報を「縦軸」で表すので、サインほど直感的ではなくなります。

▼サインとコサインの関係性
実はコサインのグラフ、「スタート時のy座標が1」という点が異なるだけで、カーブの形自体はサインと同一です

もしサイン波のグラフを90°ぶん左にずらしたら、コサイン波とピッタリ重なります。

画像11

「スタート地点がずれている」とは言っても「1秒間で440サイクル」とかいうミクロな世界での話で、いざサイクルが始まってしまえば、聴こえてくるサウンドは同一です。だからひとまずは、サイン波もコサイン波もシンセにとっては“同じ音色”だと思って差し支えません。

まとめ

今回は一応根本的なところから説明をしましたが、実際のところサイン波の曲線が円運動を表しているという事実は、FM/PDにとっては重要ではなく、豆知識のようなものです。

ただ、波形のプログラミングの際にはラジアンの知識も必要になってくるので、ラジアンを飲み込む目的も兼ねて、円からsin・cosを説明をしました。

実際に、YAMAHAがFM合成の原理について説明した小冊子では、FMのイメージを説明するのに「タイヤの上下位置」を比喩として用いています(p.142)。一見「なぜタイヤ?」と思ってしまうところですが、サインが円運動の産物だと知った今なら、この説明法を選んだ筆者の気持ちは理解できるでしょう。

まとめとして、xy軸グラフの中に角度として「π」が出てくること、y=sin(x)でウネウネの音波が描かれることが理解できれば、FM合成の演算を知るファーストステップは完了です。

☞CONTINUE

この記事が気に入ったらサポートをしてみませんか?