チュートリアル15

サンプリング:可変長のウェーブテーブル

ウェーブテーブルとしてbuffer~のどの部分でも使用できる:wave~

チュートリアル3で示したcycle~オブジェクトは、buffer~の512のサンプルをウェーブテーブルとして利用し、繰り返し読み取ることで、周期的に反復する音を演奏できます。wave~オブジェクトは、そのアイデアの拡張版です。;wave~はウェーブテーブルとしてbuffer~のどの区間でも使用することができます。

buffer~内での開始点と終了点は、wave~の中央と右側のインレットで受信する数値またはシグナルによって決定されます。wave~オブジェクトの左のインレットでシグナルが0から1まで変化すると、wave~は指定された開始点から終了点までbuffer~の内容を送り出します。繰り返し0から1までの勾配を作るphasor~オブジェクトは、wave~の左のインレットの入力信号としてわかりやすい選択肢です。

phasor~は、ウェーブテーブルとして指定されたbuffer~の区間の中でwave~を作用させる

ウェーブテーブルシンセシスの標準的な実装で、ウェーブテーブル(cycle~の場合は512のサンプル、wave~の場合は希望する長さの区間)は波形の1サイクルとなり、cycle~オブジェクト(またはwave~を作用させているphasor~)の周波数は音の基本周波数を決定します。しかしwave~の場合、ウェーブテーブルは仮想的にどんなもの(例えば、話された文全体)でも含むことができます。

wave~は、これまでに提示されてきた伝統的なサウンド生成のアイデアと比較して、かなり予測できない結果を生じますが、いくつかの実験によってwave~の使用による音色の大きな多様性を見い出すことができます。このチュートリアルパッチでは、wave~によってbuffer~の内容を読むいくつかの方法を紹介します。

サンプルサウンドの区間によるシンセシス

チュートリアルパッチは、wave~の異なる3つの使用法を試すことができるように設計されています:反復するランプ信号(phasor~)、サイン波(cycle~)、または1つのランプ(line~)によるものです。Patcherウィンドウの最下段部分はwave~の基本的な実装のために使われ、ウィンドウの上の部分はウェーブテーブルを読取るための3つの方法を含んでいます。最初にウィンドウの下半分を見てみましょう。

wave~はウェーブテーブルとして、どちらのbuffer~のどんな長さでも使用できます

*toggleをクリックしてオーディオをオンにし、振幅を0より大きいレベルにセットして下さい。ウェーブテーブルの終了点を782にセットして下さい。(これは、ファイルisthatyou.aiffの長さ(ミリ秒)です。)

これらの設定によって、wave~はそのウェーブテーブルとしてbuffer~ words isthatyou.aiffの内容の全体を使用します。これで、ウェーブテーブルを読みとる準備ができました。

*ウィンドウ中央の"ポップアップumenuから”Read forward”を選んで下さい。これはselector~の最初のシグナルインレットをオープンして、wave~がphasor~オブジェクトによって制御されることを可能にします。

phasor~オブジェクトからの0から1までの繰り返す値によってwave~は値を読み取ります

* "Range"と記されたナンバーボックスを1にセットして下さい。これはphasor~の振幅をセットし、ウェーブテーブルのどの一部分が使用されるかを効果的に決定します。"Frequency"と記されたナンバーボックスを2にセットして下さい。phasor~は1秒あたり2回、0から1まで変化するので、wave~が1/2秒毎にbuffer~を読取るのを聞くことができるはずです。

* phasor~に2、3の別のサブオーディオ周波数値を試して、異なった速さでbuffer~を読取って下さい。“Range”の値の変更、及びwave~の開始点、終了点の変更のどちらの方法を用いても、読みとられているbuffer~の部分を変更することができます。同様に、phasor~にもオーディオ周波数を試してみて下さい。

ウェーブテーブルの内容は波形の1サイクルを意味しないので、phasor~のレートが知覚されたピッチと明白な関係がない場合も多いことに注意して下さい。さらに、複雑なサンプルの中からの、任意に選ばれた区間の速い反復は、非常に高い確率でナイキスト周波数を上回る周波数を作り出し、予測できない方法でオーディオ(可聴)範囲に折り返します。

* メッセージボックスをクリックして、wave~をbuffer~ chordsオブジェクトに適用させて下さい。

これは、ウェーブテーブルの内容を変更し(wave~は今度は違ったbuffer~にアクセスするので)、ファイルsacre.aiffの長さに等しい"End time"ナンバー・ボックスの最大値をセットします。wave~に、不適当な開始及び終了点をユーザが入力しないように、付加的な軽いプログラミング・トリック(下の実例で示されるように)が使用されていることに注意して下さい。

毎回、開始点及び終了点は変更され、他のナンバーボックスの最大(最小)値を修正します。

*新しいbuffer~で、buffer~の様々な長さの区間をいろいろなレートで読み取ることで、をさらに実験してみて下さい。

