アトリビュート

Jitterオブジェクトのパラメータ編集


アトリビュートとは?


アトリビュートはMaxオブジェクトの振る舞いを指定するための新しい方法です。ほとんどのJitterオブジェクトは、内部状態を生み出すためのさまざまな変数に対してアトリビュートを用います。


古き良きMaxのcounterオブジェクト


上に示したcounterオブジェクトのような多くのMaxオブジェクトでは、それらがどのように振る舞うかを決めるために、いくつかのアーギュメントが必要です。オブジェクト名に続くこれらのアーギュメントの順番は、そのオブジェクトがどう解釈するかによって決まります。上記の例では、counterの最初のアーギュメントは、そのオブジェクトがカウントする向きを設定します。2番目と3番目のアーギュメントはオブジェクトがカウントする最小と最大の値を決定します。これらの値は、単純に数値がオブジェクトに与えられるだけなので、その順番が大切です。いくつかのMaxオブジェクト(その一つがcounterです)では、与えられたアーギュメントの数によってそれらのアーギュメントの解釈は異なります。もし、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、symbol、listといったどんな種類の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オブジェクトアーギュメント


ほとんどのJitterオブジェクトが初期設定アトリビュートや初期設定アーギュメントとして使うことのできる4つの要素があります。実際には、それらは常にアトリビュートなのですが、Jitterオブジェクトはそれらがアーギュメントとして使われても自動的に正しく扱います。


Jitterオブジェクトはアーギュメントも持つことができます


上記のjit.rotaオブジェクトで、明示的には初期化されているthetaという一つのアトリビュートだけを持っています。しかし、他の要素は何を意味しているのでしょうか。


Jitterマトリクスデータを処理するJitterオブジェクト(多くのJitterオブジェクトは処理できます)に対してアーギュメントを与えると、そのアーギュメントは次のように解釈されます。


1. 出力マトリクスのプレーン数(planecount)

2. 出力マトリクスの型(type)

3. 出力マトリクスの各次元サイズのリスト(dim)

すでに私達はこれを知っていて、上記のjit.rotaオブジェクトは、320×240セルの2次元を持ったchar(8-bit整数)の4プレーンで作られたマトリクスを出力すると判断できるでしょう。

重要:Jitterオブジェクトでアーギュメントを使う場合、どんなアトリビュートよりも前に設定する必要があります。そうしないとJitterオブジェクトは、それをオブジェクトのアーギュメントではなく、アトリビュートの値であると解釈を間違えてしまいます。

これらのアーギュメントは、マトリクスデータを出力するすべてのJitterオブジェクトで共通なアトリビュートplacecount、type、dimで設定することができます。これらはその順番に関わらず初期設定アトリビュートとして設定したり、メッセージによって変更することができます。例えば次の3つのオブジェクトはまったく同じです。


アーギュメントかアトリビュートか。あなたが決めます。


最初のオブジェクトは初期設定アーギュメントで設定された出力マトリクスアトリビュートがあります。2番目のオブジェクトは初期設定アーギュメントで設定されたplanecountとtypeがありますが、次元のリストについては初期設定アトリビュートを使っています。3番目のオブジェクトはすべてに初期設定アトリビュートを使っています。


もしやりたければ、次のようなloadbangオブジェクトでトリガーされたメッセージを用いてオブジェクトのアトリビュートを初期化することもできます。


アトリビュートを初期化するさらにもう一つの方法


アトリビュートの問い合わせとオブジェクト状態


アトリビュートのさらなる(そして有用な)特徴は、与えられたどのアトリビュートに対しても現在格納されている値が何かを知るために、Jitterオブジェクトに問い合わせることができます。Maxメッセージgetの後に知りたいアトリビュートの名前を続けてアトリビュートに要求することで、これを行います。この結果の値は、(アトリビュートの名前で始まる)メッセージとしてJitterオブジェクトの右アウトレットから出力されます。


Jitterオブジェクトに対するアトリビュートの問い合わせ


アトリビュートの値を見つけるためにgetを使うことで、もし最初にアトリビュートを設定していないとしても、現在のアトリビュートの値が得られます。例えば、下記のパッチはjit.plurオブジェクトのいくつかのデフォルト値を得ます。Maxのrouteオブジェクトで、アトリビュートの各値は簡単に分割できます。


オブジェクトのデフォルト値を見つけ出す


どんなJitterオブジェクトにも送ることのできる2つのメッセージgetattributesとgetstateは、そのオブジェクトで使われるすべてのアトリビュートを出力します。


オプションを見つけ出す


getattributesメッセージは、Jitterオブジェクトに対し、認識するすべてのアトリビュート名の一覧が続くattributesメッセージを出力させます。いくつかのJitterオブジェクトで実験をすることによって、outputmode、type、dimといったものの多くがとても標準的なものだとすぐにわかるでしょう。
(jit.brassオブジェクトにおけるmaskのような)他のものは、それらを使うオブジェクトのために特別な意味を持っています。
getstateメッセージは、考えられるすべてのアトリビュート問い合わせが一度に実行されたかのように、そのJitterオブジェクトのすべてのアトリビュートをダンプ出力します。


オブジェクト状態の検出


また、必要なアトリビュートを取り出すためにrouteunpack、そして他のMaxオブジェクトが使えます。チュートリアルの後のほうですが、入力マトリクス上(またはオブジェクトによってちょうど開かれたファイル上)で実行される計算に基づいてアトリビュートを変更するというところで、いくつかのJitterオブジェクトに遭遇するでしょう。オブジェクトの計算結果を見るためには該当するアトリビュートを問い合わせます。


まとめ

Jitterアトリビュートは、複雑なオブジェクトのパラメータ管理のための強力なツールです。初期化や変更、さらにJitterオブジェクトに格納された現在の値を見るためにアトリビュートが使えます。そして決められたアトリビュート名に各々の値を与えることによって、複雑なオブジェクトでの初期設定アーギュメントの順番や各インレットの役割を覚える必要がなくなります。