チュートリアル 3 :
数値とリスト

Max の数値データ

チュートリアルを開いて下さい。

Max でプログラミングを始めると、多くの場合、様々な型のデータを扱う必要が生じてきます。このチュートリアルでは、まだ説明していなかった「数値」や「リスト」という型を持つメッセージをどのように扱うかを見ていきます。ここで、数値の操作を可能にするユーザインターフェイス要素について、また、メッセージにリスト要素を挿入するためのアーギュメントの使い方について説明しておきましょう。

テキストによって生成されるメッセージが人間とのコミュニケーション(そして、この先見ていくような、多くのMax オブジェクトに対するコマンドの送信)に役立つのに対し、メディアの世界の大部分のコミュニケーションは、MIDI ノートデータ、ビデオピクセルカラー、ロボットのモーションコントロールなど、いずれにしても数値データに依存しています。Maxパッチを実際のアプリケーションとして役立つものにするためには、ほとんどの場合、数値メッセージに関するコマンドを持つことがきわめて重要です。Max の数値メッセージは、必ずしも1つの数値によるものだけではありません。多くの場合、数値は、他のオブジェクトや、パッチのユーザ、あるいはMaxの外の世界にとって役立つデータのリストを作成するために、コマンドテキストやその他の情報と結びつけられます。そのため、メッセージをリストとして結合させることによって、有用なデータ構造を作るために必要なフォーマット形式が提供されます。

ナンバーボックス

03mNumbersAndLists というチュートリアルを見て下さい。パッチウィンドウには、数値やリストの操作を説明するための小さなパッチがいくつかあります。左端のパッチにある、ナンバーボックスと呼ばれる新しいオブジェクト(グリーンで表示されています)に注目して下さい。これは、整数値(integer 、whole と呼ばれることもよくあります)を扱うオブジェクトで、多くの様々なメッセージを受信することができます。接続されたメッセージボックスをいくつかクリックして、ナンバーボックスがどのように変化するか(同時に、print オブジェクトを経由して、どのようなメッセージが Max ウィンドウに表示されるか)に注目して下さい。

最も大きな効果は、数値データがナンバーボックスに送信された場合に現れます。ナンバーボックスは、数値データの受信に対応して、アウトレットからその数値を送信するとともに、データの表示を行ないます。浮動小数点数(例えば 3.5)をこのオブジェクトに送信すると、数値の整数部分だけを使用し、小数部分は切り捨てて処理します。数値以外のメッセージ(例えば Hey! というメッセージ)を送信すると、Max ウィンドウには、「この型のメッセージは解釈できない」というオブジェクトからの苦情が表示されます。

それ以外の2つの特別なメッセージは、ナンバーボックスによる受信が可能です。第1に、ナンバーボックスに bang メッセージを送信すると、ナンバーボックスは現在格納している値を変更せず、そのまま出力します。第2に、数値の前に set がついたメッセージを送信すると、格納しているデータが変更されますが、出力は行なわれません。これは、ナンバーボックスを「黙らせたまま」、その内容を変更する方法を提供するものです。set メソッドは Max オブジェクトでかなり一般的なもので、オブジェクトのからのメッセージ出力をトリガせずに、オブジェクトが保持しているステート(状態)を操作する手段を提供します。

すぐ右隣のパッチも同様なものですが、浮動小数点数(float-point)ナンバーボックスを使っています。そのため、小数値の表示や出力を行なうことができます。メッセージの多くは、整数ナンバーボックスと同じ結果をもたらします。しかし、浮動小数点値を受信した場合、このナンバーボックスでは完全な値が格納(および表示)されます。bang および set メッセージは期待どおりの動作を行ない、Hey! メッセージは有効ではありません。

ナンバーボックスのユーザインターフェイス

メッセージを送信するだけでなく、ナンバーボックスに直接入力して、格納される数値を操作することができます。例えば、ナンバーボックスの中でドラッグを行なうと、ナンバーボックスの値を手動で変更することができます。パフォーマンスを行なっているような場合、パッチの実行中にリアルタイムで数値を変更したいことがあるかもしれません。そのような場合にこの操作が役に立ちます。必要な値の数だけメッセージボックスを用意するのではなく、ナンバーボックスを操作して設定を変更することができます。整数(integer)ナンバーボックス上でドラッグを行なうと、Max ウィンドウには一連のデータが表示されます。これは、スクロールの間の個々の値をナンバーボックスが出力したものです。

整数データでは、上にスクロールした場合は1を加え、下にスクロールした場合は1を引けばよいため、値のスクロールをサポートすることは簡単です。しかし、浮動小数点値を扱う場合、どのような値を加えたり、引いたりするのでしょうか? 浮動小数点ナンバーボックスの場合、その値はドラッグする直前のマウスの位置に基づいて決まります。マウスをデータの整数部分(小数点の左側の部分)に置いた場合、ドラッグを行なうと整数ナンバーボックスと同様な値の変化が起こります。しかし、マウスをデータの小数部分に置いた場合、表示されている任意の桁を変更することができます。これにより、ナンバーボックスに格納されているデータを粗い単位や細かい単位で操作することができます。

