チュートリアル4

ムービー再生のコントロール


このチュートリアルでは、これまでに学んだJitterでのQuickTimeムービーの再生についてより詳しく説明します。再生速度やボリューム、ループポイントを変更してムービーの再生を操作する方法についての説明はもちろんのこと、再生しようとするムービーについての役立つ情報を取り出す方法についても学びます。

・Jitter Tutorialフォルダにある、04jControllingMoviePlayback.pat というチュートリアルパッチを開いて下さい。

パッチの中にあるjit.qt.moviejit.pwindowという2つのオブジェクトは、すでにおなじみのものです。パッチのその他の部分は、jit.qt.movieオブジェクトに読み込んだムービーの再生方法を変化させる実験を行うためのものです。

パッチの左の部分は、最初のチュートリアルからすでにおなじみのことと思います。


ムービーのオープンと再生


・read crashtest.mov と書いてあるメッセージボックスをクリックして、crashtest.movというファイルをオープンして下さい。

ムービークリップはjit.qt.movieに読み込まれると同時に再生をスタートします。このムービーにはサウンドトラックがあるので、ムービーが読み込まれるとすぐに音楽が聞こえ出すはずです。ムービーのサウンドトラックはサウンドマネージャから出力されます。もし、通常MSPでASIOドライバを使用しているのであれば、サウンドマネージャ出力の接続とセットアップを行う必要があります。そうすれば、この音楽を聞くことができます。

ムービーが再生されていても、jit.qt.movieオブジェクトがjit.pwindowにマトリクスを送るにはbangメッセージが必要ですので、jit.pwindowにはまだ何も表示されていないはずです。metroオブジェクトのインレットに接続されたトグルボックスをクリックして、metroをスタートさせて下さい。 jit.pwindowオブジェクトにムービーの映像が表示されるのがわかることと思います。
gettimeメッセージについては、まだ気にしないで下さい。それについては次で説明しようと思います。


ムービーについての情報を得る

最初に、このQuickTimeムービーについてのいくつかの情報を得てみたいと思います。Jitterアトリビュートシステムによって、どんな時でもJitterオブジェクトに対して情報の問合せをすることが可能ですし、その情報をMaxパッチで使用することができます。アトリビュート情報は、常に、Jitterオブジェクトの左インレットにgetがつくメッセージ群を送ることによって取り出されます。その後、その答えとしてオブジェクトが一番右のアウトレットから送りだすMaxメッセージを解析します。(詳しくは「アトリビュートとは?」をごらんになって下さい。)


jit.movieオブジェクトに対する自動的な問合せ


チュートリアルパッチの中ほどには、jit.qt.movieオブジェクトの右アウトレットに接続されたMaxの routeオブジェクトがあります。オブジェクトは常に、Jitterアトリビュートを、パッチの中でそれらをセットした時と同じフォーマットで出力します。これは、アトリビュート名の後に、オブジェクトにそのアトリビュートをセットするために必要な情報すべてを続けたものです。

jit.qt.movieオブジェクトに、再生するためのムービーをオープンする命令を与える(read メッセージを送る)と、オブジェクトは右アウトレットから「ムービーを見つけ、その再生方法を理解した」ことを告げるメッセージを送り出します。もしこのパッチで、jit.qt.movieオブジェクトの右アウトレットにprintオブジェクトが接続されていて、ムービーの再読み込みを行ったとしたら、Maxウィンドウにに次のように表示されているのを見ることができたはずです。

read crashtest.mov 1

何かの理由でオブジェクトがcrashtest.movを見つけることができなかった場合、ファイル名の後の数字は1以外のものになります。このメッセージには2つの目的があります。第1は、ムービーファイルの検出とオープンが成功したことを報告するため、第2は、このメッセージをMaxパッチの引き続くアクションの切っ掛け(トリガ)として使用できるようにするためです。

routeオブジェクトの最初のアーギュメントを見ると、readで始まるメッセージを探すように指定してあることがわかると思います。このメッセージの残りはunpackオブジェクトに送られます。このオブジェクトはメッセージの残りを、シンボル(ムービーの名前を含む)と数値にわけますが、この数値はムービーのオープンの成功(1)または失敗(-1 または 0)を表します。ムービーのオープンが成功すると、selectオブジェクトはbangメッセージを送りだします。このbangが、上にあるメッセージボックスのトリガになりますが、このメッセージボックスは、さらにjit.qt.movieオブジェクトに接続されています。

