この章では、いくつかの課題プログラムを示しますので、これまでのチュートリアルで示されたMSPの基本についてのあなたの理解度をテストして下さい。課題には2、3のヒントが含まれています。最初に、あなた自身の新しいファイルで、3つの演習を順番にやってみて下さい。それから、この章の実例パッチにある解答例を見て、解答パッチの説明を読んで下さい。
* エレキギターのような音色で、中央のCの上のE音を1秒間、10回続けて演奏するパッチを書きなさい。オーディオをオンにするために1回、10個の音を演奏するために1回クリックすればいいように作成しなさい。
ヒント:
・最初のパッチを修正して、音が10回繰り返される間に、エレキギターサウンドが完全12度高い正弦波の音にクロスフェードするようにしなさい。リニアなクロスフェード(一方のサウンドの振幅が0から1に変化する間に、もう一方のサウンドの振幅が1から0に変化する)を使いなさい。(クロスフェードするための他の方法については、後の章で述べます。)ギター音を左のオーディオ出力チャンネルに、サイン波の音を右のチャンネルに送りなさい。
ヒント:
・第2のパッチを修正して、10回繰り返される音の進行全体を通して、2つのクロスフェードする音が、全体としてオリジナルの振幅の1/32まで(すなわち、30dB)ディミヌエンドをするようにしなさい。
ヒント:
・演習の解答の一例を見るために、サンプルパッチのパッチャーウィンドウをずっと右までスクロールして下さい。
ギターのような波形のオシレータを作るために、オーディオファイル gtr512.aiff(または、同様な波形)をbuffer~に読み込み、そのbuffer~ をcycle~ で指定します。(チュートリアル3を参照)
cycle~ は buffer~ を毎秒329.627533回で通り抜けます
Maxが扱うことのできる10進数の精度には限界があることに注意して下さい。パッチをセーブするとき、Maxは float の値を少しだけ変更してしまう可能性があります。この例ではその違いは聞き取れないでしょう。
パッチがロードされる時点で直ちに buffer~ へオーディオファイルを読み込みたい場合、buffer~ オブジェクトの2番目のアーギュメントとしてファイル名を指定します。または、loadbangをトリガにして、buffer~ に read メッセージを送ることもできます。
解答例では、cycle~ オブジェクトの周波数をアーギュメントとして書き込まずに、ナンバーボックスから与える方法(他のピッチでの演奏も可能)を取っています。そのため、loadbangによってcycle~ に初期周波数値も送っています。
loadbang は buffer~ の内容と cycle~ の周波数を初期化するために用いられます
要求された音を作るオシレータができたので、次は音を形作る振幅のエンベロープが必要になってきます。ここでは、線分(ラインセグメント)で構成された下のようなエンベロープを選びました。
(チュートリアル3を参照)
「ギターのような音」の振幅エンベロープ
この振幅エンベロープは line~ と *~ の組み合わせで cycle~ のアウトプットに掛けられます。 metro は1秒につき1回エンベロープをトリガするために用いられ、10秒間のディレイの後オフにされます。
「ギターのような音」はボタン(button)がクリックされたときに演奏されます。
右のアウトプットチャンネルに、同じ振幅エンベロープで3倍の周波数(基音の第3次倍音)をもつサイン波が必要です。
同じ振幅エンベロープと関連した周波数を持つ2つのオシレータ
2つの音の間でクロスフェードするために、第1の音の振幅は、第2の音の振幅が0から1まで動くのに対して1から0まで動かなければなりません。これは、それぞれの音に対して再び line~ と *~ の組み合わせを用いることで解決できます。
2つの音によるリニア(直線的)なクロスフェード
ここでは、省力化のためにちょっとしたトリックを使っています。2つめの、0から1へフェードする音には、別の line~ オブジェクトを使わずに、すでにある line~ の出力からちょうど1を引いた値を使用しています。値は0から -1までのリニアな傾斜を作ります。これは、知覚的には同じ効果を持ちます。
このクロスフェードは、metroのトリガと同じ button によってトリガ(s、r、オブジェクトを経由)されます。そして、10個の音の演奏が開始されるのと同時にクロスフェードはスタートします。
最後に、全体的なディミヌエンドを作るためにもう1つの振幅エンベロープを使用する必要があります。2つの音は、もう1つの *~ オブジェクトに接続され、もう1つの line~ によって制御されます。以前に注意したように、振幅の直線的な減少は音量が一定にディミヌエンドするように知覚されません。そこで、5つの線分(ラインセグメント)を使用して、2秒につき振幅が1/2になるような曲線をシミュレートしました。
全体の振幅エンベロープは2秒につき1/2に減少します
全体に対する振幅エンベロープはシグナルネットワークに挿入され、10秒間で0.03125という係数でスムーズに両方の音の音量を減衰させます。
2つの音は、全体に対してのエンベロープでスケールされます