Interface チュートリアル 1:
bpatcher

イントロダクション

このチュートリアルでは、サブパッチのインターフェイスが見える状態で、サブパッチをパッチの中に埋め込む、便利なオブジェクトに注目します。bpatcher オブジェクトは表面的にはパッチオブジェクトを作る場合と良く似ています。まず、バッチファイル(必要であれば、インレットとアウトレットを持たせます)を作り、それをディスクに保存します。そして、このパッチファイルをオブジェクトボックスにインストールするのではなく、bpatcher オブジェクトを使います。このオブジェクトは、パッチファイルの内部が見えるようにして、他のパッチの内部に「埋め込む」ためのものです。これにより、インターフェイス要素のライブラリを構築することができます。このライブラリは、インターフェイスを持ったパッチのロジックを部品として集めたもので、何回でも再利用することができます。

チュートリアルパッチの概要

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

チュートリアルパッチを眺めてみて下さい。ウィンドウには、"Start" と表示されたtoggle と3個の button オブジェクト("draw"、"see"、"clear")、そして、3つの全く同じ外観を持ったインターフェイス領域があり、かなりまばらに配置されています。
(訳注:"clear"はインターフェイス領域にあるため、3個のbutton のうちの "clear" は "erase" を指していると思われます。)

"Start" と表示された toggle をクリックして下さい。マウスを左側のインターフェイス領域へ動かし、小さな黄色いボールがある青い矩形の中で描画を行なって下さい。この青い矩形は2次元ユーザインターフェイスを持つ jsui オブジェクトです。これは、マウスのクリックを追跡(トラッキング)する、一種の2次元スライダをシミュレートしたものです。jsui の中でマウスをドラッグして「描画」を行なうと、その動作は、下にある lcd オブジェクトの中に赤い色でトレースされます。lcd オブジェクトはボーダー(境界線)の表示をオフにしているため、jsui の中で何らかの描画を行なうまで全く気づかないでしょう。lcd の内容を("erase" と表示されたbutton によって)消去すると、先ほどの動作が再び描画されることがわかるはずです。

第2、第3の jsui オブジェクトの中で、マウスによる描画を行なってみましょう。それぞれのjsui の中での動作が緑と青で lcd オブジェクトの中にトレースされることに注意して下さい。"erase" というbutton をクリックして lcd の内容を消去し、再描画が行なわれるようすを観察して下さい。

jsui オブジェクトの隣にある slider を上げると、動作のトレースが僅かに「ノイズを含んだ」ものになることがわかるでしょう。これは、jsui から送られる「動作」のレコーディング情報が少しランダム化され、描画にテクスチャが加えられるためです。"clear" と表示された button の中から任意のものをクリックして、キャプチャされている動作を消去して下さい。これにより、対応する jsui で新しい動作を記録させることができます。

動作が「読み込まれている」状態で、パッチの上部にある "see" というbutton をクリックして下さい。3つのインターフェイス領域が、突然、違ったように見えることに注目して下さい。新しい3つの jsui オブジェクトでは、入力したときの動作が「トレース」されているように見えます。もともとあったはずの jsui、slider、そして "clear" という button はいったいどこに行ってしまったのでしょうか?

bpatcher オブジェクト

チュートリアルパッチをアンロック(ロック解除)して下さい。「非表示("hidden")」になっていたオブジェクトがいくつか表示され、さらに3つのインターフェイス領域の周りに青いボックスが現れることに気がつくと思います。この青いボックスの正体は、ディスクに保存されているパッチオブジェクトを含んだbpatcher オブジェクトです。このパッチオブジェクトのパッチファイルには、メインのチュートリアルパッチの中に表示されているインターフェイスの部分があります。

3つのインターフェイス領域から任意のものをクリックして下さい。このとき、単に青いボックス領域の移動やサイズ変更ができるだけで、オブジェクトの内容の編集はできないという点に注意して下さい。その理由は、先ほど述べたように、この領域にあるパッチのロジックが別のファイルとして保存されているためです。青いボックスの上で、[Control] + クリック(Mac)、あるいは 右クリック(Windows)してコンテキストメニューを表示させて下さい。このメニューで Object というサブメニューに行き、そこから "Open Original doodlepathce.maxpat" を選んで下さい。3つのインターフェイス領域のオリジナルファイルが開きます。このパッチを見てみましょう。"doodlepatch.maxpat" というパッチオブジェクトをアンロックして下さい。この状態では、パッチがアンロックされていても、パッチのインターフェイス要素しか見えていない点に注意して下さい。これは、このパッチがプレゼンテーションモードになっているためです。パッチインスペクタ(patcher Inspector)で "Open In Presentation" をチェックすることによって、そのパッチがプレゼンテーションモードで開かれるように設定することができます。View メニューで Presentation のチェックを外すと、パッチはオリジナルの表示に変わり、たくさんのパッチのロジックが現れます。

