チュートリアル 4:
Metro と Toggle

自動的なアクション

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

このチュートリアルでは、自動的なアクションや、それをコントロールする機能に焦点をあてて見ていきます。ここでは、toggle というユーザインターフェイスオブジェクトを使って metro というタイミングオブジェクトをコントロールします。また、オブジェクトのアーギュメントや、アーギュメントのオーバーライドについても詳しく調べます。

家の中で最も多く利用するもの(オブジェクト)の1つに、照明のスイッチがあります。これは、複雑なシステム(家の照明装置)に対するシンプルなユーザインターフェイスを提供するものです。これと同様に、metro が持っている自動化されたタイミング機能と組み合わせたtoggle オブジェクトは、自動化され、スケジューリングされたアクションによって作られる複雑な世界に対して、シンプルなインターフェイスを提供します。

toggle を試してみましょう

04mMetroAndToggle というパッチを見て下さい。左端のパッチには、一列に並んだメッセージボックス(と button)が四角いボックスに接続されています。まず、このボックスをクリックしてみますか?ボックスの内部一杯にチェックボックスが表示されます。同時に、このオブジェクトから、その下に接続されているナンバーボックスに1 というメッセージも送信されます。もう一度オブジェクトをクリックすると、チェックボックスが消えて、0 が出力されます。このオブジェクトが行なうことはこれですべてです。オブジェクトは、内部の状態(Off または On)によって 0 または 0以外の値を出力します。このオブジェクトの正式な名前は toggle といい、Max プログラミングで最もよく使用されるオブジェクトの1つです。

コンピュータを使用しているときに目にするほとんどのチェックボックスと異なり、このチェックボックスはメッセージを送信することによって自動化することができます。toggle に接続されたメッセージボックスをクリックして、オブジェクトの状態がどのように変化するかを見て下さい。接続されたナンバーボックスに注目すると、0 以外の数値であればどのようなものでもオブジェクトを「オン」にする(チェックマークが表示されます)ことがわかります。また、toggle は、toggle をオンにした数値をアウトレットから「エコー出力」します。

button オブジェクトの動作はさらに興味深いものです。button をクリックすると、tobble オブジェクトのオンとオフが切り替わり、0 と 1 が交互に出力されます(これは、Max ウィンドウとナンバーボックスの中に表示されます)。これが toggle オブジェクトの名前の由来でしょうか?このオブジェクトは、入力される bang メッセージに基づいて、状態を「トグル」する機能を持っています。

metro のイントロダクション:メトロノームオブジェクト

パッチの中央では、新しいオブジェクト、metro を導入しています。metro は、button オブジェクトと同じように bang メッセージを生成します。しかし、button と異なり、metro オブジェクトはスケジュールに基づいて bang メッセージを自動的に送信します。一度スタートすると、metro はストップされるまで bang メッセージを送信し続けます。metro に接続された toggle をクリックして、その結果を観察して下さい。metro は毎秒1回 bang メッセージを(この場合は、button オブジェクトに対して)送信し続けます。toggle のチェックを外す(オフにする)と、metro をオフにすることができます。 metro オブジェクトは、プログラムに自動的、継続的なアクションを行なわせるために使用できる Max オブジェクトの1つです。

metro に接続された button をクリックすると、metro は再び動作をスタートさせます。再度クリックすると、直ちに metro からの bang の出力がトリガされます。すばやく button をクリックすると、出力が生成され続けます。スケジュールされたイベントが生成されるのは、button のクリックを休んだときだけです。metro がbang を受信すると、metro は自分自身を再スタートさせ、トリガされた瞬間から、それ以降の bang メッセージのスケジュールを開始します。metro をオフにしたい場合、stop メッセージをクリックしてイベントの生成を停止させることができます。metro に対してメッセージを使って停止を命じることは、0 を送信することと同じです。

metro が bang メッセージを出力する速さはどのように決定するのでしょうか? metro のスピードは、その時間間隔を設定することによって決定します。metro オブジェクトはアーギュメント(この場合には 1000 という数値)を取り、メッセージとメッセージの間の時間間隔を(ミリ秒単位で)設定します。1000 ミリ秒は1秒と等しいため、毎秒1回の速さで bang メッセージが出力されていたわけです。この速さを変更するにはどうしたらよいでしょう?これは metro オブジェクトの右インレットの機能です。新しくアーギュメントを入力しなくても、metro の右インレットを使って新しい時間間隔を設定することができます。

