チュートリアル28:
パッチ・オブジェクトのアーギュメント

パッチ・オブジェクト(abstraction)への初期値の供給

多くの Max オブジェクトでは、オブジェクト名の後に書き込まれたアーギュメント(タイプイン・アーギュメント)によって、初期値などの情報がオブジェクトに渡されます。パッチ・オブジェクトも、書き込まれたアーギュメント(タイプイン・アーギュメント)から情報を受け取るように設計することができます。

gamble オブジェクト

パッチャーウィンドウには、gamble というオブジェクトのいくつかのインスタンスがあることがわかります。このオブジェクトは Max オブジェクトではなく、gamble という名前で作成し、保存してあるパッチです。

・ パッチャーウィンドウの右側の部分にある gamble 64 128 というパッチ・オブジェクトをダブルクリックして、サブパッチの内容を見て下さい。

gamble オブジェクトは「電子ギャンブルテーブル」として機能します。gamble は、左インレットで bang (入力されるすべてのメッセージは gamble の内部の button によってbang に変換されるため、実際にはどのようなメッセージでも可能です)を受信すると、乱数(2番目のアーギュメント、あるいは右インレットで受信した数値に制限されます)を生成します。この乱数の値が特定の数値(1番目のアーギュメント、あるいは中央インレットで受信した値によって指定されます)より小さい場合、gamble は 1 を出力し、そうでない場合には 0 を出力します。

実質的には、gamble へのアーギュメントは、左インレットで bang を受け取るごとに 1 が出力される確率を指示するものです。このケースでは、確率は 64/128 (1 と 0 の確率は同じ)になります。

・サブパッチウィンドウを閉じて、gamble 2 5 というパッチ・オブジェクトをダブルクリックし、そのサブパッチの内容を見て下さい。アーギュメントが異なるため、このサブパッチの確率は違ったものになっています。

# アーギュメント

・ Max Tutorial フォルダ内の gamble という名前のドキュメントを開いて下さい。オリジナルの gamble パッチでは、確率が可変アーギュメントによって指定されているのがわかるでしょう。

他のパッチの中のサブパッチとして gamble パッチが使用される場合、可変の #1と #2というアーギュメントは、gamble オブジェクトに書き込まれた1番目、および2番目のアーギュメントによって置き換えられます。アーギュメントが書き込まれていない場合、# アーギュメントは 0 で置き換えられます。

# アーギュメントは、サブパッチ・オブジェクトの中のほとんどのMax オブジェクトで使用でき、数値と同様にシンボルで置き換えることもできます。この使用例は、このマニュアルの「アーギュメント」というセクションを参照して下さい。

訳注:「アーギュメント」というセクションは 「Max トピックスマニュアル」にあります。

重み付けを持ったランダムの使用

ここまで、アーギュメントを使って、パッチ・オブジェクトの初期値を設定する方法について見てきました。ここからは、実際にgamble オブジェクトが、このパッチでどのように使用されているかを見ていきましょう。gamble オブジェクトは左インレットに bang メッセージを受信するごとに、指定された確率に基づいて、1 あるいは 0 のどちらを送信するかについての確率的決定を行ないます。

パッチャーウィンドウ の右側の部分では、 gamblegate オブジェクトの開閉を決定するために使われています。

演奏された個々のノートのベロシティは gate オブジェクトが開かれる確率を設定します。その後、 gamble がトリガされ、この確率に基づいて gate の開閉を行ないます。gate が開かれた場合、ピッチが通過し、半音低くトランスポーズされてシンセサイザに送り返されます。

ベロシティ 93 でノートを演奏したとすると、gateが開かれる確率は 93/128 で、およそ 3 / 4 弱になります。このため、演奏したノートがトランスポーズされる確率は高いでしょう。しかし、ベロシティ 3 でノートを演奏した場合、gateが開かれる確率は 3 / 128にしかなりません。このため、ノートはおそらくトランスポーズされないでしょう。

