チュートリアル 3
ウェイブテーブル・オシレータ

チュートリアルを開いて下さい。

オーディオのオン/オフスイッチ:ezdac~

このチュートリアルパッチでは、前の例で使用された dac~ オブジェクトがスピーカアイコンによるボタンに置き換えられています。これは、ezdac~ オブジェクトと呼ばれ、オブジェクトパレットで表示されるユーザインターフェースオブジェクトです。

ezadc~ はオーディオのon/offボタンで、オブジェクトパレットにあります

ezdac~ はほとんどdac~ と同じ動作を行ないますが、クリックすることでオーディオのオンとオフを切り替えることができます。このオブジェクトは、dac~ と同様に左インレットで startstop メッセージを受け取ることができます(しかし、dac~ と異なり、アウトプットチャンネル1と2だけに対応します)。オーディオがオンの場合、 ezdac~ ボタンはハイライトされます。

格納(ストア)されたサウンド:buffer~

前の例では、cycle~ オブジェクトはコサイン波の1サイクルを記述した512個の値を繰り返して読み取る方法で使用されました。しかし、実際には cycle~ は任意の 512個の値を読み取ることができ、その値を波形の1サイクルとして扱います。この512個の値は、buffer~と呼ばれるオブジェクトに格納しておく必要があります(”buffer-バッファ” とは、データの格納場所という意味です)。

buffer~ オブジェクトは、アーギュメントとして入力される固有の名前を必要とします。cycle~ オブジェクトにアーギュメントとして buffer~ と同じ名前を入力すると、cycle~ オブジェクトはそのバッファから値を読み取ることができます。(バッファ名のすぐ前にある cycle~ の周波数の初期値はオプション(省略も可能)です。)


cycle~は同じ名前のbuffer~から波形を読み取ります

buffer~ にサウンドを読み込むためには、buffer~ read メッセージを送ります。これにより、ドキュメントを開くダイアログボックスが表示され、読み込むオーディオファイルを選択することができます。read メッセージにはオプションで特定のファイル名を続けることができます。これにより、MAXサーチパス内に用意されたオーディオファイルを、ダイアログボックスによる選択なしで読み込むことができます。


指定のサウンドを直ちに読み込みます

buffer~ のサウンドの長さに関係なく、cycle~ はその波形として 512個のサンプルだけを使用します(cycle~ にアーギュメントを追加するか、 set メッセージを使うことによって、cycle~ buffer~ からの波形の読み取りを開始する位置を指定することができます)。このサンプルパッチでは、ちょうど512個のサンプルを持つオーディオファイルを使用します。

技術的な詳細:実際には、cycle~は513個のサンプルを使用します。513番目のサンプルは、512番目のサンプルからの補間だけのために利用されます。このサンプルパッチのようにcycle~が周期的な波形を作るために利用される場合、513番目のサンプルは1番目のサンプルと同じものでなければなりません。この例の場合のようにbuffer~が512個のサンプルしか持たない場合、cycle~は1番目のサンプルと同じものを第513のサンプルとして補充します。

read gtr512.aiffと書かれたメッセージボックスをクリックして下さい。これにより、オーディオファイルが読み込まれます。その後、ezdac~ オブジェクトをクリックしてオーディオをオンにして下さい(最初は何もサウンドが聞こえません。なぜだかわかりますか?)。次に、B3と書かれたメッセージボックスをクリックして、cycle~ オブジェクトの音を1秒間聴いて下さい。

後の章で見るように。buffer~ のデータを利用することができるオブジェクトは他にもいくつかあります。

line~によるブレークポイント・ラインセグメント関数の作成

前のサンプルパッチでは、2つの数によるリストを line~に送ることによって、線的に変化するシグナルを作りました。リストの最初の数は目的の値、2番目の数は line~ が目的の値に達するまでの所要時間(ミリ秒)でした。



line~は目的の値(1.)と所要時間(100 ms)を与えられます

必要であれば、line~ に対して、多くの「値-時間」の数の対(最高64対まで)を持った長いリストを送ることができます。この方法によって、多くのラインセグメント(線分)が接合した、より精巧な関数を line~に実行させることができます。最初のラインセグメントを実行し終わると、line~ はそこから直ちにリストの「次の目的の値」に向かって、指定された所要時間で進みます。


ラインセグメントによって作られた関数

シンセサイザのユーザは、このタイプの関数を利用して、「ADSR」振幅エンベロープを生成することに精通しています。これは、まさに、このサンプルパッチで行っていることですが、ここでは、エンベロープに使用するラインセグメントの数を選ぶことが可能です。

他のシグナルジェネレータ:phasor~ とnoise~

phasor~ オブジェクトは、0から1までの傾斜(ランプ)を繰り返すシグナルを生成します。


phasor~ が生成するシグナル

この、傾斜の繰り返しの周波数は、cycle~ の場合と同じように、Hz単位でアーギュメントとして指定するか、左インレットへ値(Hz単位)として送ります。この種の関数は、サブオーディオ(可聴域以下の)周波数では、周期的にくり返すイベント(クレッシェンド、フィルタスイープなど)を生成する場合に役立ちます。もちろん、十分に高い周波数においては、ノコギリ波の波形として聞くことができます。

