/**/

チュートリアル 38:
基本的なパフォーマンス設定

 この章では、ライブパフォーマンス用のJitterパッチの設定のための様々なステップを、一通りやってみることにします。その中で、フルスクリーン出力として2つめのビデオモニタを使用することについて考察します。

・Jitter tutorialsフォルダの中にあるチュートリアルパッチ、38jPerformanceSetup.patを開いて下さい。

 これまで見てきたほとんどのパッチでは、ビデオデータの表示に jit.pwindow を使っていました。このオブジェクトは、パッチの内部でビデオを見るためには非常に有用ですが、ライブパフォーマンス用としては(あなたが聴衆に対してパッチを同時に見せたい場合を除いて)理想的ではありません。このような場合には、 jit.window オブジェクト(ずっと以前に、「チュートリアル1:QuickTime ムービーの再生」で見たことがあるのを覚えているでしょう)を使います。

read dishes.mov と書かれたメッセージボックス をクリックし、Start Movieと表示された toggle をオンにして、ムービーの再生を開始して下さい。jit.window オブジェクトのウィンドウ内でムービーが再生されているのがわかると思います。

jit.window オブジェクトの中にタイプされている @noaccel 1 というアトリビュートは何を意味しているのでしょうか?これは、オブジェクトに対して OpenGL アクセラレーションを使用不可にしたいということを告げるものです。このチュートリアルの目的のために、私たちは、あえて jit.winndow が持ついくつかの高度な機能(特に、ビデオデータの見え方や全体のスピードを改善するために、Jitter のOpenGL サポートを使用する機能)を無視することにします。しかし、これらの機能に関しては、チュートリアルの中の後の章で述べますので、心配にはおよびません。

それでは、jit.windowオブジェクトが持つ機能をいくつか見ていきましょう。マウスによるウィンドウの移動やサイズ変更(ウィンドウの右下隅をクリックして、手動でサイズを変更してみましょう)だけでなく、オブジェクトにメッセージを送ることによって、ウィンドウの移動やサイズ変更をはじめ、ウィンドウのボーダー(境界線)を非表示にすること、他の全てのウィンドウの上にフロート状態にすること、そして、ウィンドウをスクリーン全体に表示(フルスクリーン表示)させることができます。


マウスによる jit.window オブジェクトのウィンドウのサイズ変更

size 160 120 と書かれたメッセージボックスをクリックし、何が起こるかを観察して下さい。jit.pwindow オブジェクトと同様、jit.window オブジェクトは、size 160 12 0というメッセージを受け取ると、そのウィンドウサイズに合うように入力されるビデオを自動的にスケーリングします。size 320 240 と書かれたメッセージボックスをクリックすると、オリジナルのサイズに戻ります。

pos 300 400 と書かれたメッセージボックスをクリックし、何が起こるかを観察して下さい。ウィンドウに対して pos (position - 位置) メッセージの後に座標値を続けたものを送るだけで、ウィンドウをスクリーン上の有効な任意の位置へ移動させることができます。私たちは、自動的にウィンドウを配置するパッチを作るために、この機能を少しだけ利用します。pos 800 100と書かれたメッセージボックスをクリックして、ウィンドウをオリジナルの位置に戻して下さい。

・Border On/Off と表示された toggle をオフにして、何が起こるかを観察して下さい。ウィンドウのタイトルバーと(ウィンドウの)ボーダーが消えてしまったはずです。toggle をオンにして、ボーダーをもとに戻しましょう。

・Float On/Off と表示された toggle をオンにして、何が起こるかを観察して下さい。フローティングウィンドウが、すべてのフロートしていないウィンドウの上に「浮かんで」、(他のフローティングウィンドウがその上に来ない限り)他のウィンドウの背面に送ることができなくなります。ウィンドウをフロートさせる機能は、多くのウィンドウを持つような複雑なパッチの場合でも、常にビデオデータが確実に見えるようにするための助けになります。toggle をオフにして、このウィンドウのフロート状態を解除して下さい。

・最後に、キーボードの [ESC](エスケープ)キーを押して、ウィンドウが自動的にプライマリモニタのスクリーン全体に表示される様子を見て下さい。もう一度[ESC]キーを押して、ウィンドウをもとのサイズに戻して下さい。

