チュートリアル15では、比較を使って、メッセージを送信するかどうかを決定する方法について見てきました。このような方法を使って、オブジェクトがどこにメッセージを送信するかをを決定することもできます。
左上隅にあるパッチはグラフィカルなオブジェクト Ggate を示しています。このオブジェクトは、受信したメッセージをどちらのアウトレットから送信するか決めるためのものです。右インレットで受信されたメッセージは矢印で指し示されたアウトレットから送信されます。矢印の方向は、マウスで Ggate をクリックした場合、左インレットに bang を送信した場合、あるいは、左インレットに 0または0以外の数値を送信した場合に変更できます。
左インレットへの数値が 0 の場合、矢印は左アウトレットを指します。左インレットへの値が 0以外の数値の場合、矢印は右アウトレットを指すようになります。 上の例で toggle は Ggate の左インレットへ数値 1 を送信し、矢印が右アウトレットを指すようにします。従って、右インレットで受信されたメッセージは、すべて右アウトレットから送信されます。
・いろいろな方法で矢印の向きを変えてみて下さい。その後、ナンバーボックスをドラッグして、Ggate の右インレットに数値を送信してみて下さい。
2番目のパッチでは同じようなオブジェクト Gswitch を示しています。このオブジェクトは2つのインレットのうちの1つを開くことができます。矢印が指し示す方のインレットが開き、そのインレットで受信されたメッセージがアウトレットから送信されます。 閉じられたインレットに受信されたメッセージは無視されます。最も左のインレットは矢印を切り替えるためのコントロール・インレットで、それは Ggate の左インレットと同じように動作します。
・ 2つのメッセージボックスをクリックして、Gswitch にメッセージを送信して下さい。開いているインレットで受信されたメッセージだけがアウトレットから送信されます。矢印の向きを変えて再度試してみて下さい。
Ggate と Gswitch には数値、リスト 、テキストなど、どんなタイプのメッセージでも通すことができます。
gate は Ggate に似ていますが、いくつか重要な相違点があります。
・gate の左インレットに数値を送信し、アウトレットの1つを開いて下さい(あるいは0を送信してすべてのアウトレットを閉じて下さい)。その後、右インレットに数値を送って下さい。
メッセージが送信されるアウトレットを指定するだけで、gate を使って任意の数の送信先の中からメッセージの行き先を決定できることがわかるでしょう。
switch オブジェクトはいくつかあるインレットのうちの1つを開いてメッセージを受信します。そして他のインレットで受信したメッセージを無視します。 gate と同様、最も左のインレットはコントロール・インレットです。それ以外のインレットは、インレットが開いている場合には、任意のメッセージを受信しアウトレットから送信することができます。インレットの数(コントロール・インレットに追加する数)はアーギュメントで指定します(9個まで作ることができます)。
・switch の最も左のインレットに数値を送信し、インレットの中の1つを開いて下さい(あるいは 0 を送信してすべてのインレットを閉じて下さい)。その後、他のインレットに数値を送信すると、指定した1つのインレットだけが開いていることがわかります。
switch を使用して、様々なオブジェクトから、それぞれ個別のインレットでメッセージを受信することができますが、switch が「待ち受け」ているのは、それらのインレットの中のただ1つだけです。
どのような型をもつメッセージでも、gate および switch を通すことができます。
左インレットで受信したメッセージによってトリガされる大部分のオブジェクトとは異なり、gate、switch、Ggate、Gswitch はすべて、左インレットをコントロール・インレットとして使用し、どのインレット、アウトレットを開くかを指定します。その他のインレットで受信したメッセージは、適切なアウトレットに送信します。
もう1つの役に立つトラフィック・コントローラは route で、 ちょうど sel と gate を混ぜ合わせたようなものです。route は、インレットにメッセージを受信すると、そのメッセージの最初の要素と、個々のアーギュメントとを比較します。それが合致した場合には、残りのメッセージを対応するアウトレットから送信し、合致しない場合は、メッセージ全体を最も右のアウトレットから送信します。route は リスト(スペースで区切られた複数の要素からできています)が送られてくる場合に特に役に立ちます。
・様々なメッセージボックスをクリックして、Max ウィンドウ に何が出力されるかを観察して下さい。
route のアウトレット数は書き込まれたアーギュメント数によって決まります。それぞれのアーギュメントはアウトレットのための識別子として働き、最も右に追加されたアウトレットは、route で合致しなかったメッセージを送り出します。
select のように、route は特定の入力のみを検出し、合致しない場合には、何も変更せずにただ送り出します。select と route の間の1つの重要な相違点は、select がいずれかのアーギュメントと合致するものを受信した場合に対応するアウトレットから bang を出力するのに対し、route は合致したものを受信すると、メッセージの残りを送信します(メッセージの残りがない場合には、bang を送信します)。
gate と Ggate オブジェクトは右インレットにメッセージを受信し、開くように指定されたアウトレットだけからメッセージを送信します。switch と Gswitch オブジェクトは開くように指定されたインレットだけからメッセージを受信します。
route オブジェクトは、受信したメッセージの最初の要素とアーギュメントの1つを合致させようと試みます。合致した場合、route はメッセージの残りを適切なアウトレットから送信します(”メッセージの残り”がない場合、route は適切なアウトレットから bang を送信します)。合致しない場合には、すべてのメッセージを右アウトレットから送信します。
ルーティング・オブジェクトを使用して、様々なオブジェクトから送信されるメッセージにフィルタをかけることができます。特定のインレットに到達したメッセージだけを通過させたり、受け取ったメッセージを多くの送信先のうちの1つに送信することもできます。
gate | 入力を指定したアウトレットから出力します。 |
Ggate | 入力を2つのアウトレットのうちの1つから出力します。 |
Gswitch | 2つのインレットのうちの1つへの入力を受け取ります。 |
route | 入力を、指定したアウトレットから選択的に出力します。 |
switch | 指定したインレットからの入力を受け取ります。 |