/**/

チュートリアル 4:
ムービー再生のコントロール

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

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

パッチの中にある 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 オブジェクトのインレットに接続された toggle ボックスをクリックして、 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 オブジェクトによって解析されます。リストは、getfpsgettimescalegetdurationgetrategetvolです。この一連のメッセージは jit.qt.movie オブジェクトのアトリビュートとして保持されている fpstimescaledurationrate,、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.movieloop アトリビュートに、0(ループしない)、1(通常のループ)、2(順方向、逆方向を交互に繰り返すループ)という値を設定して変えることができます。

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

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

時間は私の側に

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

訳注:メタ・データとは、「データのデータ」というような意味で、ムービーの映像、音声などのコンテンツのデータに関するデータを指します。

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

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

スクラブとループ


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

パッチの下の方には、また違った方法でムービーの再生を処理するための、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 オブジェクトに looppoints メッセージをアーギュメントをつけずに送ると、ループポイントの設定をリセットすることができます。(この例は、問合せメッセージといっしょにパッチの上部にあります。これによって rslider 全体がハイライトされます。)

まとめ

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

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

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