チュートリアル23

FireWireのカメラをコントロールする


このチュートリアルでは、jit.avcオブジェクトを使って、JitterからFireWireに対応したDVカメラやDVデッキをコントロールする方法を見ていきます。このオブジェクトを使用することで、JitterとDVデバイスを簡単に繋げる事ができ、FireWireDVデバイスをMaxのインターフェイスを使ってコントロールしたり自動化したりすることが出来ます。

AV/C(Audio Video Controlの省略形)はDVカメラなどの外部デバイスとコンピューターが通信するためのプロトコルの正式名称です。使用されている正確な仕様は、AV/C Tape Recorder /Player Subunitと呼ばれています。全仕様書のコピーはオンライン上の http://1394ta.org/Technology/Specifications/specifications.htmで見つける事が出来ます。

仕様書では、使用可能な異なるタイプのトランスポートコントロールを3つの大きなグループに分けています。

1.WINDグループはメディアを再生を伴なわずに、順方向と逆方向へ進めるのに使われます。停止や、早送り、早巻き戻しもWINDの機能に含まれます。

2.PLAYグループはメディアの再生に使われるコマンドを含んでいます。順方向と逆方向へ様々な速度で再生する事が出来ます。例では再生、停止、スロー再生、スロー逆再生を含んでいます。

3.RECORDグループはデータをメディアに挿入するのに使われます。

これらの3つのグループは全てjit.avcオブジェクトで実行することが出来ます。さらに、このオブジェクトはcustomメッセージを使用することにより、ハードウェアにどんなメッセージでも送る事が出来ます。これは使用するハードウェアをjit.avcオブジェクトが直接サポートしていなくても可能です。

このチュートリアルのパッチの例では、あなたがDVカメラかDVデッキをコンピュータのFireWireポートにつないでいて、そしてその電源がオンの状態であると仮定しています。


プラグアンドプレイ

jit.avcオブジェクトとハードウェアとのつながりは、明示的に開いたり閉じたりします。それは今までのパッチで見てきたjit.qt.grabや、jit.qt.videooutといったオブジェクトの場合と同様です。けれどもjit.avcオブジェクトを使用する方がややシンプルです。それは一つのタイプのデバイスとしか通信しないからです。

基本

・Jitter Tutorialフォルダからチュートリアルパッチ、23jFWCameraControl.patを開いてください。


jit.avcとそのお友だち

・getdeviceメッセージボックスをクリックしてください。これをクリックするとjit.avcオブジェクトはコンピュータに繋がれた使用可能なデバイスを探します。1つ見つかると、オブジェクトは、シンボルdevice に続く形で、そのデバイスの名前をアウトレットから送信します。私達のSony DVカメラを繋いだ場合は、 jit.avcはdevice Sony DVというメッセージを送信します。

・このパッチでは、routeオブジェクトとprependオブジェクトを使用して、空白のメッセージボックスに見つかったデバイスの名前を表示するようにしています。もしjit.avcオブジェクトが使用可能なデバイスを見つけられない場合は、エラーメッセージがMaxウィンドウに表示されるでしょう。

もしエラーメッセージが表示されたら、DV機器とコンピューターの間のケーブル接続と、デバイスの電源が入っているかどうかをチェックしてみてください。

・openと書かれたメッセージボックスをクリックしてください。クリックすると、jit.avcは見つかったデバイスとの接続を開始します。

テクニカルノート:jit.avcオブジェクトにopenメッセージを送る前に何かを設定する必要はありません。 jit.qt.grabjit.qt.videooutといった、複数入出力を切り替えられるオブジェクトとは違い、 jit.avcオブジェクトは1つのデバイス(DVコンポーネント)としか通信しないのです。そしてさらにそれは1つのハードウェアしか同時に使用することは出来ません(これはMacOSの仕様です)。


PLAYとWINDグループ(VTRモード)

このチュートリアルのこの部分はあなたがDVカセット(すでにデータが記録されている物)をデバイスに入れて、しかもデバイスがVTRモードになっている事を前提にしています。