時として、ナンバーボックスのスクロールによって必要以上のイベントがトリガされてしまったり、非常に不正確になってしまうような場面に接することがあります。あるいは、必要な数値が正確に分かっていて、単にその値だけを必要とする場合もあるでしょう。整数ナンバーボックス、浮動小数点ナンバーボックスでは、(パッチがロックされている状態で)ボックスをクリックして数値を入力し、リターンキー押すか、あるいはパッチャー内の他の場所をクリックすることによって、値を変更することもできます。これは、メッセージボックスを用いずに(また、延々とスクロールせずに)正確な値を入力する便利な方法です。新しいデータがナンバーボックスで表示され、同時にオブジェクトがその値を出力する点に注意して下さい。

3つめのパッチには3つのナンバーボックスがあり、お互いに接続されています。ここでは、整数ナンバーボックスと浮動小数点ナンバーボックスの違いを目で見ることができます。浮動小数点ナンバーボックスには小数点が表示されています。最も上の(浮動小数点)ナンバーボックスを変更すると、その値によって整数ナンバーボックスが更新され、続いて次の(浮動小数点)ナンバーボックスが更新されます。また、整数ナンバーボックスを直接操作して、そのメッセージが浮動小数点ナンバーボックスにどのような変化をもたらすかを見ることができます。最も上のナンバーボックスに、60000.といった非常に大きな数を入力して下さい。整数ナンバーボックスは、表示領域が小さいためこの値を表示することができません。パッチをアンロックして、この整数ナンバーボックスオブジェクトの右側にマウスを移動させて下さい。小さな「ハンドル」が現れ、カーソルが左右の矢印に変化するのがわかるでしょう。これは、グロウボックスと呼ばれるもので、Maxのほとんどのユーザインターフェースオブジェクトでは、このグロウボックスを使ってサイズを変更することが出来ます。ハンドルをドラッグして、ナンバーボックスの幅を変更し、パッチの空いた箇所をクリックしてオブジェクトの選択を解除して下さい。整数の表示がすぐに変化するのがわかるでしょう。

最後に、7245569558 といいた途方もなく大きな数値を入力して下さい。整数ナンバーボックスは -2147483468に変化します。何が起こったのでしょうか? 浮動小数点数が認識できる値の範囲が非常に大きいのに対し、32 ビット整数には限界があります。この場合、認識できる整数の最大値は、2147483520 です。これより大きな数値は、整数値を「オーバーフロー」させ、結果は最も大きな絶対値を持つ負の数になります。他の非常に大きな値では、別の結果が生じるかもしれませんが、これは、その数値が限界をどのくらい超えているかによって決まります。

リスト、および置き換え可能なアーギュメントについて見てみましょう

右端のパッチは少し違っています。このパッチはメッセージボックスの集まりですが、各メッセージボックスの内容は数値とテキストを寄せ集めたものになっています。60 30 というメッセージボックスをクリックすると、Max ウィンドウに2つの数値が表示されるのがわかります。このような数値やテキストの組み合わせをリストと呼びます。リストは、パッチコードを介して他のオブジェクトに送信できる単独のメッセージの中にデータを集めておくためのメカニズムです。数値は、整数でも、浮動小数点数でも、あるいはパッチの2番目の例(22 33.9 -5 -44.2)にあるように、それらを組み合わせたものでも可能です。

その次のメッセージの例では、ナンバーボックスがメッセージボックスに接続されています。マウスを使って、このナンバーボックスの値を変えてみて下さい。結果として、Max ウィンドウには fleas(ノミ)メッセージが表示されますが、$1 というテキストは入力された数値に置き換えられています。$1 というテキストは置き換え可能なアーギュメントと呼ばれ、メッセージボックスを使ってメッセージの内容を置き換えることができます。

最後の例では、2つの値を(すでに述べたように、$1 と $2 という置き換え可能なアーギュメントによって)受け入れ、入力されたリストの値を使って fleas and ticks (ノミとダニ) メッセージを生成しています。この置き換え可能なアーギュメントは9個まで使用でき、$1 から $9 の番号が付けられます。そして、メッセージの中では任意の順序で使用することができます。このアーギュメントを試してみましょう。パッチウィンドウをアンロックして、最後のメッセージボックスのテキストを選択して下さい。すでに入力されているテキストの次に、次のテキストを追加して下さい。

$2 ticks are worse $1 fleas

パッチをロックして、接続された2つのリストをクリックして下さい。Max ウィンドウには新しい文が表示されます。メッセージのアーギュメントはリストの内容によって正しく置き換えられているはずです。これは、置き換え可能なアーギュメントの再利用が可能である(すなわち、メッセージの中に複数の $1 アーギュメントを使用できる)こと、また、任意の順序での呼び出しが可能である(すなわち、$2 の後に $1 を使うことができる)ことを示しています。

結び

Max はテキストと同じように、数値データをメッセージとして送信することができます。整数ナンバーボックスや浮動小数点ナンバーボックスなど、数値データの組み立てや処理を助けるユーザインターフェースオブジェクトがあります。Max では、リストを使って数値のグループを1つのメッセージとして結合することも可能です。メッセージボックスで置き換え可能なアーギュメントを使うことにより、リストや、さらに複雑なメッセージを組み立てることができます。

参照

number ナンバーボックス。