メッセージボックスにはアトリビュートの問合せをするための次のようなリストが書き込まれていて、これらは、先ほど説明したreadメッセージを扱ったのと同じrouteオブジェクトによって解析されます。リストは、getfps, gettimescale, getduration, getrate, getvolです。この一連のメッセージは jit.qt.movieオブジェクトのアトリビュートとして保持されているfps, timescale, duration, rate, volのその時点での値を見つけだします。これらの意味についてはまだ説明されていませんが、新しいムービーがjit.qt.movieオブジェクトにうまく読み込まれた時には、常にこれらの情報が得られるようなメカニズムについてはご理解いただけたことと思います。


スタート、ストップ、そして遅くする


簡単なムービー再生コントロール

チュートリアルパッチの上側には、jit.qt.movieオブジェクトによる再生を変更する、いくつかのコントロールがあります。jit.qt.movieオブジェクトにstopメッセージを送ると、ムービーの再生はムービーのその時点の位置で停止されます。startメッセージを送ると、最後に再生を停止した位置から再生が再開されます。ムービーの再生が停止すると、そのムービーファイルにあるすべてのサウンドトラックの再生は停止します。ムービーのスタート、ストップはjit.qt.movieオブジェクトのマトリクス出力には影響しません。出力はmetroオブジェクトによってコントロールされたままです。metroオブジェクトがオンの状態でムービーをストップしても、依然としてmetroオブジェクトの速さ(このケースでは25回/秒)で、 jit.qt.movieから新しいマトリクスが受け取られます。これらはすべて同じ中身のマトリクスになります。

ムービーの rate を変えると、ビデオ及びオーディオの再生速度が変わります。正のrateの値はムービーを前(通常の再生方向)に進め、1で標準再生速度になります。負の値はムービーを後ろ(逆再生の方向)へ進めます。rate を 0 にすると再生が止まった状態になります。jit.qt.movieオブジェクトはrateアトリビュートのアーギュメントに浮動小数点数を取ります。このため、0.5の値ではムービーの再生速度は半分になり、-2.3では倍速よりやや速い再生速度で逆方向に再生されます。この値をいろいろ変化させると、サウンドトラックはビデオと同期するために、速くなったり、遅くなったり、逆再生されたりするのに気がつくでしょう。ムービーは、いったん最後のフレーム(逆再生の場合は最初のフレーム)まで達すると、ファイルの最初(逆再生の場合は最後)からループします。この動作は、jit.qt.movieの loop アトリビュートに、0(ループしない)、1(通常のループ)、2(順方向、逆方向を交互に繰り返すループ)という値を設定して変えることができます。

vol アトリビュートは、ムービーのすべてのサウンドトラックのボリューム(音の大きさ)をコントロールします。1でフルボリューム、0でサウンドはオフになります。

このパッチでは、アトリビュート rateとvolは、フィルムがロードされた時にパッチの中ほどにあるメッセージボックスによって初期化されます。この方法は、各々の新しいQuickTimeムービーに格納されている値を反映します。(下の記述を参照して下さい)


時間は私の側に

jit.qt.movieオブジェクトは、新しいムービーをオープンする際に、ムービーに関する多くの情報(ムービーヘッダを含む)を読込みます。その中には、ムービーの長さ、ビデオの総フレーム数、再生すべき速度が含まれます。ムービーの再生には、このようなメタ・データ(ムービーの映像、音声などのコンテンツのデータに対しての:訳注)を使います。

重要な注記:多くのJitterアトリビュートがユーザやオブジェクト自身によってセットされるのとは違い、jit.qt.movieによって使われる多くのアトリビュートは、そのムービーファイルによって左右されます。このチュートリアルでとりあげるアトリビュートの多くは、異なるムービーファイルでは、異なる設定がなされています。