パッチの中をちょっと覗いてみると、この最後のトリックがどのように働いているかがよくわかるでしょう。ここでは、Maxの key オブジェクトと select オブジェクトを組み合わせることによって、[ESC]キー(キーコード27)が押されるのを感知するというシンプルな方法を用いています。キーが押されると、bangselect オブジェクトか ら toggle に送られ、toggle の状態は(bang を受け取る前の状態によって) 1 なら 0 に、 0 なら 1 に変わります。この値が fullscreen $1 と表示されたメッセージボックスに送られることにより、fullscreen 1 、あるいは fullscreen 0 というメッセージが jit.window オブジェクトに送られます。

このメッセージをキーに関連づけることは、とりわけ賢明な方法です。ひとたびウィンドウがフルスクリーン表示されてしまうと、パッチの中でこれを元に戻すのは時としてやっかいなことになるからです。ちなみに、jit.window オブジェクトには fsmenubar という重宝なアトリビュートがあります。これはオブジェクトがフルスクリーンモードの場合にシステムメニューバーを隠すかどうかを指定するものです。デフォルトでは fsmenubar アトリビュートは 0 にセットされていますが、これはフルスクリーンモードでもメニューバーがそのまま表示されるようになっています。

訳注:fsmenubarはデフォルト値は1で、fsmemubar 1 の場合にメニューバーを残し、fsmenubar 0 の場合にメニューバーを非表示にするようです。


[ESC]キーによって jit.window オブジェクトのフルスクリーン状態をトグルします

ディスプレイ領域のカバー

ほとんどの場合、パッチを1つのスクリーンに表示しながら、もうひとつのスクリーンに出力したものを見ることを可能にしたいと思うでしょう。jit.window オブジェクトはウィンドウをコンピュータに接続されたどのようなディスプレイ(またはビデオプロジェクタのような表示装置)にでも表示させることができます。

あなたのコンピュータに、追加のディスプレイが拡張設定(これは、お互いのディスプレイがミラーリングされていないという意味です)で接続されていれば、それはそのまま大きなディスプレイ領域を持っているということになります。ウィンドウの2番目のスクリーンへの移動は、単に適切な座標がわかっているということに尽きます。


2−モニタシステム画面の座標の考え方

もちろん、2番目のモニタがどこに配置されているかを把握し、ちょっとした退屈な計算をすることが必要になります。幸運なことに、Jitterに含まれている jit.displaysオブジェクトはそれらをすべて計算することが可能です。


jit.displays オブジェクトの動作

jit.displays オブジェクトを使って、接続されたモニタの数と座標を列挙させることが簡単にできます。count メッセージを送ると、オブジェクトの左アウトレットから count という語の後に接続されたモニタの数が追加されて出力されます。このパッチでは、複数のモニタが接続されているかどうかを確認するために > (より大きい)オブジェクトを使ってテストしています。複数のモニタが接続されている場合、メッセージ coords 1jit.displays オブジェクトに送られ、モニタ 1の座標を出力するよう要請します。(モニタに与えられる数は 0 からスタートするため、プライマリディスプレイは通常モニタ0になります)

count と表示されたメッセージボックス をクリックして下さい。コンピュータに2台目のモニタが接続されている場合には、jit.windowオブジェクトのウィンドウがそこに現れるはずです。2番目のディスプレイの左上の座標値を、簡単な計算式(ここでは、メニューバーがあった場合にそれを確実に避けられるよう各座標値に50ピクセルを加えています)にあてはめ、その結果を pos メッセージとして jit.window オブジェクトに送ることによって、ウィンドウをその場所に置くことが可能になっています。

・もう一度 [ESC] キーを押して下さい。ウィンドウはフルスクリーンモードになるはずですが、ここでは2番目のディスプレイに表示されます。jit.window オブジェクトは、フルスクリーンモードに移る前に自分自身がどのディスプレイ上にあるかを感知し、確実にスクリーン領域全体をカバーすることができるようにします。

・もう一度 [ESC] キーを押して、フルスクリーンモードを無効にして下さい。

当然のことながら、jit.displays オブジェクトは3つ以上ののディスプレイで構成されるシステムにおいても動作します。

