チュートリアル25:
メッセージの管理

メッセージボックスの使用

これまで、1つのメッセージの送信を行なうためにメッセージボックスを使ってきました。 これは、マウスクリック、bang、数値、リストをインレットに送ることによってトリガするものでした。メッセージボックスはメッセージの構築や変更に関する多くの追加機能を持っています。このパッチではそのうちのいくつかを紹介します。

カンマ

メッセージボックスがカンマを含んでいる場合、メッセージは次々と送信されます。この方法により一回のトリガによる応答で、メッセージをすばやく、連続して送信することができます。

・ パッチャーウィンドウ の左下部分にある2つの(A と表示された)メッセージボックスをクリックして下さい。1つのメッセージボックスは 40 59 80 という3つの数値によるリストを持っています。makenoteは、このリストを受信すると、3番目の数値をデュレーション、2番目の数値ををノートオン・ベロシティ、最初の数値ををピッチとして解釈します。もう1つのメッセージボックスは3つの別々のメッセージを持っています。このメッセージボックスは 40、そして 59、その後 80を送信し、各数値は makenoteによってピッチとして解釈されます。Max ウィンドウに出力されたメッセージを見たり、結果の違いを聞くことによって確認できます。

これは、コード(和音)を演奏する1つの方法です。

可変アーギュメント:$

メッセージボックス内のドル記号( $ )は特殊文字です。この記号は、入力されるメッセージの要素によってアーギュメントを置き換える「可変アーギュメント」を表します。例えば、メッセージボックスが The pitch is $1 and the velocity is $2 というアーギュメントを持っていて、インレットでメッセージ 60 64を受信した場合、 The pitch is 60 and the velocity is 64 という結果を送信します。数値60と64は、インレットで他の数値を受信することによって置き換えられるまで、$1 と $2 に格納されます。ドル記号は 1 から 9 までの番号を付けることができます。

・ パッチャーウィンドウ の左上隅にある( B と表示された)ナンバーボックスをドラッグして下さい。speedlim オブジェクトによって制限された後、それぞれの数値はメッセージボックスをトリガします。メッセージボックスは可変アーギュメント $1を持っているため、$1は メッセージを送信する前に、入力された数値で置き変えられます


入力された数値はメッセージを送信する前に、可変アーギュメント$1に格納されます。

その後、数値は pipe オブジェクトに送信され、1000ミリ秒後に makenoteとシンセサイザに送信されます。

・メッセージボックスをトリガする最後の数値は、そのまま $1 アーギュメントに格納されています。この状態で bang によってメッセージボックスをトリガした場合、格納されている数値が再び送信されます。

set メッセージ

すでに、数値を後に続けたメッセージ set は、多くのオブジェクトに対して、出力をトリガせずに格納する値の指定や置き換えを行なうことができるということを見てきました。set に任意のメッセージを続けた場合、出力をトリガせずにメッセージボックスの内容を置き換えることができます。set だけの場合には、メッセージをクリアします(空の messageがトリガされた場合は何も送信されません)。

・パッチの C と表示された部分にある、様々なset メッセージをクリックして下さい。

・メッセージボックス内のテキストが変更された場合でも、bang メッセージでトリガされない限り、何も送信されません。

append と prepend

append オブジェクトと prepend オブジェクトは複雑なメッセージを構成するためのものです。append オブジェクトは受信したメッセージの最後に(スベースを入れて)自分の持つアーギュメントを追加し、結合したメッセージをアウトレットから送信します。prepend オブジェクトは受信したメッセージの前に(スペースを後に続けて)自分の持つアーギュメントを置き、結合したメッセージをアウトレットから送信します。これらのオブジェクトの使用例は パッチャーウィンドウ の右下にあります。

append オブジェクトがメッセージ(例えば数値 12など)を受信すると、メッセージの後に semitones という語を置き、12 semitones を送信します。その後、prepend オブジェクトはメッセージの前に set Transposition = を置いて、set Transposition = 12 semitones を送信し、これによってメッセージボックスの内容が Transposition = 12 semitones に変更されます。

メッセージボックスのみを使用した次のような方法によって、同様な結果を得ることもできます。

バックスラッシュ

