チュートリアル 13:
ムービーのシーケンス

イントロダクション

このチュートリアルでは、新しいオブジェクト、rslider、umenu、loadbangオブジェクトを使います。rslider オブジェクトを使うと、1つの UI オブジェクトで数値の範囲を選択することができます。umenu オブジェクトを使うと、パッチの中でポップアップメニューから項目を選ぶことができます。loadbang オブジェクトは設定を行なうオブジェクトです。このオブジェクトを使うと、最初にパッチを開いたときにメッセージをトリガすることができます。これらはすべて、より複雑なパッチを作る場合に重要なものです。ここでは、これらのオブジェクトを、興味深いビデオドリブンプログラムを作るコンテキストの中で使用します。

パッチが複雑になった場合や、パッチを他人と共有する場合、ユーザによる選択を提供することは重要です。rslider オブジェクトはループポイントの選択に力を発揮します(これは、rslider が 1回のマウス操作で開始点と終了点を選択する機能を提供するためです)。そして umenu オブジェクトはファイルのリストや表示されたオプションの中の1つを選択する場合に最適なものです。最後に、loadbang オブジェクトは、パッチがロードされた時点でオブジェクトのパラメータを設定するため、起動時に最小限の設定を必要とするパッチを作ることを可能にします。

新しいオブジェクト:rslider、loadbang、umenu

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

チュートリアルパッチを見て下さい。このパッチには左側にシンプルなパッチがいくつかあり、右側に2つの大きなパッチがあります。左側のパッチを見るところから始めましょう。ここでは、3つのオブジェクトを紹介しています。最も上にあるパッチは rslider オブジェクトの動作例を示すパッチです。オブジェクトの中をクリックすると、その位置にワイパーがジャンプすることがわかります。これは以前使用した slider オブジェクトと非常に良く似ています。しかし、マウスをクリックした後、オブジェクトの中で上または下にドラッグすると、これが値の範囲を選択できるものであることがわかるでしょう。これは、オブジェクトの2つの出力に反映されます。rslider という名前は、これが "range slider"(範囲を指定するスライダ)で、1回のマウス操作で値の範囲を選択することができるオブジェクトであるという事実を示すためにつけられたものです。実際にrslider がカバーする範囲は簡単なメッセージでセットできます(rslider がデフォルトでカバーする範囲は 0 から 127 になっています)。このメッセージについては、このチュートリアルで後ほど説明します。

次のオブジェクトはとてもシンプルですが、非常に重要です。これは loadbang オブジェクトで、パッチファイルがロードされる際にbang を送信します(そのため、このような名前がつけられています)。このオブジェクトは、ユーザインターフェイスの値を設定するために頻繁に用いられます。この場合、パッチを開くたびに、ナンバーボックスは 55 という値をセットされてロードされます(通常ナンバーボックスのデフォルトの値は 0 です)。loadbang をダブルクリックすると、強制的にbang を出力させることができます。接続されているナンバーボックスを別の値に変更し、loadbang をダブルクリックすると、メッセージボックス(メッセージ 55 を持っています)に対してbang メッセージが出力され、ナンバーボックスは再び最初の値に更新されます。

最後に、3つの小さいパッチの最も下のパッチでは umenu を紹介しています。umenu をクリックすると、umenu は選択できるすべての項目をポップアップメニューとして表示します。そのうちの1つを選択すると、2つの形式で出力が行なわれます。左アウトレットからは選択された項目のインデックスナンバーが出力されます。このインデックスは 0 から始まります。中央アウトレットからは、メニュー項目のテキストを含むシンボルが出力されます。umenu オブジェクトはファイルリストと共に使用する場合に役立ついくつかの面白い機能を持っています。

umenu オブジェクトでの選択に使用される項目の設定には、いくつかの方法があります。次のセクションでは、これを自動的に行なうようにする方法を見ていきます。しかし、ここではまず、パッチをアンロックして、umenu オブジェクトオブジェクトの左側をクリックし、インスペクタを開いて下さい。インスペクタには、Max の UI オブジェクトには通常存在しない "items" というタブが追加されていることがわかるでしょう。これをクリックすると、umenu に含まれる項目のリスト(small、medium など)を見ることができます。リストの隣にある"Edit" というボタンをクリックして下さい。ウィンドウが開いて、項目を自由に入力することができるようになります。umenu の項目はカンマで区切る必要があります。リストに追加して(あるいは、全く新しく作成して)、OK をクリックし、インスペクタを閉じて下さい。追加した新しい項目が反映され、umenu が変更されたことがわかるはずです。