・play、stop、pause、rewind、そしてffといったメッセージボックスを使って(一度に一つずつ)FireWire機器がどのように動くか観察してください。機器のボタンを直接押した時と同じように反応するはずです。

ubumenuオブジェクトをクリックして、PLAYグループのメッセージの一部のリストを見てください。これらのメッセージはplayという言葉の後に、PLAYグループの具体的な動作名を表したシンボルを続けるという形で構成されています。p avc_play_commandsサブパッチをダブルクリックして、ubumenuのそれぞれの項目に関する簡単な解説を見てみてください。使用できる全てのメッセージのリストはオブジェクトリファレンスのjit.avcオブジェクトの項目の所で見ることが出来ます。ubumenuを使用していくつかのメッセージをjit.avcオブジェクトに送信してください。そしてそれらの効果を確認してください。

・現在のテープの時間を確認するために、gettimeメッセージボックスをクリックしてください。gettimeメッセージを受信すると、jit.avcオブジェクトは現在の時間を、timeというシンボルに続けて4つの整数が続くリストの形でアウトレットから送信します。このパッチでは、routeunpackオブジェクトを使用してそれらの整数の値を一番下のナンバーボックスに表示しています。ナンバーボックスの値はそれぞれ、時、分、秒、フレーム数を示しています。

・closeと書かれたメッセージボックスをクリックしてjit.avcオブジェクトとDVデバイスの間の接続を閉じてください。

お時間はありますか?

下のパッチはgettimeメッセージを利用した例です。この仕組みでは接続されたDVデバイスを読み出しているテープの最初の一分間を再生、その後逆再生をして、それを繰り返します。例えばこのようなパッチをビデオインスタレーションの自動化に使えるかもしれません。


jit.avcを用いたDVトランスポートの自動化

・いま機材の中に入っているDVカセットが 、最低でも1分は記録されている状態である事を確認してください。そうなっていない場合、このパッチは正常に動きません。このパッチにエラーチェックの機能を追加するのは、やる気のある方には良い練習になるでしょう。

・openと書かれたメッセージボックスをクリックしてjit.avcオブジェクトと使用しているデバイスの間の接続を開いてください。

metroオブジェクトの上にあるトグルボックスをクリックしてください。クリックすると2つの事が起こります:triggerオブジェクトがデバイスにrewindメッセージを送信し、metroがオンになってgettime メッセージが100ms毎にjit.avcに送信されます。

・このパッチではrouteオブジェクトを使用して、jit.avcオブジェクトが返してきたメッセージ(time [hour] [minute] [second][frame])を画面一番上のunpackオブジェクトに送信しています。個々の時間の値はリストからそれぞれ整数の値へと分けられ、乗算、加算の過程を経て、現在の時間が示しているフレーム数を求めています。

実際には私達の計算したフレーム数はやや不正確です。DVではそのフレーム数は1秒間に30ではなく29.97なのです。単純にするために今回は切り上げた値を使用しました。このエクササイズでの使用に限っては、このくらいの計算の精度でも十分です。

・次に、selectオブジェクトを使用して、フレーム数が0か18122115になったかどうかをチェックしています。何故でしょう?DV機器がタイムコードを見つけられないとき(テープが最初まで逆再生をして止まってしまったとき等に起こります)、DV機器は現在の時間のタイムコードとして、0 0 0 0か、165 165 165 165の値を伝えてきます。どちらの値を伝えてくるかは、そのデバイスのモデルによります。そして、(0 * 10800) + (0 * 1800) + (0 * 30) + 0 = 0か、(165 * 10800) + (165 * 1800) + (165 * 30) + 165 = 1812215となるので、テープが逆再生が終わったのをチェック出来るようにこれらの数値を使っています。フレーム数が0か1812215になった場合は、playメッセージボックスにbangが送信されて、再生がスタートします。

