チュートリアル12

シンセシス:ウェーブシェイピング

ストアされたウェーブテーブルの使用

チュートリアル3では、cycle~オブジェクトによって読み取られるウェーブテーブルとして、buffer~でストアされる512のサンプルを使用しました。buffer~オブジェクトの名前はcycle~オブジェクトの引数としてタイプされ、cycle~に、デフォルトのコサイン波の代わりに、buffer~から得られるサンプルをその波形として使用させます。cycle~の左のインレットで受信される周波数値は、1秒につき何回その512のサンプルを読み通すかを決定し、その結果演奏する音の基本周波数を決定します。

思い出してもらえるように、このようなウェーブテーブルシンセシスの例が、このチュートリアルパッチの右下のコーナーに含まれています。

cycle~オブジェクトはbuffer~にストアされた512のサンプルをくり返して読み通します

*buffer~オブジェクトをダブルクリックしてその内容を見て下さい。ファイルgtr512.aiffはレコーディングされたエレキギター音の1サイクルを含んでいます。ezdac~スピーカアイコンをクリックしてオーディオをオンにして下さい。toggleをクリックしてgate~をオープンして下さい。これで、cycle~のアウトプットがdac~に届くようになります。toggleを再度クリックしてgate~を閉じて下さい。

このタイプのシンセシスではcycle~のためにどんな波形を使用しても構いません。しかし、音色は静的で、波形の変化がないためいくぶん生気のない感じです。このチュートリアルでは、波形形成(waveshaping)として知られている技術を使って、動的に変化する音色を得るための新しい方法を紹介します。

テーブル ルックアップ:lookup~

ウェーグシェイピング・シンセシスで、オーディオシグナル(最も一般的にはサイン波)は、シェイピング関数(一般に、変換関数(Transfer function)とも呼ばれます)を含むルックアップテーブルにアクセスするために使用されます。入力シグナルの各々のサンプルはテーブル(数値の配列)にストアされた値を探し出すためのインデックスとして用いられます。ルックアップテーブルは任意の順序で任意の値を含むので、リニアな値の領域(例えば、シグナルの-1から1の範囲)を、ノンリニアな関数(ルックアップテーブルにストアされるものならが何でも)にマップするために役立ちます。Maxオブジェクトtableはルックアップテーブルの一例です。;入力(普通、0〜127)として受け取った数値はtableにストアされた任意の値にアクセスするために用いられます。

MSPオブジェクトlookup~では、ルックアップテーブルとしてbuffer~でストアされたサンプルを使用することができ、1から-1の範囲のシグナルによってアクセスできます。デフォルトでlookup~はbuffer~の最初の512のサンプルを使用しますが、引数によって、ルックアップテーブルとして使用するためのbuffer~の内容の抜粋を指定することができます。512のサンプルが使われる場合は、-1から0までの入力値は最初の256サンプルにマップされ、0から1の入力値は次の256サンプルにマップされます。; lookup~は必要に応じて2つのストアされた値の補間を行います。

サイン波はbuffer~の抜粋を前へ、あるいは後ろへ読み通すために使用されます

ルックアップテーブルのインデックスとして用いられる入力シグナルには、サイン波が最も一般的に用いられます。(サイン波は、なめらかに前へ、或いは後ろへテーブルを読むことができるので、これは合理的な選択です。)しかし、どんなオーディオシグナルでもlookup~の入力として使用することができます。

波形形成シンセシスについては、次のような点に注目することが重要です。:入力信号の振幅を変更することによって、使用しているルックアップテーブルの量が変更されます。入力信号のレンジが-1から1まである場合、ルックアップテーブル全体が使用されます。しかし、もし入力信号のレンジが-0.33から0.33までだとすると、テーブルの中央の三分の一だけが使用されます。一般に、入力信号の振幅が増加するにつれて、出力信号の音色はより明るく(より高い周波数を含むように)なります。

また、入力シグナルの振幅は出力シグナルの振幅に直接影響を与えない、という点に注意することも重要です。;出力シグナルの振幅は、ルックアップテーブルで示された値に完全に依存します。

ウェーブシェイピングによる音色の変化