パッチのコードを調べてみましょう。ここでは、coll オブジェクトと共に、jsui オブジェクトから送られてくる描画データの取得とそのレコーディングをサポートするためのロジックを使っています(この構造は、「動作のキャプチャ」というチュートリアルですでに説明したものです)。第2の jsui(右側)では、coll からのデータによって直ちに動作が再現されます。このデータは、inletオブジェクトから入力される bang メッセージがcounter オブジェクトを動作させ、そのcounter から出力される値に基づいてcoll から送信されているものです。

bpatcher のオフセット

"doodlepatch.maxpat" を閉じずに、チュートリアルパッチに戻って下さい。そして、パッチがアンロックされている状態で、"draw" と "see" というbutton オブジェクトを見て下さい。この2つのbutton オブジェクトがそれぞれ、offset -60 0 と offset -360 0 というメッセージを持つメッセージボックスをトリガしている点に注目して下さい。このメッセージは bpatcher オブジェクトの第2インレットに送信されています。

再びbpatcher パッチに目を移し、第2インレットがどこに接続されているかを見て下さい。第2インレットは thispatcer オブジェクトに接続されていることに気がつくでしょう。このthispatcher オブジェクトはパッチファイルのアピアランス(外観)をコントロールする機能を提供します。このアピアランス情報には、サイズ、スクリーン上の位置、タイトルバーの表示と非表示といったものが含まれます。bpatcher ファイルの中で thispatcher オブジェクトを使用した場合、offset メッセージと共に与えられる座標値に基づいて、bpatcher のインターフェイスを「スクロール」することができます。これにより、このチュートリアルのマスタパッチでは、同じbpatcher ファイルの中にある異なった視点(ビュー)の間で「切り替え」を行なっています。このケースでは、"draw" ビューと"see" ビューの間で切り替えを行なっています。

bpatcher オブジェクトのアーギュメント

bpatcher ファイルのアウトレットに接続されているパッチのロジックを見て下さい。ポンド記号(#記号)によるパッチオブジェクト用アーギュメントを3つ(#1、#2、#3)持った append オブジェクトがあります。このアーギュメントは、"doodlepatch.maxpat"を通常のパッチオブジェクトとして読み込む場合であれば、オブジェクトボックスに与えるものです。このようなアーギュメントを bpatcher オブジェクトで設定するには、bpatcher オブジェクトのインスペクタを使用しなければなりません。

bpatcher のパッチオブジェクトファイルを閉じて、チュートリアルパッチに戻って下さい。bpatcher オブジェクトの1つをクリックして、インスペクタを開いて下さい。下の方にあるPatcher File という項目で、このオブジェクトにロードされるパッチファイルの名前を見つけられるということを覚えておいて下さい。そのすぐ下はArgument(s)という項目で、3つの数値があります。この数値は、パッチオブジェクトのアーギュメントの代わりになるもので、それぞれのbpatcher オブジェクトに個別に設定されます。これにより、パッチの中で、パッチオブジェクトの複数のコピーに対して、それぞれ異なる設定を行なうことができます。

このチュートリアルのbpatcher に与えられるアーギュメントは、lcd の動作キャプテャシステムで描画に使用される色をコントロールするもの(つまり、lcd に送信される frameoval コマンドの最後の3つの数値を提供するもの)です。それぞれの bpatcher のインスペクタを開いて、この値を、違った色を表すRGB 形式の値に変更して下さい。新しい動作をレコーディングすると、あなたが選択した色を使ってlcdが動作を表示することがわかります。

結び

bpatcher オブジェクトは、大きなプロジェクトの中に視覚的なインターフェイスを埋め込むという、非常に役に立つ手段を提供してくれます。インターフェイスを設計(何らかのサポートを行なうロジックが必要になります)し、保存して、他のパッチの中に表示することができます。bpatcher の中のthispatcher オブジェクトにoffset メッセージを送信することによって、オブジェクトの中の表示される矩形領域を「スクロール」し、インターフェイスの別の部分を表示させることができます。これをプレゼンテーションモードの使用と組み合わせて使うことにより、インターフェイスをよりカスタマイズすることが可能になります。別の形で使用されるパッチオブジェクトの場合と同じように、bpatcher オブジェクトが使用するパッチでもアーギュメントを処理することができます。その場合、アーギュメントはbpatcher オブジェクトのインスペクタで設定します。

参照

bpatcher ボックス内に、サブパッチを目に見える形で埋め込みます。
thisptcher パッチにメッセージを送信します。