バックスラッシュ ( \ )は他の特殊文字を無効にする特殊文字です。バックスラッシュを前に付けられた特殊文字はその特別な性質を失い、他の文字と同じように取り扱われます。これはカンマやドル記号のような文字を特殊記号としてではなく、メッセージ内に含めたい場合に必要になります。

append メッセージ

メッセージを後に続けた append メッセージがメッセージボックスに送信された場合、append の後に続けられたメッセージがメッセージボックスの内容に追加されます。

・ D と表示されたパッチで、 set \$1 と append 3000 というメッセージボックスをクリックして $1 3000 というメッセージを構築して下さい(ドル記号の前に \ を付けなければならないことに注意して下さい。そうでない場合、メッセージボックスは $1 を可変アーギュメントとして解釈しようとするため、メッセージは 0 にセットされます)。B と書かれた ナンバーボックスをドラッグして下さい。

$1アーギュメントは入って来た数値によって置き換えられ、数値3000を伴ったリストとして送信されます。リストは pipe オブジェクトによって受信され、3000は新しいディレイタイムとして pipe オブジェクトに格納されます。数値は送信される前に3秒間ディレイされます。

・次にパッチ D の3つのメッセージボックスすべてをクリックして、$1 3000,$1 200というメッセージを構築して下さい。

・メッセージボックスに数値を送信すると、メッセージボックスは2つのリストを送信し、結果として各々の数値は3000ミリ秒と200ミリ秒ディレイされます。

セミコロン

メッセージボックス内にセミコロン( ; )がある場合、セミコロンの後の最初の語は receive オブジェクトの名前として解釈されます。残りのメッセージ(あるいは次のセミコロンまで)は、メッセージボックス自身のアウトレットから送信される代わりに、同じ名前を持つすべての receive オブジェクトに送信されます。

・E と表示された、数値 700を持つメッセージボックスをクリックして下さい。

数値 700はアウトレットから pipe オブジェクトの右インレットに送信され、数値 0 は rtransp オブジェクトのアウトレットから送信されます。そして Maxウィンドウにメッセージ delay = 700が出力されます。これは一回のトリガで多くの様々なメッセージを、様々な場所に送信する1つの方法です。

まとめ

メッセージボックスは、単にアウトレットからメッセージを送信できるだけではなく、メッセージを構築し、様々な場所に送信するために使用できます。

カンマはメッセージボックス内の異なるメッセージを区切るために使用され、それらのメッセージを1つずつ連続して送信します。メッセージボックスの中のメッセージの前にセミコロンがついている場合、セミコロン後の最初の語は receive オブジェクトの名前になります。そして、メッセージの残り(あるいは次のセミコロンまで)は、メッセージボックスのアウトレットの代わりに、同じ名前を持つすべての receive オブジェクトに送信されます。カンマとセミコロンは、メッセージボックスが一回のトリガで多くの様々なメッセージを送信することを可能にします。

数値をすぐ後に続けたドル記号(例えば $1 のようなもの)は可変アーギュメントです。メッセージボックスがトリガするメッセージを受信すると、それぞれの可変アーギュメントは、トリガするメッセージの中の対応する要素に置き換えられます($1 は最初の要素で置き換えられ、$2は2番目の要素で置き換えられます。以下同様です)。入力されたメッセージに置き変えられる値が存在しない場合、それまでに格納されていた値が使用されます。可変アーギュメントに格納されている値がない場合には、その値はデフォルトの 0 になります。

バックスラッシュはカンマ、セミコロン、ドル記号等の特殊文字の前に使用して、特殊記号の効果を無効にします。

set メッセージは、出力のトリガを行なわずにメッセージボックスの内容を変更する場合に使用できます。append メッセージはメッセージボックス内のメッセージの最後に何かを追加するために使用することができます。

prepend オブジェクトと append オブジェクトは入力されたメッセージの初め、あるいは終わりに、自分の持っているタイプイン・アーギュメントを付け加え、その後、結合したメッセージを送信します。

参照

append メッセージの終わりにアーギュメントを追加します。
Arguments $ と # は可変なアーギュメントです。
message メッセージを送信します。
prepend あるメッセージを他のメッセージの初めに置きます。 。
receive パッチコードを用いずにメッセージを受信します。
send パッチコードを用いずにメッセージを送信します。
Punctuation オブジェクト、メッセージ内の特殊文字。