チュートリアル40:
自動的なアクション

サブパッチウィンドウを開く

プログラムでは、パッチャーウィンドウの自動的な開閉や、ウィンドウの開閉を検知して何らかのアクションをトリガすることができます。

・チュートリアルのこの章のために書かれたサンプルパッチを開くと、サブパッチオブジェクト stopwatchが直ちに開き、ウィンドウが開いたときからの経過時間の表示を始めます。

以前の章(チュートリアル26)で説明したように、patcher オブジェクトのサブパッチウィンドウを開いたまま、patcher オブジェクトを含むパッチャーを保存した場合、サブパッチウィンドウは自動的に開きます。しかし、サブパッチが(この stopwatchのように)別のファイルとして保存された場合、メインパッチが開かれても、サプパッチウィンドウは閉じられています。

このように、通常は開かない [stopwatch] ウィンドウを開くために、ここでは loadbangpcontrol という2つのオブジェクトを使っています。

loadbang と closebang

loadbang オブジェクトは、自分自身を含むパッチャーが開かれた(メモリ内にロードされた)ときに、bang を送信します。これによって、パッチャーがロードされた場合に、直ちに特定のアクションをトリガすることができます。loadbang を使用して gateswitch オブジェクトを開いたり(これらのオブジェクトはパッチが開かれたときには閉じています)、metro のようなタイミングオブジェクトをスタートさせたり、ナンバーボックスのようなオブジェクトに初期値を与えたりすることができます。

loadbang に対応するものとして closebang (ここでは示していません)があります。これは、パッチャーを閉じるときに、アクションをトリガするために使うことができます。例えば metro をオフにしたり、table の内容をリセットしたりするなどというようなアクションをトリガできます。

pcontrol

サブパッチウィンドウは pcontrol オブジェクトによって開閉することができます。pcontrol は、インレットで open あるいは close メッセージを受信すると、アウトレットに接続しているサブパッチオブジェクトのウィンドウの開閉をします。

メインパッチャーウィンドウ の左側部分では、 [stopwatch] ウィンドウを自動的に開くための方法を見ることができます。loadbang からの bang がpcontrol への open メッセージをトリガし、stopwatch オブジェクトのウィンドウを開いています。

pcontrol を使って、それぞれのウィンドウが異なったものを表示するマルチウィンドウパッチを生成することができ、pcontrol に 適切なタイミングでウィンドウの表示、非表示を行なわせることができます。

注:ウィンドウの開閉にはある程度の時間を要するため、Max が音楽を演奏している間のウィンドウの開閉は Overdrive モードでない限り推奨できません。

・[stopwatch] ウィンドウ内の toggle をクリックすることによって、stopwatch のストップや、再スタートができます。[stopwatch] ウィンドウの開閉をするためには、pcontrolopen あるいは close メッセージを送信します。

・[stopwatch] ウィンドウを閉じ、もう1つの pcontrol オブジェクトに open メッセージを送信して [clicktrack] ウィンドウを開いて下さい。[clicktrack] ウィンドウを開くと、4つのノートによるクリックトラックが自動的に演奏を開始し、ナンバーボックスにメトロノームのテンポが表示されます。

また pcontrol オブジェクトは、コントロールしているサブパッチウィンドウ内のMIDI オブジェクトを使用可、使用不可にすることができます。pcontrol のインレットに enable 0 というメッセージを送ると、サブパッチの中の MIDI オブジェクトは使用できなくなり、enable 1(あるいは、0以外の任意の数)を送ると MIDI オブジェクトは再び使用できるようになります。 サブパッチ内の MIDI オブジェクトを自動的に使用不可にするパッチを作成する場合、ノートオフ・メッセージが失われ、シンセサイザの音がオンのままになってしまうという危険性が生じることを覚えておいて下さい。

・All Windows Active を使用可にして、ウィンドウを最前面に移動させずに メインパッチャーウィンドウ内をクリックできるようにして下さい。その後、メインパッチャーウィンドウ 内のトグルをクリックし、MIDI を使用不可にして下さい。サウンドは停止しますが、led は点滅し続けます。

led