あなたのパフォーマンス用セットアップの一部として、パッチのこの部分に手を加えたものを取っておきたいと思うことは往々にしてあると思います。私たちは、コンピュータに違った種類のデバイスが接続されるような場合、そのつど2番目(あるいは3番目)のディスプレイのセッティングは必ずしも同じではないということに注目しました。jit.displays オブジェクトを使うことによって、自動的に接続されたハードウェアの正確な位置を決定し、出力用ウィンドウを移動させることができますが、これは、新しい会場で、あるいはなじみの薄い機材を用いて仕事をする場合の困難や心配のいくつかを取り除くことにつながります。

パフォーマンスのためのちょっとしたヒント

jit.window オブジェクトについてマスターしたところで、jit.pwindow について再び考えてみましょう。このチュートリアルの目的は、Jitterのパフォーマンスを向上させるための情報や裏技を提供するためのものではありませんが、jit.pwindow オブジェクトは、しばしば、ライブパフォーマンスのセッティングにおいて小さなモニタとして使用されるので、これが再生スピードに与える影響についてちょっと見てみることは決して無駄ではないでしょう。

jit.pwindow と表示された matrixctrl オブジェクトをクリックして、ビデオデータを jit.pwindow オブジェクトに送って下さい。ビデオが jit.window オブジェクトのウィンドウと jit.pwindow オブジェクトの両方に表示されると思います。jit.pwindow オブジェクトを有効にした場合と無効にした場合のフレームレート(jit.fpsguiオブジェクトによって表示されています)を比較してみて下さい。私たちのコンピュータでは、jit.pwindow を無効にした場合、毎秒300前後のフレームを、有効にした場合には毎秒およそ110フレームを得ることができました 。jit.pwindow オブジェクトを有効にし、 jit.window オブジェクトをオフにすると、毎秒260前後のフレームを得ることができました。あなたのコンピュータでの結果は、コンピュータのオペレーティングシステムやハードウェアによって大きく影響されることと思います。

・パッチのロックをはずして、jit.pwindow オブジェクトのインスペクタを開いてみて下さい。(Macintoshでは、オブジェクトを選択して[Command] + I を、Windowsでは、[Ctrl]+I を押します。どちらのプラットフォームの場合でも、オブジェクトを選択して、Object メニューから Get Info... を選ぶことによっても表示することができます。)


jit.pwindow オブジェクトのインスペクタ

jit.pwindow のインスペクタの中の Use Onscreen と表示されたチェックボックスがわかるでしょうか?このチェックをはずした状態で2つのウィンドウをアクティブにし、フレームレートを比較してみて下さい。私たちのシステムでは、毎秒160前後のフレームを得ることができるようになりました。ほとんど50%近く早くなったことになります。表示されるビデオより小さいjit.pwindowオブジェクトを使用する場合(ここでは、もとのビデオが320X240であるのに対し、jit.pwindowは 80X60 です)は常にオンスクリーンモードをオフにする必要があります。これはあなたのパッチのパフォーマンス上で可能な最高のスピードを得るための簡単な法則です。

オンスクリーンとオフスクリーンは異なった描画アルゴリズムを使って動作します。データが直接ディスプレイに書き込まれるものをオンスクリーンモードというのに対し、オフスクリーンモードではデータはまずオフスクリーンバッファに書き込まれ、それをディスプレイにコピーします。オンスクリーンモードを使用したアルゴリズムはダウンサンプリングを行わないため、パフォーマンスが良いとは言えません。

jit.pwindow オブジェクトのインスペクタにある Use onscreen 設定はパッチと一緒に保存されるため、指定する必要があるのは一回だけです。これと同じように、オンスクリーンアトリビュートの設定を、Max から直接メッセージを用いて指定することもできます。

パッチのパフォーマンスにおいて jit.pwindow オブジェクトの影響を減らす他の方法として、描画されるデータ量を減らすことが挙げられます。このチュートリアルでは紹介できませんが、Max の speedlimqlim オブジェクトはこの目的にとって理想的なものです。(speedlim オブジェクトについては、Max チュートリアルの16章で述べられています。

まとめ

このチュートリアルでは、パフォーマンス環境における、典型的な困難を克服するための2、3の方法について学びました。それは、jit.window の外観の設定、フルスクリーンモード、jit.displays オブジェクトを利用した、コンピュータに追加接続されたディスプレイの感知や、自動的な jit.window オブジェクトのウィンドウ位置の設定、そしてjit.pwindow オブジェクトのオンスクリーン描画モードの管理による、パッチ内スクリーンのパフォーマンスの向上、といった内容でした。