Twitter

ウェーブ・シェーピング合成の応用

前回のチュートリアルで、ウェーブ・シェーピングの基礎は理解できたと思いますが、今回は応用です。

チェビシェフの多項式の利用
PureData本体に付随するチュートリアルの「E05.Chebychev.pd」はチェビシェフの多項式を用いて、ウェーブ・シェーピングで倍音をコントロールする方法を紹介しています。

これを用いると、ソースとなるサイン波のn倍音をウェーブシェーピングにより作り出すことができます。以下がチェビシェフの多項式を0次から5次まで書きだしたものです。

[caption id="attachment_1037" align="aligncenter" width="235"]チェビシェフの多項式 チェビシェフの多項式[/caption]

例えば、5次の式の関数のxの範囲を[-1, 1]までとしてをサイズ515のArrayに書き出すと、以下のようになります。
[caption id="attachment_1039" align="aligncenter" width="449"]チェビシェフの関数(5次)をArrayに書き出す チェビシェフの関数(5次)をArrayに書き出す[/caption]

このArrayに以下のように100 Hz.のサイン波を入力すると、その5倍の周波数、つまり、500Hz.のサイン波が得られます。同様に、上にリストしたTnの関数を使うと、n倍音が得られます。

[caption id="attachment_1040" align="aligncenter" width="693"]チェビシェフ関数を使ったウェーブシェーピング チェビシェフ関数を使ったウェーブシェーピング[/caption]

興味深いのは、このパッチで「tabread4~」に入力されるサイン波の振幅をナンバーボックスで徐々に0から256に向けて上げていくと、まず50あたりで、第3倍音の300 Hz.が見え始め、180あたりで、一度基音 (100 Hz.)が非常に弱くなり、そしてそれが230あたりで再び復活し、1、3、5倍音で漢字の「山」のようなスペクトラムとなり、256に向けて1、3倍音が弱くなり、5倍音のみが残るという複雑なスペクトラムの変化が振幅の変化によって見られることです(サムネイルをクリックして拡大)。

amp=50amp=180amp=230amp=255

またこの多項式を用いれば、オシレータ1つと複数のテーブルを用いた加算合成を行うことも可能です。

[caption id="attachment_1049" align="aligncenter" width="300"]Chebychevを使った加算合成 Chebychevを使った加算合成[/caption]

加算合成はもちろんオシレータを6つ使ってもできますが、こちらの方が単純にArrayを参照するだけなので、若干CPU効率が良いと思われます。

オシレーターの波形を変える
今までの例では、全て「osc~」の波形をテーブルで変化させるという方法を撮って来ましたが、もちろんオシレータの波形を余弦波以外のものに置き換えてもOKです。以下の例では、Array上に保存された5次のチェビシェフ関数を三角波で動かしたものです、サイン波の時と音が変わるのが分かると思います。

[caption id="attachment_1051" align="aligncenter" width="300"]三角波をArrayに入力する 三角波をArrayに入力する[/caption]

AMと組み合わせる
この他にも、ウェーブシェーピング合成から出力された信号をAMなどと組み合わせてさらに音を豊かにする方法も考えられます。以下の例では、 5次Chebychevによって発生させた、漢字の「山」のようなスペクトラムにサイドバンドをさらに発生させ3つの「山」を作っています。

[caption id="attachment_1052" align="aligncenter" width="300"]amによってサイドバンドを発生させる amによってサイドバンドを発生させる[/caption]

この他にフィルターやFM、ランダムジェネレータと組み合わせる、関数を少しずつ変化させるなど、ウェーブ・シェーピングで出来る事は多いです。いろいろな可能性をためしてみましょう。
この項のパッチをダウンロード

(参考:C. Roads, The computer music tutorial)

Post a Comment

Your email is kept private. Required fields are marked *