パッチには複数のメッセージボックスから接続されたナンバーボックスがあります。2000 というメッセージをクリックして下さい。(次にスケジュールされた時間が過ぎた後から)メッセージの出力は遅くなり、2秒に1回 の速さになります。 500 をクリックすると、metro はスピードを上げ、毎秒2回 bang メッセージを送信するようになります。メッセージ 250 では、毎秒4回bang メッセージが出力されるようになります。時間間隔の設定を変更しても、metro の他の状態(例えば、オンかオフか)は変更されません。

右インレットでメッセージを使って時間間隔を変更した場合、metro のアーギュメント自体は変わりません。なぜでしょうか?新しい値を見ることができたほうが便利ではないでしょうか?しかし、アーギュメント自体を変更するということは、オブジェクトの値の変更によってパッチに保存される値が変更されてしまうということを意味するでしょう。タイプイン・アーギュメント(書き込まれたアーギュメント)はmetro をスタートさせるする場合の初期値として機能するため、ほとんどの場合、これをそのままにしておきたいと考えるのではないでしょうか。多くの Max オブジェクトはこのような振る舞いをします。これらのオブジェクトは、メッセージをインレットに送ることでオーバーライド(上書き)が可能なアーギュメントを1つ以上持っています。

並行処理

チュートリアルの3番目のパッチでは、1つの toggleに接続された3つの toggle オブジェクトが追加され、それぞれが異なったアーギュメントを持つ metro に接続されています。最上位レベルの toggle をオンにすると、metro オブジェクトは「ギャロップしているようなライトショー」を作り出します。これは、metro オブジェクトの3つの時間間隔アーギュメントに関連があるためです。最初の metro は1秒(1000 ミリ秒)ごとに、2番目の metro は毎秒3回、3番目の metro は毎秒4回のトリガを行ないます。このパターンを管理しているものは何もありません。これは、単に metro の出力がコンスタントにスケジュールされているために起こっているだけのことで、これによってパターンの出現が保たれ続けているのです。metro の時間間隔は整数(例えば 1000)、あるいは不動小数点数(例えば 333.33)のどちらで設定することも可能です。

ここで学んだ他のアイデアのいくつかを使って、リズムパターンを生成するアイデアを拡張してみましょう。それぞれの metro の時間間隔の値を変更することによって、パターンを変更することができます。それでは、3つのメッセージボックスを追加するところから始めましょう。値を500、100、750 に設定し、それぞれの metro の右インレットに接続して下さい。これらのメッセージボックスをクリックしてmetro オブジェクトの時間間隔を変更しても、明確なパターンは現れません。パターンを見るためには、metro オブジェクトのスタートを同期させる必要があるためです。最も上の toggle をオフにして、再びオンにすると同期させることができます。結果は、中央のライトが速く点滅し、外側がシンコペーションのようなパターンで点滅します。

他のパターンを作ってみましょう。メッセージボックスの値として、それぞれ125、200、500 を使います。今度は、metro オブジェクトのオンとオフの切り替えに toggle を使うのではなく、1つの button オブジェクトを3つの metro オブジェクトの左インレットに接続して下さい。3つのメッセージボックスをクリックし、button をクリックして、すべての metro オブジェクトを再スタートさせて下さい。button はmetro オブジェクトを強制的に再スタートさせるため、期待したような「回転するライトショー」を実現することができます。

結び

自動的なアクションは多くの Max パフォーマンスパッチの心臓部です。そして、たいていの場合、これらの動作の出発点としてmetro オブジェクトが使用されます。アクションがスタートすると、Max のスケジューリングシステムは、Max のアウトプットのために安定したタイミングシステムを提供します。そして、それ以上の操作を行なわなくても、イベントを実行させ続けることができます。チェックボックスのような形をしたtoggle オブジェクトを使ってパッチをコントロールすることは、重要なプログラミングツールでもあります。これは、1つの toggle が、それよりもずっと複雑な処理に対して、シンプルなオン・オフを行なうインターフェイスを提供するためです。

参照

toggle オンとオフ(1 と 0)のスイッチ
metro メトロノームオブジェクト