/**/
アトリビュートはMaxオブジェクトの動作を指定するための新しい方法です。ほとんどのJitterオブジェクトは、カレント(その時点)の内部の状態(ステート)構成する様々な変数のためにアトリビュートを用います。
古き良きMaxのcounterオブジェクト
上記の counter オブジェクトのような多くのMaxオブジェクトでは、オブジェクトがどのような動作を行なうかを決定するために、いくつかのアーギュメントを取ります。オブジェクト名に続くこれらのアーギュメントの順序は、そのオブジェクトがどう解釈するかによって決まります。上記の例では、counter の最初のアーギュメントは、オブジェクトがカウントを行なう方向を設定します。2番目と3番目のアーギュメントはオブジェクトがカウントする場合の最小値と最大値を決定します。これらの値は、単に数値としてオブジェクトに与えられるだけであるため、その順序が重要です。Maxオブジェクトの中には、与えられたアーギュメントの数によってアーギュメントの解釈が異なるものがあります(counterもその1つです)。counter に2つしかアーギュメントを与えない場合、アーギュメントは向きと最小値ではなく、最小値と最大値としてオブジェクトに認識されます。アーギュメントの位置と数は重要なものであるため、例えば、2つのアーギュメントだけで向きと最大値を定義するような counter オブジェクトを作る方法はありません。
オブジェクトに対するアーギュメントは、多くの場合、初期値として使用されています。 そして、一般的にMaxオブジェクトはその値を変更する手段を持っています。変更はオブジェクトの追加されたインレットや、オブジェクトに送る特別なメッセージによって行なわれます。counter オブジェクトでは、2つめと5つめのインレットに整数を送ることにより、それぞれ向きと最大値を変更することができます。これらの値はアーギュメントによって与えられたデフォルト値を上書きします。同様に、min の後に整数を続けたメッセージを左インレットに送信することによって、オブジェクトの最小値を変更することができます。
この方法は、Maxオブジェクトが、オブジェクトの動作を定義する変数を2つか3つしか持っていない場合にはうまく機能します。しかし、Jitterオブジェクトは、たいていの場合これとは比較できないくらい多数の(ときには数ダースの)変数を持っています。このすべての変数がインレットやアーギュメントの順序に依存しているとしたら、リファレンスマニュアルを調べることに一日中費やし、Jitterで作業をする時間がなくなってしまうでしょう。
Maxオブジェクトとは異なり、Jitterオブジェクトに対しては、アトリビュートを使ってどのように動作するかを指示することができます。オブジェクトボックスの中にJitterオブジェクトの名前と共にアトリビュートを入力することによってアトリビュートを設定できます。また、オブジェクトの生成後にはMaxメッセージを使ってアトリビュートを設定することができます(アトリビュートを取り出すことも可能です)。
オブジェクト名の後にアトリビュートがあるJitterオブジェクト
jit.brcosaと呼ばれる上記のJitterオブジェクトには、3つのタイプイン・アトリビュート(書き込まれたアトリビュート)があります。これらのタイプイン・アトリビュートは、@記号とそれに続くアトリビュートの名前、および 1つ以上のアーギュメント(int、float、シンボル、リスト、など任意の種類のMaxデータを使用することができます)を用いてオブジェクトボックスで設定します。オブジェクト名の後に続けて、そのオブジェクトが認識する数のアトリビュートを任意の順序で入力することができます。jit.brcosa オブジェクトが何をするものかわからない場合でも、指定されたアトリビュートの名前やどんな種類のデータかによってそのオブジェクトについて多少のことは推察できるでしょう。
重要:@記号と設定したい初期設定アトリビュート名との間に空白はありません。@文字は、それが前のアトリビュートに対するアーギュメント値ではなく、アトリビュートの名前として付けられている単語だと解釈するようJitterオブジェクトに伝えます。
これも重要:Jitterオブジェクトはタイプイン・アトリビュートとタイプイン・アーギュメントの両方を持つことができます。詳細については後述の「Jitterオブジェクトのアーギュメント」というセクションを参照して下さい。
Maxオブジェクトと同様に、初期の動作を設定するためにJitterオブジェクトに与えた情報は、通常、オブジェクトの生成後に変更することができます。次に示すように、オブジェクトへメッセージを送ることによってアトリビュートはいつでも変更できます。
アトリビュートはMaxメッセージで変えることができます
この jit.brcosa オブジェクトは、最初にbrightnessアトリビュートが1.1に設定されています。しかし、このオブジェクトの左インレットに brightness 1 というメッセージを送信することによって、その値を1.0に変更しました。実際に、Jitterオブジェクトの左インレットに、アトリビュート名の後に必要なアーギュメントを続けたメッセージを送ることによって、任意のアトリビュートを変更することができます。
Maxオブジェクトと同様に、Jitterオブジェクトはパラメータのデフォルト値を持っています。上記のjit.brcosaオブジェクトは、brightness の値を初期化するタイプイン・アトリビュートしか持っていませんが、他のアトリビュートにはデフォルト値が設定されます。オブジェクトが使用するアトリビュートを調べる方法は後ほど説明します。上記の例では、メッセージによってオブジェクトの contrast と saturation の値を変更することができ、オブジェクトに与えられていたデフォルトの値を常に上書きします。
ほとんどのJitterオブジェクトに対してタイプイン・アトリビュートやタイプイン・アーギュメントとして使用することのできる情報が4つあります。実際、これらは常にアトリビュートなのですが、Jitterオブジェクトはこれがアーギュメントとして使用された場合でも自動的に正しく扱います。
Jitterオブジェクトはアーギュメントも持つことができます
上記のjit.rotaオブジェクトは、明らかに、初期化されているthetaという1つのアトリビュートしか持っていません。しかし、その他の記述は何を意味しているのでしょうか。
Jitterマトリックスデータを処理するJitterオブジェクト(ほとんどのJitterオブジェクトはこの処理を行ないます)に対してアーギュメントを与えると、そのアーギュメントは次のように解釈されます。
訳注:「ディメンション・リスト」は、それぞれのディメンション(次元)のもつサイズを並べ、リストにしたものを指します。
このことがわかれば、上記の jit.rota オブジェクトが出力するマトリックスが、char(8ビット整数)データの4プレーンからなり、320×240セルという2つの次元(ディメンション)を持ったマトリックスであることが理解できるでしょう。
重要:Jitterオブジェクトでアーギュメントを使用する場合、あらゆるアトリビュートが設定されるより前に指定しておく必要があります。そうでないと、Jitter オブジェクトは、それがオブジェクトに対するアーギュメントではなく、アトリビュートのための値であるという間違った解釈を行なってしまいます。
これらのアーギュメントは、マトリックスデータを出力するすべてのJitterオブジェクトで共通なアトリビュート、placecount、type、dim によって設定することもできます。これらのアトリビュートはその順序に関係なくタイプイン・アトリビュートとして設定したり、メッセージによって変更することができます。例えば次の3つのオブジェクトはまったく同じものです。
アーギュメントかアトリビュートか。あなたが決めます。
最初のオブジェクトにはタイプイン・アーギュメントで設定された出力マトリックスのアトリビュートがあります。2番目のオブジェクトにはタイプイン・アーギュメントで設定された planecount と type がありますが、ディメンションリストにはタイプイン・アトリビュートを使っています。3番目のオブジェクトはすべてにタイプイン・アトリビュートを使っています。
また、次のような loadbang オブジェクトでトリガされたメッセージを用いてオブジェクトのアトリビュートを初期化することもできます。
アトリビュートを初期化するさらにもう一つの方法
アトリビュートのもう一つの(そして非常に便利な)機能は、Jitterオブジェクトに問い合わせを行ない、そのアトリビュートが現在持っている値を報告させることができるというものです。この問い合わせは任意のアトリビュートについて行なうことが可能で、get の後に(スペースを置かずに)知りたいアトリビュートの名前を続けたMaxメッセージを送信します。その結果、Jitter オブジェクトは(アトリビュートの名前で始まる)メッセージとして値を出力し、オブジェクトの右アウトレットから送信します。
Jitterオブジェクトに対するアトリビュートの問い合わせ
アトリビュートの値を得るためにgetを使う方法では、最初にアトリビュートを設定していない場合でも、現在のアトリビュートの値を得ることができます。例えば、下記のパッチでは jit.plur オブジェクトの持ついくつかのデフォルト値がわかります。Maxの route オブジェクトを使うと、個々のアトリビュートの値を簡単に取り出すことができます。
オブジェクトのデフォルト値を見つけ出します
getattributes と getstate という2つのメッセージはすべてのJitterオブジェクトに送信することができます。これにより、そのオブジェクトで使用されているすべてのアトリビュートが出力されます。
オプションを見つけ出します
getattributes メッセージは、そのJitterオブジェクトが認識するすべてのアトリビュート名を一覧にして、attributesという語の後に続けたメッセージとして出力させます。いくつかのJitterオブジェクトで実験してみると、outputmode、type、dimなどの多くのアトリビュートが極めて一般的なものだということがすぐにわかるでしょう。それ以外のアトリビュート(jit.brass オブジェクトの mask など)は、そのアトリビュートを使用するオブジェクトのための特別な意味を持っています。
getstate メッセージでは、そのJitterオブジェクトのすべてのアトリビュートがダンプ出力されます。これは、考えられるすべてのアトリビュートの問い合わせが一度に実行された場合と同様なものです。
オブジェクトステートの検出
必要なアトリビュートを取り出すためには、route や unpack をはじめとする Maxオブジェクトを使用することができます。チュートリアルの後半では、入力されたマトリックス(あるいは、オブジェクトによって開かれたファイル)上で実行される計算に基づいてアトリビュートを変更するいくつかの Jitter オブジェクトを紹介します。そのアトリビュートの問い合わせを行なうことによって、オブジェクトの計算結果を知ることができます。
Jitterアトリビュートは、複雑なオブジェクトのパラメータ管理を行なうための強力なツールです。アトリビュートを使って、Jitterオブジェクトに格納されているカレント(現在)の値の初期化や変更を行なったり、その値を取得したりすることができます。そして、特定のアトリビュート名と値を結びつけることによって、タイプイン・アーギュメントの順序や、複雑なオブジェクトのそれぞれのインレットの役割を覚えておく必要がなくなります。