チュートリアル 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~)によるものです。パッチャーウィンドウの下部は 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~ にいくつかの異なったサブオーディオ周波数の値を試して、異なった速さでbuffer~ を読み通して下さい。“Range”の値の変更、あるいはwave~ の開始点、終了点の変更を行なうことによって、読み通されているbuffer~ の部分を変更することができます。同様に、phasor~ にいくつかのオーディオ周波数を試してみて下さい。

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

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

これは、(wave~ が今度は違ったbuffer~ にアクセスするため)ウェイブテーブルの内容を変更し、 "End time" ナンバーボックスの最大値をファイル sacre.aiff の長さに等しい値にセットします。ユーザが 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~ の開始点と終了点にサイン波の値をオフセットとして加えることによって)動的に変化させることができ、結果としてユニークな音色のモジュレーションを生じます。

参照

buffer~ オーディオサンプルのストア
phasor~ ノコギリ波ジェネレータ
wave~ サイズ可変のウェイブテーブル