問合せを行った最初の3つのアトリビュートは、所要時間(デュレーション)、時間スケール(タイムスケール)、fps(訳注:1秒あたりのフレーム数)です。これらは、ムービーファイルが時間的な調整をどのように処理するかについての情報を与えてくれます。durationはムービー全体の長さを示します。この値はミリ秒やフレーム数ではなく、QuickTimeのタイムユニットで表されます。各タイムユニットの実際の長さはムービーのtimescaleによって決まります。ムービーのtimescaleとはムービーの1秒あたりの時間解像度を表しています。ムービーのdurationをtimescaleで割ると、ムービーの秒単位での近似的な長さがわかります。例えば、このチュートリアルのcrashtest.movというファイルのdurationの値は2836タイムユニットで、timescaleは600です。従って、このムービーは約4.73秒で再生されます。このムービーを2秒で再生しようとする場合は、jit.qt.movieオブジェクトに、message time 1200 とセットします。(1200タイムユニットを600(ユニット/秒)のtimescaleで割ると、結果は2秒になります)

fps(フレーム/秒)はムービー1秒あたりの個別のビデオ画像の数を表しています。ムービーのfpsの値が大きいと、ムービーの動きはスムーズに見えます(個々のフレームがすべて、何らかの形で異なっていると仮定した場合ですが)。一般的なfpsの値は、15、24、29.97、30です。ここでの例では、ムービーファイルは15フレーム/秒で再生されますが、これは新しいビデオフレームを40タイムユニット(あるいは約66.7ミリ秒)ごとに処理しようとします。clashtest.movのdurationをムービーのフレームあたりのタイムユニット数で割ると、ムービーファイルが70フレームを持っていることが割りだせます。必要なら、jit.qt.movieにgetframecountメッセージを送って、ムービーの総フレーム数を問い合わせることができますが、面白い数学をすることはできなくなってしまいますね!


スクラブとループ


カレントの再生フレームを表示、設定します


パッチの下の方には、また違った方法でムービーの再生を処理するための、2つのコントロール装置があります。左のナンバーボックスはムービーがその時点で再生しているフレームが表示されます。この値は、パッチのいちばん上のmetroオブジェクトがjit.qt.movieオブジェクトにgettimeメッセージを送ることによって更新されています(新しいフレームが送りだされるごとに、この値は更新されます)。ムービーの送信を停止(jit.qt.movieにstopメッセージを送る)と、ナンバーボックスをドラッグしてムービーを「スクラブ」することができます。ムービーは、frameメッセージのアーギュメントで指定されたフレームにジャンプします。


ムービーのループポイントをセットします


ループポイント(ループの開始点と終了点を指定する2つの値)は、jit.qt.movieオブジェクトのlooppointsアトリビュートに2つの整数アーギュメントを続けたものによって設定できます。チュートリアルパッチのrsliderはムービーの範囲選択を可能にし、jit.qt.movieはその間でループします。rslider のサイズは、ムービーが読込まれた際に行うアトリビュート問合せによって取得したムービーのdurationの値にセットされています。jit.qt.movieオブジェクトにlooppointメッセージをアーギュメントをつけずに送ると、ループポイントの設定をリセットすることができます。(この例は、問合せメッセージと一緒にパッチの上部にあります。これによってrslider全体がハイライトされます。)


まとめ

jit.qt.movieオブジェクトはQuickTimeコンテンツの再生方法の変更を可能にするために、多くのシンプルなアトリビュートを提供します。stopとstartというメッセージによって再生を停止(stop)させたり、開始(start)させたりすることができます。rateアトリビュートによってムービー再生の速さと方向を変えることができます。volアトリビュートでは、ムービーのサウンドトラックの音量(ボリューム)をコントロールすることができます。

duration、timescale、fps等のアトリビュート問合せを行うことで、jit.qt.movieにロードされているカレントムービーについての重要な情報を得ることができます。frameメッセージを使って、ムービーの指定したフレームへ行くことができます。また、looppoint を使って、ムービーのループ点の設定や検索ができます。jitter.qt.movieにgettimeメッセージを送ると、ムービーの現在の時間位置を問合せることができます。

ムービーの編集や保存といった、よりパワフルな機能を果すこともできます。これについては、チュートリアルの先の方でご説明します。