この結果は、ベロシティが増加するにつれてピッチの幅を広げるためにより低い装飾的なノートを加える、確率的な「セロニアス・モンク効果」になります。ここでは、ノートオンのピッチだけをトランスポーズし、ノートオフは makenote によって送信しているため、前の章で見た notetransposer オブジェクトを使う必要がないという点に注意して下さい。

・ MIDI キーボードで極端に異なるベロシティでノートを演奏して下さい。そして、演奏のしかたによって装飾的なノートが加えられる可能性が異なることに注意して下さい。

パッチャーウィンドウの左側では、gamble オブジェクトが再び使用されています。これは、わずかに異なった2つの実装法によって、重み付けを持ったランダムな決定を行なっています。metro 1000 オブジェクトがオンにされると、gamble オブジェクトを毎秒トリガし、gamble オブジェクトは metro 60 オブジェクトのオンとオフを切り替えます(それは時間全体の約 40% の間オンになるはずです)。

下の gamble は、演奏されたノートのベロシティに基づいた確率を再度使用して、60ミリ秒ごとに 1 0 のどちらかを送信します。1 の場合、selrandomをトリガし、演奏されたノートに装飾として追加する音程をランダムに選んで、これをシンセサイザに送信します。

装飾する音程の範囲を決めるために、さらに少しだけ演算が追加されます。これも演奏されたベロシティに基づいて行なわれます。ベロシティが最大の場合、装飾する音程の範囲は -7 半音 〜 +7 半音(最大で完全5度上下)になります。ベロシティが最小の場合、装飾する音程は 0 (ユニゾン)になります。

例えば、ベロシティが 127 の場合、乱数は 0 から(( 127 + 8 )÷ 9 ) - 1(すなわち 14)までの範囲で選ばれます。この数値は、(( 127 + 8 )÷ 9 )÷ 2 (すなわち7)を引かれ、可能な装飾の範囲は -7 から 7 までとなります。

metro 1000 オブジェクトをオンにし、ピッチとベロシティを極端に変えながら MIDI キーボードを演奏して下さい。激しく演奏すると装飾が広くなり、より密集する点に注意して下さい。この装飾の効果は MIDI キーボードをまばらに演奏した場合に、最も理解しやすくなります。

アーギュメントを使用する場合

オブジェクトに値を与える理由は、サブパッチの特性を変更するためです。サブパッチに常に全く同じ動作を要求する場合には、おそらく内部の値を変更する必要はないでしょう。しかし、受信する値によってオブジェクトに少し違う動作をさせたい場合、値はインレットを使って、あるいはタイプイン・アーギュメント(書き込まれたアーギュメント)として与えられなければなりません。

サブパッチに対して、どのような場合にアーギュメントを使って値を与え、どのような場合にインレットで値を渡すかについての厳密な規則はありません。一般的に言って、値を一回だけ設定したい場合は、アーギュメントとして与えるほうがより簡単ですが、パッチ・オブジェクトの持つ値を頻繁に変更したい場合には、インレットを使用する必要があるでしょう。

1つの解決策は、gambleで行なっていたように、2つの方法を共に可能にすることです。アーギュメントはサブパッチの初期値を設定するために使用されますが、中央インレットと右インレットで受信した数値によってその値を変更することができます。

まとめ

パッチ・オブジェクトは、サブパッチの中で # アーギュメントを使うことによって、タイプイン・アーギュメントから情報を受け取れるようにすることができます。サブパッチにある可変アーギュメント #1は、オブジェクトボックスの第1のアーギュメントによって置き換えられ、 #2 は第2のアーギュメントによって置き換えられます。以下同様になります。オブジェクトボックスにアーギュメントが何も書き込まれてない場合、可変アーギュメントは 0 に設定されます。

パッチは、乱数を選び、その数値が一定の条件を満たしているかどうかを見るためのテストを行なうことによって、重み付けを持ったランダム(確率的)な決定を行なうことができます。

参照

Arguments $ と # はオブジェクトに対する可変アーギュメントです。