jit.avcオブジェクトではgettrasportというメッセージを使用してデバイスのトランスポートの状態を特定の数値で正確に知ることができます。上記の事をするのにこの方法を使うこともあります。上記よりもやや正確で優れた方法です。gettransportについてのさらに詳しい情報は、オブジェクトリファレンスのjit.avcオブジェクトの項目か、ヘルプファイルを参照してください。

・フレーム数が0か1812215になっていない時は逆再生か再生が行われています。ここで、おおよそ1分、もしくは1800フレーム(60秒*30フレーム)後にきちんと再生が止まるかどうかの確認をしましょう。フレーム数1800に対して、ここでは> 1800オブジェクトを使用して検出を行っています。このオブジェクトが1を送信すると、sel 1オブジェクトはrewindメッセージボックスにbangを送信します。そして再び全てのプロセスを繰り返します。ここで行われているのはこれだけです。

・確認できたらトグルボックスをオフにしてください。トグルボックスをオフにすると、metroもオフになり、最後に巻き戻して終わるためにrewindメッセージを最後にDVデバイスに送ります。closeメッセージボックスをクリックしてjit.avcオブジェクトと使用しているデバイスとの接続を閉じてください。

FireWireデバイスによってはtimeというメッセージが使えるものもあります。これを使うと、デバイスに入っているテープを指定した場所まで送ります(場所の指定は上述した4つの整数で行います)。一般的にDVカメラはこのメッセージを使用することができません。jit.avcオブジェクトのヘルプパッチの、Maxから自動でテープを送る例を参照してください。

RECORDグループ

DVカメラの使用には2つのモードがあります:VTRモードとカメラモードです。VTRモードはテープの再生と、カメラを使用しない(ライン入力からの)録画が出来ます。カメラモードはカメラを使用した録画をすることに使います。VTRモードでは全てのPLAYグループとWINDグループのコマンド、さらにRECORDグループのコマンドも使用する事が出来ます。カメラモードで使用できるのはRECORDグループのコマンドだけです(レコーディングの最中に巻き戻しは出来ないでしょう)。チュートリアルのこの節では両方のモードを使用することになります。

RECORDグループには2つの主要なメッセージがあります:recordとrecpauseです。recordメッセージは録画を開始します。recpauseメッセージは録画を一時停止します。


jit.avcオブジェクトを使ったコマ落とし

jit.avcオブジェクトを使ってコマ落とし録画をするのには、この小さくシンプルなパッチの内容で充分です。このパッチでは、30秒毎に1秒間録画をするようになっています。それでは見ていきましょう。

・openと書かれたメッセージボックスをクリックしてjit.abcと使用しているDVデバイスの接続を開始してください。

・実際に試す前に、このパッチで具体的に何をしているのかを見てみます。1秒ごとにmetroオブジェクトからcounterオブジェクトに対してbangメッセージが送信されます。counterが0を出力すると、sel 0オブジェクトがbangメッセージを送信します。bangメッセージはまずrecordメッセージに、その次にdelayオブジェクトに受信されます。指定されたディレイ時間の後、(ここでは1000msです)recpauseメッセージがjit.avcオブジェクトに送られます。2つのナンバーボックスを操作してcounterオブジェクトとdelay オブジェクトに指定した値を変更する事が出来ます。

・使用しているDVデバイスで正常に入力が出来ることを確認してください(カメラからの入力とラインからの入力のどちらもです)。確認したら、metroオブジェクトの上のトグルボックスをオンにして、数分の間使用しているDVデバイスを見ていてください。こんなに簡単にコマ落とし映像が作れるのです!

・終了したらトグルボックスをオフにし、closeメッセージボックスをクリックしてjit.avcと使用しているDVデバイスの接続を閉じてください。


まとめ

jit.avcオブジェクトを使用すると、DVカメラやDVデッキの様なFireWireDVデバイスを、Maxのインターフェースからコントロールしたり自動化したりする事が出来ます。このオブジェクトはWIND、PLAY 、そしてRECORDグループのコマンドを全て使用することが出来ます。