チュートリアル・パッチの波形形成の部分は、Patcherウィンドウの左下です。これは、上に示した例とほとんど同じ種類のものです。ルックアップテーブルはbuffer~の中の512のサンプルを含んでいて、cycle~オブジェクトからのサイン波によって読み通されます。

ルックアップテーブルはウェーブシェイピングに利用されます

Patcherウィンドウの上の部分は、コサイン波の振幅を変える3つの異なった方法を含んでいますが、これは音色の変更をもたらします。

*オーディオがまだオンのままならば、ポップアップumenuから"Set range by hand"を選んで下さい。これはselector~の最初のシグナルインレットをオープンするので、"By hand"と記されたナンバーボックスをドラッグしてcycle~の振幅を変えることができます。ナンバーボックスの値を変更して、違った音色を聞いてみて下さい。

入力シグナルの振幅をセットして、出力シグナルの音色を変えます

音が持続している間の音色変化を作り出すために、コントロール関数のエンベロープを用いて、時間の経過の中で自動的にcycle~の振幅を変えることができます。

* “Control range by envelope”をumenuから選んで下さい。"Duration"(1000ミリ秒)と記されるナンバーボックスに値を入力して音の持続期間をセットし、buttonをクリックして音を演奏して下さい。いろいろな持続とエンベロープを実験してみて下さい。

他のシグナルを使って、入力波形の振幅をモデュレートすることも可能です。非常に遅いモデュレート周波数(例えば0.1Hz)は、徐々に音色を変化させます。より速いサブオーディオ(低周波)モデュレート周波数(例えば8Hz)は、ある種ユニークな「音色のトレモロ」を作るでしょう。オーディオ領域(可聴域周波数)で入力波をモデュレートすると、和と差の周波数(チュートリアルで9を見たように)を作り出しますが、これは、モデュレーションレートによって、様々な方法で干渉を生じるかも知れません。

* "Modulate range by wave"をumenuから選んで下さい。モデュレーションレートを0.1Hzにセットし、モデュレーションdepthを0.9にセットして下さい。

入力波形の振幅の非常にゆっくりしたモデュレーションは、音色を徐々に変化させます

cycle~の振幅が0.45を掛けられ、0.5オフセットされていることに注意して下さい。このため、レンジは0.05から0.95になっています。(もし振幅が完全に0になってしまうと、0でモデュレーションすることになり、音はストップしてしまいます。)"Modulation depth"ナンバーボックスは0から1まで動きますが、実際にはcycle~を0.05から0.95の範囲にスケーリングします。

デプスとモデュレーションレートに他の値を設定して、実験してみて下さい。

音楽を目的としたインストゥルメントを設計している場合には、音色を変えるためにこれらの3つの方法のいくつかを結合して使用しても構いません。また、出力されるサウンドの振幅をスケーリングするために、ほとんど独立した振幅エンベロープを持つことも可能です。(lookup~から出ているシグナルの振幅は、読み通されているサンプル値に依存し、入力されるシグナルの振幅は直接影響を与えないということを思い出して下さい。)

まとめ

ウェーブシェイピングは、新しい音色を作るためのノンリニア(非直線的)なシグナルの「ねじれ」です。オリジナルのシグナルのサンプル値はルックアップテーブルのアドレス指定を行うために使用され、ルックアップテーブルの対応した値が出力されます。lookup~オブジェクトは、こういったルックアップテーブルとしてbuffer~のサンプルを扱い、そのサンプルのアドレス指定を行うために1 から-1までの入力レンジを使用します。サイン波は、一般的にウェーブシェイピング・シンセシスのための入力シグナルとして使用されます。入力シグナルの振幅は、ルックアップテーブル(の範囲を)どれだけ多く使うかを決定します。入力シグナルの振幅が増加するにつれて、テーブルのより多くの範囲が使用され、その結果として、一般により多くの周波数が出力にもたらされます。従って、ウェーブシェイピング・シグナルの音色は、入力シグナルの振幅を、コントロール関数やモデュレートシグナルを使用して連続的に変えることによって、動的に変化させることができます。

<-前の章 次の章->

目次へ