チュートリアル 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~ に初期周波数値も送っています。


loadbangbuffer~ の内容と 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 によってトリガ(sr、オブジェクトを経由)されます。そして、10個の音の演奏が開始されるのと同時にクロスフェードはスタートします。

演習3の解答

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


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

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



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