チュートリアル 3

基礎:ウェーブテーブル・オシレータ

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

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

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

ezdac~はほとんどdac~と同じ働きを持ちますが、クリックすることでオーディオ・オン/オフをスイッチできます。これは、dac~と同様に左のインレットでstart、stopメッセージを受け取ることができます。(しかし、dac~と違って、アウトプット・チャネル1と2だけに対応します。)オーディオがオンのとき、 ezdac~ボタンはハイライトされます。

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

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

buffer~オブジェクトは、引数としてタイプされる固有の名前を必要とします。cycle~オブジェクトは、引数としてbuffer~の名前をタイプすることで、そのバッファから値を読み取ることができます。(cycle~の周波数の初期値−バッファ名の前の数字−はオプションです。)

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

buffer~にサウンドを読み込むためには、buffer~にreadメッセージを送ります。すると標準ダイアログボックスがオープンされ、AIFFまたはSoundDesigner_の形式のファイルをロードすることができます。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~オブジェクトによる異なる振幅エンベロープを用いることで、複数のシグナル間でのクロスフェードを行うことができます。

<-前の章 次の章->

目次へ