wave~の伝達関数としての使用

buffer~オブジェクトは、本質的に、他のオブジェクトによって様々な方法でアクセスすることができるルックアップテーブルです。チュートリアル12で、lookup~オブジェクトは、コサイン波の入力を受けて、buffer~のセグメントを伝達関数として扱うために使用されました。wave~オブジェクトも同様に使用できます。唯一の違いは、lookup~が-1〜1の範囲の入力を期待するのに対し、wave~の入力は0〜1までの範囲でなければならないことです。この方法でwave~を使用する場合、入力されるコサイン波を0から1までの範囲にスケールしオフセットしなければなりません。

* wave~の開始点及び終了点を近くにセットして、サウンドの2、3ミリ秒だけがウェーブテーブルとして使用されるようにして下さい。ウィンドウ中央のポップアップumenuから"Read back and forth"を選んで下さい。これはselector~の第2シグナルインレットをオープンし、wave~がcycle~オブジェクトによってコントロールされるようにします。

0〜1の範囲にスケールされオフセットされたcycle~で、ウェーブテーブルを往復して読み出します

* cycle~の振幅を制限するために、最初は"Range"ナンバーボックスを非常に小さい値(例えば0.01)にセットして下さい。これで、cycle~は伝達関数としてウェーブテーブルの非常に小さいセグメントを使用します。cycle~の周波数を220Hzにセットして下さい。たぶん、220Hzを基本周波数とする豊かな音を聞くことができます。"Range"ナンバーボックスの上でドラッグして、コサイン波の振幅を変更して下さい;音色はそれに応じて変化します。また、wave~の開始点、終了点を変更して、異なるウェーブテーブルの長さで実験することもできます。cycle~オブジェクトに低周波を設定した場合、ウェーブテーブルが前後にスキャンされるのに対応して、あまりないようなビブラートに似た効果を作り出すでしょう。

音としてのセグメント(区間)の演奏

wave~は0〜1の範囲のどんなシグナル入力でも受け入れるので、wave~に0から1(または1から0)へのランプシグナルを送ることで、ウェーブテーブルを1 度だけ読むようにすることができます。play~、groove~のような他のオブジェクトの方がこの目的により適していますが、、これはwave~によっても可能です。

*ウィンドウの中央のポップアップumenuから"Read once"を選んで下さい。これはselector~の第3シグナルインレットをオープンし、wave~がline~オブジェクトによって制御されるようにします。ウェーブテーブルの開始点と終了点をセットし、"Duration"ナンバーボックスを1000にセットして下さい。そして、buttonをクリックして1秒でウェーブテーブルを読み通して下さい。いろいろなウェーブテーブルの長さ、持続時間を使って、両方のbuffer~オブジェクトで実験して下さい。

動的なウェーブテーブルの変更

パッチャーウィンドウの右側にあるcycle~オブジェクトは、コサイン波によってウェーブテーブルに位置の変化を加えるために使用されます。コサイン波の上下につれて、ウェーブテーブルの開始点、終了点の値が増加、減少します。その結果、buffer~でのウェーブテーブルの位置は、絶えずコサイン波状の変化によってシフトされています。これは、音としては、独特な種類のビブラート(基本周波数ではなく、音色によるもの)を作り出します。読みとられているウェーブテーブルの長さ、レートは同じままですが、ウェーブテーブルの内容は絶えず変化しています。

開始点、終了点の値にサインによるオフセットを与えることで、ウェーブテーブルをシフトします

* "Shift amount"を0.35に、"Shift rate"を6にセットして下さい。ウェーブテーブルの開始点を102に、終了点を109にセットして下さい。メッセージボックスをクリックして、wave~にbuffer~ chordsオブジェクトを指定して下さい。ポップアップumenuから"Read forward"を選んで下さい。phasor~の周波数を110のようなオーディオレート(可聴域)にセットし、その範囲を1にセットして下さい。これで、6Hzの割合でビブラート状の音色変化を聞くことができるはずです。”Shift rate”、“Shift amount”をいろいろ変化させて実験してみて下さい。終わったら、toggleをクリックしてオーディオをオフにして下さい。

まとめ

buffer~のどんな区間でも、wave~のためのウェーブテーブルとして使用することができます。wave~は、0から1まで進行するシグナルを受け取ることで、ウェーブテーブルを読み通すことができます。そのため、phasor~の出力をwave~の入力に接続すると、ウェーブテーブルをサブオーディオまたはオーディオレートで、繰り返して読み通すことができます。また、cycle~の出力を0〜1の範囲になるようにスケールして、オフセットすることで、wave~の入力として使用できます。これは、ウェーブテーブルを伝達関数として扱い、結果として波形形成シンセシスとなります。buffer~のウェーブテーブルの位置は動的に変化させることができ、(例えば、wave~の開始点と終了点にサイン波の値をオフセットとして加える)、結果としてユニークな音色のモジュレーションを生じます。

<-前の章 次の章->