ファイル情報を伴ったumenuのロード

最初の大きなパッチには 1 と表示されていて、2つの興味深いセクションがあります。上の領域はMax ディストリビューションに同梱されているムービーフォルダからムービーを選択するために使用されています。これに対し、下の領域は、imovie の中でこれらのムービーの再生をループさせるために使用されています。上の領域から見ていきましょう。

これは、かなり完成されたファイル選択システムです。いちばん上では、loadbang オブジェクトを使って2つのメッセージボックスをトリガしています。トリガの順序は右から左であるため、prefix メッセージボックスが先にトリガされます。umenu オブジェクトのリファレンスマニュアルを見ると、prefix はメニュー項目全体に対するプリフィックスを設定するアトリビュートで、このプリフィックスはどの項目が選択された場合でも、その先頭に追加されるものであることがわかります。これには第2の使用法もあります。prefix アトリビュートは、umenu がpopulate メッセージ(このケースでは autopopulate メッセージ)を受け取った場合に、ファイルをロードする場所を指示するものです。2番目のメッセージを受信すると、umenu はprefix メッセージによって指定されたフォルダの中にあるすべてのファイル名と共にロードされます。

結果として、"patches" というフォルダの中の "media" というフォルダのファイル名を保持した umenu を得ます(これらのフォルダ名はあなたのコンピュータにMax がインストールされた場所からの相対位置で指定されます)。umenu からファイルが選択されると、umenu の中央アウトレットに接続された trigger オブジェクトによって、3つのことが起こります。最初に、imovie に dispose メッセージが送信されます。これはimovie オブジェクトがすでにロードしているビデオファイルをすべてクリアします。次にフォルダプリフィックス ./patches/meda を先頭に付加されたファイル名をもつシンボル(trigger のアーギュメント s に対応します)が出力されます。さらに、この先頭に read メッセージが(prepend オブジェクトによって)付加され、imovie に送信されます。第3に、trigger オブジェクトは delay オブジェクトを経由して bang を送信します。delay オブジェクトはメッセージを 100 ミリ秒ディレイ(遅延)させます。これは、imovie オブジェクトにムービーを読み込むための時間を与えるためのものです。ディレイタイム(遅延時間)が過ぎるとその下にあるメッセージボックスがトリガされます。このメッセージボックスには imovie を初期化するメッセージlength(ムービーの長さの問い合わせ)、loop 1(ムービーをループ再生)、start(再生の開始)が書かれています。ここでは、umenu オブジェクトに左アウトレットにナンバーボックスを接続していますが、umenu オブジェクトのインデックスはいっさい使用していません。中央アウトレット(テキストベース)からのメッセージですべてをトリガしています。このような場合、trigger オブジェクトが非常に役に立つことに注目して下さい。trigger オブジェクトを使うと、複雑な連続したステップを正しい順序で組み立てることができます。この例では、既存のムービーを削除し、新しいムービーを読み込み、その長さを確認してループ設定を行ない、再生をスタートさせるという順序で処理を実行させています。umenu からムービーを選んで下さい。これによってムービーがロードされ、直ちに再生が開始されて、クリップの最後まで達するとループ再生されるという点に注目して下さい。

rslider を使ったループポイントの設定

length, loop 1, start というメッセージにはムービーのロードと再生スタートを行なう他に、もう1つの働きがあります。このメッセージは imovie オブジェクトの左アウトレットからムービーの長さを出力させ、新しいイベントのチェインを動的にせっとします。この length メッセージは rslider の size(すなわち値の範囲)を設定するために使用され、rslider オブジェクトが範囲全体を選択している状態になるようにセットします(これは、0 $1 メッセージによって行なわれます)。rslider の選択範囲は、rslider の中でクリックし、ドラッグすることによって簡単に変更できます。これを使って、imovie が使用するループポイントを変更することができます。この動作がわかりやすいように、上のumenu から"coountdown.mov" というムービーを選んで下さい。これは、10から1までカウントダウンを行なう見慣れたムービーです。

