チュートリアル6

基礎:復習

MSPの基本に関する演習

この章では、いくつかの課題プログラムを示しますので、これまでのチュートリアルで示されたMSPの基本についてのあなたの理解度をテストして下さい。課題には2、3のヒントが含まれています。最初に、あなた自身の新しいファイルで、3つの演習を順番にやってみて下さい。それから、この章の実例パッチにある解答例を見て、解答パッチの説明を読んで下さい。

演習1

* エレキギターのような音色で、中央のCの上のE音を1秒間、10回続けて演奏するパッチを書きなさい。オーディオをオンにするために1回、10個の音を演奏するために1回クリックすればいいように作成しなさい。

ヒント:

1) 中央Cより上のEの周波数は、329.627557Hzです。

2) 「エレキギターのような音色」のために、チュートリアル3で使用されたAIFFファイルgtr512.aiffを使用できます。このファイルをbuffer‾へ読み込み、cycle‾オブジェクトでbuffer‾にアクセスする必要があるでしょう。ファイルを、ダイアログボックスなしで直接読み出すために、パッチとサウンドファイルは同じフォルダに置いて下さい。あなたのパッチをMSPチュートリアルフォルダに保存するか、ファインダを使って、gtr512.aiffファイルをパッチを保存したフォルダにoption+ドラッグでコピーするか、どちらでもかまいません。

3) サウンドには、ギターと同じ特徴を持った振幅エンベロープが必要です。:それは、非常に速いアタック、速いディケイ(減衰)、そして、かなり安定した(わずかに減少している)サステイン(持続)です。ラインセグメント(線分)のリスト(目的の値、所要時間)をline‾オブジェクトに与え、その出力を使って、cycle‾の振幅を制御することを考えてみましょう。

4) 連続した10回の音を演奏するためには、安定したレートで振幅エンベロープを繰り返しトリガする必要があります。MAXオブジェクトmetroはこの作業に適しています。10個の音の後でストップするためには、音の数をカウントするか、指定時間が過ぎるのを待ってmetroをオフにしなければなりません。

演習2

* 最初のパッチを修正して、音が10回繰り返される間に、エレキギターサウンドが完全12度高い正弦波の音にクロスフェードするようにしなさい。リニアなクロスフェード(一方のサウンドの振幅が0から1に変化する間に、もう一方のサウンドの振幅が1から0に変化する)を使いなさい。(クロスフェードするための他の方法については、後の章で述べます。)ギター音を左のオーディオ出力チャンネルに、サイン波の音を右のチャンネルに送りなさい。

ヒント:

1) 12度上の音を作るためには、2つ目のcycle‾オブジェクトが必要になります。

2) Eの(純正な)完全12度上の音の周波数を得るためには、単純に329.627557を3倍するだけです。平均率でのEの完全12度上の音の周波数は、987.7666Hzになります。どちらでも、好きな方を選んで下さい。

3) 個々の音のための振幅エンベロープに加えて、10秒間に渡ってそれぞれの音の全体としての振幅を変化させる必要があります。そのためには、*‾オブジェクトを追加して、片方の係数を1から0へ、もう一方の係数を0から1へゆっくりと変化させます。この方法で、全体としての振幅が調整できます。

演習3

* 第2のパッチを修正して、10回繰り返される音の進行全体を通して、2つのクロスフェードする音が、全体としてオリジナルの振幅の1/32まで(すなわち、30dB)ディミヌエンドをするようにしなさい。

ヒント:

1) 振幅を係数0.3125 (1/32) まで徐々に減らすために、さらにもう1つ振幅を調整するためのスケーリング係数(おそらく、*‾オブジェクトの追加)が必要になります。

2) もし、振幅を10秒間で1から0.03125までリニア(線形)に減らしていくとすると、ディミヌエンドはゆっくりスタートして、終わりに向かってだんだん速くなっていくように感じるという点に注意して下さい。これは、1と0.5の間のリニアな隔たり(半分に減少)が、0.625と0.3125の間のリニアな隔たり(これも半分に減少)よりずっと大きいため、最初の6dBのディミヌエンドはスタートから5.16秒間で起きますが、最後の6dBの減少は最後の0.32秒間で起きてしまうからです。したがって、ディミヌエンドをリニアに感じられるものにしたいならば、それなりの調整をしなければなりません。

演習1の解答

* 演習の解答の一例を見るために、実例のパッチャーウィンドウをずっと右までスクロールして下さい。

ギターのような波形のオシレータを作るために、サウンドファイル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)がクリックされた時に演奏されます。

演習2の解答

右のアウトプットチャネルには、同じ振幅エンベロープで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個の音の演奏が開始されるのと同時にクロスフェードはスタートします。

演習3の解答

最後に、全体的なディミヌエンドを作るためにもう1つの振幅エンベロープを使用する必要があります。2つの音はもう1つの*‾オブジェクトに接続され、もう1つのline‾によって制御されます。以前に注意したように、振幅の直線的な減少は音量が一定にディミヌエンドするように知覚されません。そこで、5つの線分(ラインセグメント)を使用して、2秒につき振幅が1/2になるような曲線をシミュレートしました。

全体の振幅エンベロープは2秒につき1/2に減少します

全体に対する振幅エンベロープはシグナルネットワークに挿入され、10秒間で0.03125という係数でスムーズに両方の音の音量を減衰させます。

2つの音は、全体に対してのエンベロープでスケールされます

<-前の章 次の章->