見出し画像

PD合成の演算 ❷波形を生成する

おさらい

前回は、波形生成のパーツを「位相グラフ」と「波形グラフ」に分けるという基本コンセプトを説明しました。

画像1

「位相グラフ」は平たく言えば、波形を描くスピードを司る存在であります。その傾きが急になればなるほど、それに応じて波形を描くスピードも上がるため、位相グラフ次第でいくらでも波形を伸縮させることができるというシステム。

画像3

そしてもし位相グラフの傾きがカクカクと折り曲がれば、波形も面白い風に曲がるはずです。

画像21

“位相”を“歪ませる”から、フェイズ・ディストーション・シンセシス。この仕組みを使って、いよいよ具体的にSaw波やPul波を作成する方法を解説するのがこの記事の内容です。

PDでSaw波を作るには

まず達成したいのは、シンセの最も基本となる波形、Saw波の作成です。

画像2

より詳しく言語化すると、目標は本来x=0.5の位置にあるコサイン波の“山頂”を、左端へ寄せることであります。極度に歪んだコサイン波は、事実上のSaw波となるわけです。

▼伸縮思考で考える
「山頂を左へ寄せる」とは言っても、PDで行える操作は限られていて、位相グラフを加速/減速させて、波形を伸縮させることしかできません。それゆえ、全ての変形を「縮む(=加速)」or「伸びる(=減速)」で考える思考が必要になります。

画像5

伸縮をよく観察すると、これは“山頂”を境目に左右で分かれているのが見えます。左側が縮んで、その埋め合わせをするように右側が伸びているのです。

画像6

▼結論
つまり山頂に達するまでは加速、そのあとは減速で帳尻を合わせる。従って位相グラフは、次のようにすればよいと分かります。

画像9

初めの傾きが急で、p=0.5になった地点から傾きを緩やかにするという、「折れ線」を描けばよいのです。そうすれば、最初は急スピードで進み、山頂以降は緩やかになるという波形が描かれます。

▼p=0.5がボーダー
p=0.5が折れ線の境目になっていることは、しっかりと理解する必要があります。位相グラフにおける「p=0.5」というのは、波形グラフにとって「波形が山頂に達する瞬間」を表しています。

画像21

それだからp=0.5を境目に位相グラフを折ることで、波形グラフの方では山頂前後を境目とした伸縮ができるわけです。

▼折れ具合と波形の連動
このとき位相グラフの「折れ具合」がキツければキツイほど波形の歪みもキツくなり、よりSaw波へと近似していきます。そしてこの折れ具合を司るパラメータがCZ上では“DCW”と名付けられているわけです。

画像8

これがPD合成の基本原理です。“DCW”はたまに便宜のために「LPフィルターのようなもの」と紹介されますが、技術的にはフィルターとは全く異なる存在なのです。

▼波形の丸み
これを数式によるプログラムで行う場合、折れ線を完全な垂直線にすることはできません。それはy=axの傾きを「無限」に大きくすることだからです。

そのため、オリジナルのCZシリーズはDCWをマックスにしても、Saw波はごく僅かに丸まっています。それが結果的に、「柔らかい」とか「温かみがある」とか言われるサウンド印象に繋がっているのです!

だからPDをプログラムする場合には、傾きの最大値をどう設定するかでその機材をキャラクター付けすることができます。(ただし、もし折れ線をグラフィカルに描くようなインターフェイスであれば、完全な縦線も当然可能です。)

PDでSquare波を作るには

もうひとつ代表的な波形であるSquare波をPDで作る方法を確認して、PDへの理解をより深めることにします。

画像10

Sqr波の場合は、上のように「山頂がちょっと左にずれる」のと「角張る」のとが並行して起きます。

より単純には、単に山頂を動かさずに角張らせていく実装もありえますが…

画像11

少なくともCZの実機はそうなってはいなさそうです。加えて、波形をディスプレイした時にも、中央が凸のSqr波はあんまりカッコよくないので、今回は採用しません。

▼時を止めよう
さてPDは加速/減速によって波形を圧縮/伸長させるわけですが…

画像14

Square波のように水平・垂直な波形を描くには、かなり極端なことをしなければなりません。すなわち、時を超加速させ、そのあと時を止めるのです。

画像15

前回も説明しましたが、時が「停止」している間はグラフのy座標は一点に留まり続けるため、水平線が描かれるのです。

一方で、垂直線はSaw波の時と同様、「ものすごく傾きを増大させることで、擬似的な垂直を作る」ことになります。それゆえCZシリーズの矩形波は、やっぱりわずかな丸みを帯びています。

その他の波形

さて、改めてCZシリーズの基本波形5つの作成法を一覧したいと思います。

画像20
画像15
画像16

ここまでが上で確認した2波形ですね。

画像17

Pulseは位相グラフを中央に寄せて、波形も中央に寄るという形になります。

画像18

Double-Sineだけは元となる波形が異なっていて、文字どおり波がダブルになっています。y=-cos(2*2πx)ですね。
そして位相グラフの変化を見ると、なんとSawと同一です。こうやってスマートに波形のバリエーションを作っていくわけです。

画像19

Saw-Pulseは、位相グラフの右側だけが変形します。波形を見てもやはり変わるのは右側だけです。

波形6-8に関しては、ただ単に波形が収縮していくだけ(+かけ算で形を整形する)なので割愛します。

画像21

実装に関して

具体的にPDをどのように実装するかは、無論その開発環境次第ですが、必要な要素は多くありません。

①ユーザーが操作可能な“DCW”のパラメータ
②そのDCWを変数として受け取って、折れ線を描くパート
③そのグラフの出力をphaseの引数として受け取って、コサイン波を出力するパート

③がそれなりのハードルとなります。DX7のFMもCZシリーズのPDも、phase(位相)をいじくることが音響合成の原理であるため、単に音波の「周波数」しか指定できないような環境では、FM/PDは実装することができません。

テキストベースでもオブジェクトベースでも、それなりの環境だと「位相グラフを生成するモノ」と「phase入力を受けて波形を出力するモノ」が備わっているかと思います。

画像22

「位相グラフ」はナナメの登り坂を一定サイクルで生成するものなので、数式で表すなら剰余を用いて y=(周波数* x)%1 とするのが最もシンプルです。

位相グラフを折り曲げるには
位相グラフを曲げる機能の実装については、やはり環境が有する機能次第です。Saw波を作るときの折れ線なんかは、コンプレッサーのような機能が搭載されていたら楽です。

画像23

他については「if文を使って整形する」とか、「二直線を比較して低い方を取る」とかいった技術を使っていくことになるかと思います。

まとめ

PDは加速・減速・超加速・停止を使いこなすことで、バリエーション豊かな波形を描くことができる。これを利用して8種類の波形を作り出すのがCZ-1000です。

画像16

「アルゴリズムが機材のアイデンティティになる」というデジタルシンセの面白さが感じられたのではと思います。

☞CONTINUE


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