パッチの下部にあるrslider の中でクリック、ドラッグすると、ループの開始点と終了点が変更されるようすを見ることができます。rslider オブジェクトの出力は pack オブジェクトに送られ、loopset メッセージを作るために用いられます。このloopset メッセージは、imovie によって用いられるループの「イン点とアウト点」を変更するものです。加えて、このメッセージは($1によって)フィルムをループの開始点まで巻き戻しています。パッチのこのセクションでは、rslider オブジェクトの最も一般的な使用法を示しています。それは、rslider をメディアファイルの長さで初期化し、その後、再生の開始位置と終了位置を決めるために使用するというものです。

パッチのセットアップ:loadbang と screensize

最後に loadbangを(他のメッセージと共に)使って、ユーザのために完璧なパッチのセットアップを行なう方法を見ていきます。これは、パッチを最初に開いたときに行なわれるものです。このパッチ(右側の 2 と表示されたものです)は、カレントのマウス位置を取得し、これによって320 x 240 ピクセルの表示領域の中のどこにムービーを置くかを決定します。mousestate がポーリングされ、rect メッセージを使って、imovieの中の指定した場所に、縮小して再生されるムービーを置いています。

パッチが最初にロードされたとき、まず、1つのloadbang メッセージを使って、"bball.mov" というムービーファイルがロードされます。このようにすれば、あなた(あるいはパッチのユーザ)はファイルを自分で探さなくてすみます。次に、パッチの右上にあるもう1つのloadbang が使用されます。このloadbang は screensize オブジェクトに bang メッセージを送信します。screensize オブジェクトは、プライマリ・ディスプレイ画面の座標を表す4つの値を持ったリストを出力します。実際には、このリストの後半の2つの値がスクリーンの幅と高さをピクセル値で与えてくれます(例えば、1024 768)。mousestate オブジェクトが 0 から始まる数値の範囲でマウスの位置を出力することを思い出して下さい。そのため、screensize から 1 を引くと、mousestate の出力を 0. から 1. の範囲に正しくスケールすることができます。この方法は、マウス座標を利用する場合に一般的に使用されるテクニックです。たいていの場合、マウス座標を使って、それとは全く異なる範囲の数値をコントロールしたいと考えるため、実際のピクセル値を使用することはあまりありません。

screensize オブジェクトによって scale オブジェクトの入力の最大値がセットされると、カレントのマウス位置は常に 0.0 と 1.0 の間の値になります。その後、これらの値に 240 と 180 を掛けて、imovie オブジェクトの中でビデオを配置するときに用いる左上のスクリーン座標を得ています。rect メッセージの 80 60 という部分は、imovieの中でビデオを表示する矩形領域の幅と高さを指定するものです。imovie のウィンドウサイズは 320 x 240 であるため、入力される左上の座標の最大値は 240 と 180 でなければなりません。

マウスのポーリングを開始するためにtoggle を使って metro オブジェクトをオンにし、start メッセージをクリックして下さい。ディスプレイ上でマウスを移動させて下さい。バスケットボールのムービーが縮小され、カレントのマウスカーソル位置を追いかけるようすを見ることができるはずです。ディスプレイのどの位置にマウスを移動させても、正しくスケールされていることがわかります。

結び

このチュートリアルでは、3つの非常に重要な新しいオブジェクトについて学びました。その3つとは、範囲の選択を行なうrslider、項目(またはファイル名)のリストの作成とその選択を行なうumenu、初期状態のセットアップを行なうloadbangです。さらに、screensize オブジェクトを使ってディスプレイの大きさに関する情報を取得する方法についても見ました。ループの長さやディスプレイ上の位置をコントロールする複雑なビデオ再生システムを作る中で、これらの動作を紹介しました。これらのオブジェクトは最も重要なツールに数えられ、これからのパッチでも使用されます。

参照

rslider 値の範囲を選択し、表示します。
umenu ポップアップメニュー。
loadbang パッチがロードされたときに bang を生成します。
screensize 現在使用しているスクリーンのスクリーンサイズを出力します。