チュートリアル26:
patcher オブジェクト

サブパッチ

パッチャープログラムは、他のパッチャープログラムをサブパッチとして内部に含むことができます。patcher オブジェクトはパッチ内にパッチを作成するためのものです。

オブジェクトボックス内に patcher とタイプすると、新しいパッチャーウィンドウ が開きます。新しく開いた Subpatch window でパッチを編集することができ、メインパッチを保存すると、サブパッチは同じドキュメントの一部として保存されます。ドキュメントを保存する際に サブパッチウィンドウが開いていた場合、次にそのドキュメントを開くとサブパッチウィンドウも自動的に開きます。このサブパッチウィンドウは、patcher オブジェクトをダブルクリックすることによって、いつでも前面に移動させることができます。さらに、patcher オブジェクトをネスト(入れ子状態に)させることもできます。つまり、patcher オブジェクトの中のpatcher オブジェクトの中にパッチャーオブジェクトを置くというようなことが可能であるということです。

patcher オブジェクトは、アーギュメントを持つことができます。これは、サブパッチウィンドウの最上部に表示される名前を指定するものです。アーギュメントがない場合、ウィンドウは「sub patch」という名前になります。他のパッチの一部である場合、名前はブラケット(角カッコ)で囲まれて表示されます。

このパッチには、modwheeel と keyboard という名前を持った2つの patcher オブジェクトがあり、その内容がサブパッチウィンドウで表示されます。美観を考えて、サブパッチのオブジェクトのほとんどは Hide On Lock によって隠されていますが、少し調べてみましょう。

・MIDI キーボードでいくつかノートを弾き、モジュレーションホイールを動かして下さい。あなたの動作が2つのサブウィンドウの dialkslider に表示されることがわかると思います。

All Window Active

コンピュータのアプリケーションでは、前面のウィンドウが「アクティブウィンドウ」になります。このウィンドウでは、「Save」や「Close」などのメニューコマンドを適用したり、オブジェクトのクリックやドラッグを行ないます。バックグラウンドウィンドウをアクティブにするためには、まずそのウィンドウをクリックして、最前面に移動させなければなりません。

All Windows Active オプションをチェックすると、前面に移動させずに、バックグラウンドウィンドウを使用することができるようになります。任意のウィンドウを前面に移動させるためには、タイトルバーをクリックするか、Windows メニューからウィンドウ名を選択します。また、ウィンドウの表示されている部分を、Macintosh では、 [Command] + クリック、Windows では [Control] + クリックして、これを行なうこともできます。

・Options メニューの All Windows Active をチェックして下さい。これでウィンドウを前面に移動させなくても、バックグラウンドウィンドウで dial オブジェクトや kslider オブジェクトをクリックしたり、ドラッグしたりできるようになります。

dial オブジェクトとkslider オブジェクトをドラッグして下さい。これは MIDI キーボードからのデータを表示できるだけでなく、シンセサイザにデータを送信することもできます。

ウィンドウのクローズボックスをクリックすると、サブパッチウィンドウ を閉じることができます。そして(ロックされた)patcher オブジェクトをダブルクリックすることによって再びウィンドウを開くことができます。さあ、patcher オブジェクトの内容を調べて行きましょう。

modwheel サブパッチ

・ modwheel のウィンドウを前面に移動させ、アンロックして下さい。

これで、非表示になっていたオブジェクトを見ることができるようになります。ctlin でMIDI キーボードから受信したモジュレーションホイールのデータは、サブパッチ内の r modIn オブジェクトに送信されます。コントロールデータは $1 アーギュメントを置き換え、出力をトリガせずに dial オブジェクトを設定します(この方法によって、データをシンセサイザにエコーバックしない(戻さない)ようにしています)。dial オブジェクトを変更すると、データは ctlout オブジェクトによってシンセサイザに送信されます。

パッチャーウィンドウどうしの通信が可能になっているのは、send オブジェクトと receive オブジェクトによって、パッチと埋め込まれたサブパッチの間でメッセージのやり取りが可能になっているためです。

inlet オブジェクトと outlet オブジェクト

・ keyboard ウィンドウを前面に移動させてアンロックし、非表示にされていたオブジェクトを見て下さい。サブパッチの最上部に2つの inlet オブジェクトがあります。

inlet オブジェクトあるいは outlet オブジェクトをサブパッチに含めると、それに対応したインレットやアウトレットがメインパッチの patcher オブジェクトに作成されます。これは、通常、サブパッチとメッセージの送受信を行なう最も効果的な方法です。

アシスタンス

Option メニューの Assistance がチェックされている場合、Max はパッチの編集時にオブジェクトのインレットとアウトレットについての情報を提供します。インレット、アウトレットにマウスを置くごとに、そのインレット、アウトレットに関する簡単な説明文が パッチャーウィンドウの一番下にあるバーに表示されます。

patcher オブジェクトのインレットとアウトレットにアシスタンスとしての説明文を設定することができます。それには、サブパッチ内の inlet オブジェクトまたは outlet オブジェクトを選択し、Object メニューから Get Info... を選びます。ここに説明文を書き込むことによって、メインパッチャーウィンドウでの作業時にアシスタンス・メッセージを表示させることができます。

・ メインパッチャーウィンドウ をアンロックし、patcher keyboard オブジェクトのインレットにマウスを移動させてアシスタンスメッセージを見て下さい。

自分自身に対してアシスタンスメッセージを書いておくのは時間の無駄のように感じるかもしれませんが、後になって、サブパッチオブジェクトがインレットで受信するメッセージの型や、アウトレットから送信するメッセージの型を思い出す際に、非常に役に立ちます。

まとめ

patcher オブジェクトはパッチ内にサブパッチを作成します。サブパッチは patcher オブジェクトを含むドキュメントの一部として保存されます。パッチを保存する際にサブパッチ・ウィンドウを開いていた場合、次にこのパッチが開かれたときにはサブパッチ・ウィンドウも自動的に開きます。patcher オブジェクトを他の patcher オブジェクトの中ネストする(入れ子にする)こともできます。

send オブジェクトとreceive オブジェクト、あるいは inlet オブジェクトと outlet オブジェクトを用いてメインパッチとサブパッチ間のメッセージのやり取りができます。 inlet オブジェクトと outlet オブジェクトがサブパッチの中に置かれている場合、それに対応したインレットとアウトレットが自動的に patcher オブジェクトで作成されます。

Option メニューの Assistance がチェックされている場合、Max はパッチの編集を行なっているときにインレットとアウトレットに関する説明文をパッチャーウィンドウ の一番下のバーに表示します。サブパッチ内に置かれている inlet オブジェクトまたは outlet オブジェクトを選択し、Object メニューから Get Info... を選ぶことによって、patcher オブジェクトのインレットとアウトレットにアシスタンスメッセージを割り当てることができます。

Options メニューで All Window Active をチェックすると、ウィンドウを前面に移動させることなく、バックグラウンド・ウィンドウのオブジェクトをクリック、ドラッグできるようになります。

参照

inlet パッチャーウィンドウの外部からメッセージを受信します。
outlet パッチャーウィンドウの外部ににメッセージを送信します。
patcher パッチ内にサブパッチを作成します。
Menus (Max ファンダメンタルマニュアル)コマンドの説明。