チュートリアル 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~は同じ名前の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~ オブジェクトをクリックしてオーディオをオンにして下さい。(最初は何もサウンドがありません。なぜだかわかりますか?)次に、cycle~ オブジェクトの音を1秒間聞くために、B3と書かれたメッセージボックスをクリックして下さい。

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

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

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



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

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


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

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

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

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


phasor~ が生成するシグナル

この、傾斜の繰り返しの周波数は、cycle~ と同じようにアーギュメントとして指定されるか、左のインレットへ値(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~ へロードすることができ、このメッセージによって、ロードするファイルを選ぶためにドキュメントを開くダイアログボックスがオープンされます。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~ ホワイトノイズジェネレータ