/**/

チュートリアル 52:
Jitter によるネットワーク

jit.net.send オブジェクトは、非圧縮のマトリックスを、インターネットを経由して他のコンピュータの Max パッチにある jit.net.recv オブジェクトに送信することを可能にしてくれます。

・Jitter Turorials フォルダの中のチュートリアルパッチ、52jNetworkSend と 52jNetworkRecv を開いて下さい。お望みであれば、この2つを別々のコンピュータで開くことも可能です。

jit.net.sendjit.net.recv オブジェクトは、TCP プロトコルを使って通信を行ないます。他のタイプのネットワーク通信プロトコルに関する議論は、このチュートリアルの範囲を超えるものです。しかし、TCP がコネクション型通信プロトコルであるということを覚えておくことは重要です。何らかの送信や受信を行なう前に、2つのオブジェクトはお互いに接続を行なう必要があります。この2つのオブジェクトは、接続状況に何らかの変更が合った場合に、ダンプアウトアウトレットからアーギュメントを伴った connected メッセージを出力して報告します。アーギュメントの値は、接続された場合には 1、接続が解除された場合には 0 になります。


TCPを使ってコンピュータネットワーク越しにJitter マトリックスを送信するパッチ

・接続を構築するために、jit.net.recvjit.net.send オブジェクトは同じポートで「リスン(待ち受け)」をしなければなりません。port アトリビュートにはどのような正の整数値でもセットできますが、小さい値の数値のうちのいくつかは、FTPや web ブラウジング等のような、一般的に使用されるネットワークサービスのために予約されています。1024 より大きく 10000 より小さい範囲のポートはおそらく安全であると思われます。ポートが指定されていない場合、2つのオブジェクトのデフォルトの値は 7474 です。

jit.net.send オブジェクトは、ポートナンバに加え、データを送りたいと思う jit.net.recvオブジェクトを含む Max パッチが実行されているコンピュータの IP アドレスを知っていなければなりません。コンピュータは1つ以上のIP アドレスを持つことが可能です(例えば、ワイヤレスインターフェイスとイーサネットポートは異なるアドレスを持っています)。そして、jit.net.recv オブジェクトは、デフォルトでは、相手の jit.net.send からの接続要求のために、その全てを「リスン(待ち受け)」しています。どのインターフェイスを使用するかを指定することができますが、これは、ip メッセージのアーギュメントとして、希望するインターフェイスのIP アドレスを指定し、この ip メッセージをオブジェクトに送信することによって可能になります。

送信側と受信側のパッチを同じコンピュータで開いた場合、オブジェクトは直ちに接続を構築します。このケースでは、それぞれのパッチの route オブジェクトに接続された toggle ボックスがチェックスされます。デフォルトでは、jit.net.send オブジェクトの ip アトリビュートは 127.0.0.1 にセットされています。これは、ローカル・ループバック・アドレスです。 jit.net.recv オ ブジェクトは、デフォルトで、ローカル・ループバックを含む全てのアドレスをリスニングしています。そのため、2つのパッチが同じコンピュータにある場合、接続が確立するはずです。別のコンピュータでパッチが動作している場合には、mxj net.local オブジェクトを使って、jit.net.send オブジェクトが接続を試みるべき IP アドレスを見つけ出すことができます。IP アドレスの指定は ip アトリビュートで行なうことができますが、その代わりに、 host アトリビュートでホスト名を指定し、jit.net.send がドメインネームサーバ(DNS)を使ってホスト名を IP アドレスに解決するという方法を取ることができるということも覚えておいて下さい。


コンピュータネットワークを介して送られる Jitter マトリックスを受信し、表示するパッチ

オブジェクトがもう一方のオブジェクトと接続できないが、IP アドレスとポートを正しく設定していると確信できる場合、どちらかのコンピュータのソフトウェア・ファイアウォールが選択したポート(このチュートリアルパッチでは 7474)の接続を妨げていないかどうかを確認して下さい。Windows XP が動作しているコンピュータでは、ソフトウェア・ファイアウォールのコントロールはコントロールパネル:Windows ファイアーウォール:詳細タブで見つけることができます。ここで、任意のネットワーク接続をダブルクリックすると、詳細設定ウィンドウが表示され、新しい「サービス」を定義することができます。OS X マシンではソフトウェア・ファイアウォールのコントロールは、システム環境設定:共有:ファイアウォールタブで見つかります。ここで、新規... ボタンをクリックして、オープンするポートを指定できます。2つのコンピュータを1つもしくは複数のルータで接続している場合、そこでパケットを拒絶するフィルタを持っている可能性もあります。

・52mNetworkSend パッチで、qmetro に接続された toggle ボックスをオンにして下さい。

送信側のパッチでは、jit.qt.movie オブジェクトはマトリックスを jit.net.send オブジェクトに送っています。ムービー再生を駆動している qmetro が、ムービーフレームをトリガし、その後、jit.net.send オブジェクトに getlatency メッセージを送っている点に注目して下さい。これによって、ダンプアウトレットから、単方向のレイテンシ(遅れ)予測時間が出力されます。この送信によるレイテンシの予測時間を2つのコンピュータ上のイベントの同期に使うことができます。例えば、予測される時間だけ、ローカルコンピュータによるマトリックスの処理や表示を遅れさせることで、その時点では受信側のコンピュータは、受け取ったマトリックスを処理する準備ができているはずです。

レイテンシは2つの要因によって影響を受けます。それは、2つのコンピュータ間の直接の送信時間、および、送信されるデータの量です。より多くのデータが送信されると、ネットワークを介して全てのデータを送信するためには、より長い時間がかかります。

これに関しては、明らかに、コンピュータのネットワークインターフェイスや全てのルーティングハードウェアのスピードがキーポイントです。送信は、チェインの中の最も弱いリンクと同等の速さでしか行なうことができません。レイテンシの減少のために考えうるテクニックの一つとして、送信マトリックスでの grgbuyvy 圧縮カラースペースの使用があります。このカラースペースに関してはチュートリアル 49 で述べています。

マトリックスの送信に加え、jit.net.send の右インレットに入力される通常の Max メッセージは、接続された jit.net.recv オブジェクトの中央アウトレットから出力されます。メッセージ、およびマトリックスの入力順序は、受信側パッチでも維持されます。この例では、dim changer というパッチャーの中で、ゆっくりと動作する qmetroによって 0.5 秒毎にムービーのサイズが変更されています。この新しいサイズは jit.net.send オブジェクトの右インレットに入力されます。2つの整数値が jit.net.recv オブジェクトの2番目のアウトレットから出力されると、これが sizeメッセージのアーギュメントとして使われ、jit.pwindow オブジェクトのサイズを変更します。

このチュートリアルパッチのマトリックスの型は char ですが、jit.net.sendjit.net.recvは任意の型のマトリックスを扱うことができます。float32 マトリックスを使う例として、jit-examples/audio フォルダの中の、audio-over-network を参照して下さい。

まとめ

jit.net.sendjit.net.recvオブジェクトを使って、非圧縮の Jitter マトリックスを、Max が動作している他のコンピュータに送信することができます。そのためには、2つのマシンが通信するポートを指定し、送信側マシンには、受信側マシンと接続する際に使用する IP アドレスを指定します。