サンプルパッチでは、phasor~ cycle~ の1オクターブ上のピッチに設定され、アウトプットは -1 〜 +1 の傾斜になるようオフセットされ、係数を掛けられています。


220Hzのノコギリ波

技術的な詳細:ノコギリ波は、各々の倍音(高調波)の振幅が倍音の次数と反比例するようなスペクトルを作ります。したがって、波形が振幅Aの場合、基本波(第1次倍音)は振幅Aを持ち、第2次倍音は振幅A/2、第3次倍音は振幅A/3、・・・、を持ちます。

noise~ オブジェクトは、ホワイトノイズを生成します。シグナルは全くランダムなサンプル値の流れからできています。このサンプルパッチでは、複合音のアタックにノイズの短い破裂音を加えるために使用されています。

・ B1と記されたメッセージボックスをクリックして、ホワイトノイズを聞いて下さい。B2と記されたメッセージボックスをクリックしてノコギリ波の音を聞いて下さい。

複合音を作るためのシグナルの追加

2つの以上のシグナルが同じシグナルインレットに接続されていると、それらのシグナルは加算されて、その合計が受け側のオブジェクトによって使用されます。


複数のシグナルがシグナルインレットで加算(ミキシング)されます

デジタルシグナルの加算は、アナログオーディオの1つのゲインでのミキシングと同じです。加算される各々のシグナルの振幅が1以下であっても、その合計は簡単に1を超えてしまうことがあるので、注意をはらうことが重要です。MSPではシグナルの振幅が1を超えても問題なく動作しますが、dac~ にシグナルを送る前に(通常は *~ オブジェクトを使って)、振幅を1以内に調整しなければなりません。1を超えた振幅は、dac~ で歪められてしまいます。

サンプルパッチでは、ホワイトノイズ、220Hzのノコギリ波、buffer~の波形を利用した110Hzの音をすべてミックスし、複合音によるインストゥルメントサウンドを作っています。


複合音を作るためにミックスされる3つのシグナル

3つの音はそれぞれ異なる振幅エンベロープを持ち、その1 秒間の持続のなかで徐々に音色の変化を引き起こします。3 つの音を結合することにより、ノイズで始まり、すぐにエレキギターのようになり、終わりに向かってノコギリ波によって倍音(高調波)が強調されていくような音が作られます。3つのシグナルによるクロスフェードではありますが、これらの振幅がクリッピングを引き起こす可能性はありません。(音の立ち上がりの部分は例外ですが、ここはもともと非常にノイジーな音色です。)

・同時に3つすべてのシグナルを演奏するボタンをクリックして下さい。A1,A2,A3と記されたメッセージボックスをクリックして、各々のパーツに含まれる音を聞いて下さい。3つのシグナルの個々の音をフルボリュームで持続させて聞きたい場合には、B1,B2,B3と記されたメッセージボックスをクリックして下さい。終わったら、ezdac~ をクリックしてオーディオをオフにして下さい。

まとめ

ezdac~ オブジェクトは、オーディオのオン、オフを切り替えるためのボタンです。buffer~ オブジェクトは、サウンドを格納(ストア)します。read メッセージを使ってオーディオファイルを buffer~ へ読み込ませることができます。このメッセージを buffer~ に送信すると、読み込むファイルを選ぶために、ドキュメントを開くダイアログボックスが開きます。 cycle~ オブジェクトは、buffer~ オブジェクトがアーギュメントとして持っている名前と同じものをタイプイン・アーギュメントとして持つ場合、デフォルトのコサイン波ではなく buffer~ に格納された波形の512サンプルを使用します。

phasor~ オブジェクトは、0から1まで線形に増加するシグナルを生成します。0から1へのこの傾斜(ランプ)は、指定された周波数で繰り返し生成することができるため、ノコギリ波を作ることができます。noise~ オブジェクトは、ランダムなサンプルからなるシグナルを送り、ホワイトノイズを生成します。

1つのシグナルインレットに複数のシグナルを接続すると、受け側のオブジェクトはそれらのシグナルをまとめて加算し、その合計をそのインレットでの入力として使用します。オーディオシグナルをミックス(加算)する場合、1を超えた振幅値をDACに送ることによって生じる歪み(ディストーション)を避けることに十分注意を払って下さい。dac~ezdac~にシグナルを送る場合、その振幅は -1 〜 +1 の範囲に保たれなければなりません。

line~ オブジェクトは、左インレットで、目標値(ターゲット値)と所要時間(トランジションタイム)を表す、64対までの数値を持ったリストを受け取ることができます。これにより、1つの目標値から次の目標値へ指定された所要時間で線的に変化するシグナルが生成されます。これはまた、要求される様々な形状を記述するようなラインセグメント(線分)関数を作成するために利用することができ、特に振幅エンベロープをコントロールするシグナルとして役立ちます。別々のline~ オブジェクトによって作られる、別々の振幅エンベロープを用いることにより、複数のシグナル間でのクロスフェードを実現することができます。

参照

buffer~ オーディオサンプルの格納(ストア)
ezdac~ オーディオ出力とオン/オフのボタン
phasor~ ノコギリ波ジェネレータ
noise~ ホワイトノイズジェネレータ