led オブジェクトは toggle と同じような、オン/オフ動作のインジケータですが、異なる点もあります。toggle は受信した任意の数値を送信しますが、led は受信した数値の 0 /非0を示す 0 1のみを出力します。ledbang を受信すると、点滅して 0 を出力します。led オブジェクトを選択し、Object メニューから Get Info... を選ぶことによって、ledの色と点滅時間を変更することができます。

active

ウィンドウが最前面に移動されたとき、何が clicktrackstopwatch を自動的に実行させているのでしょうか?これらの動作は、もう1つの自動制御オブジェクトであるactive によってコントロールされています。

・サブパッチ内の非表示にされたオブジェクトを見るためには、実際にサブパッチが保存されているファイルを開かなければなりません。File メニューから Open... を選んで stopwatch という名前のファイルを開いて下さい 。

・stopwatch のwindowの中にある toggle をクリックして、時間表示を停止させて下さい。その後、ウィンドウをアンロックして非表示になっているオブジェクトを見て下さい。

ウィンドウがアクティブにされる(最前面に移動される)と、ウィンドウ内の active オブジェクトは 1を送信します。ウィンドウが非アクティブにされる(最前面ではない状態になる)と、active0 を送信します。ここでは、active を使って、ウィンドウが前面に移動された場合、自動的に clocker オブジェクトがオンに切り替わるようにしています。

active オブジェクトは、ウィンドウの前面ー背面という状態の変化のみに対応して数値を送信し、All Window Active の設定には影響を受けません。All Window Active がチェックされている場合、あらかじめウィンドウを最前面に移動させなくても、ウィンドウ内をクリックすることができますが、厳密に言えば最前面のウィンドウのみがアクティブです。ウィンドウを背面に移動すると、ウィンドウ内の active オブジェクトは 0 を送信しますが、ウィンドウを閉じた場合は、実際にウィンドウが背面に送られたわけではないため、 active 0 を送信しません。

stopwatch オブジェクトは他のオブジェクトからは何もメッセージを受け取りませんが、pcontrol によってコントロールするためのインレットが必要です。このような目的のために、パッチ内にダミーの inlet オブジェクトを置くことが可能です。

・stopwatch パッチを閉じて、clicktrack という名前のファイルを開いて下さい。clicktrack の中の toggle をオフにして、ウィンドウをアンロックし非表示になっていたオブジェクトを見て下さい。この中には active オブジェクトが含まれていて、ウィンドウがアクティブになると tempo をオンにします。tempo から送信される 0〜3 の数値は、乗算、およびトランスポーズされ、ピッチ C5、E5、 G#5、 C6として演奏されます。

clicktrack オブジェクトは新しいテンポ値を受信するためのインレットを1つ持っていますが、この同じインレットを使用して、メインパッチの pcontrol から [clicktrack] ウィンドウをコントロールすることができます。

まとめ

loadbang オブジェクトは、自分自身が置かれているパッチがメモリー内にロードされると bang を送信します。closebang オブジェクトは、自分自身が置かれているパッチが閉じられると bang を送信します。これらの bang メッセージを使って、処理の開始、 gate の開閉、メッセージの送信などを行うことができます。

pcontrolopen あるいは close メッセージを受信すると、アウトレットに接続されてるすべてのサブパッチオブジェクトの開閉を行います。また、pcontrolオブジェクトに対して enable1 あるいは enable 0 というメッセージを送信することによって、MIDI を使用可、あるいは使用不可にすることもできます。しかしノートが演奏されている間に MIDI オブジェクトを使用不可にした場合、ノートオフ・メッセージが失われ、シンセサイザのノートがオンのままになってしまう可能性があります。

active オブジェクトは、自分自身が置かれているウィンドウが最前面に移動した場合に 1 を送信し、他のウィンドウが最前面に移動した場合には 0 を送信します。

参照

active ウィンドウがアクティブの場合 1 をウィンドウが非アクティブの場合 0 を送信します。
closebang パッチが閉じられる時に自動的に bang を送信します。
loadbang パッチのロード時に自動的に bang を送信します。
pcontrol パッチャー内のサブウィンドウの開閉を行います。