MAX on the Net

             京都精華大学 芸術学部 映像分野 平野砂峰旅

0:概要
近年、MAX/MSP以外にもPureData、jMAXといった異母兄弟的なソフトウエア、またImage/IneやKeystrokeといったリアルタイムイメージプロセッシングソフトウエアまたインターネットのコンテンツ製作に特化したFLASHなどMAXと一緒に使うとさぞ楽しそうなソフトウエアが増えてきた。ここでは、これらのアプリケーション間通信をLAN,インターネットを介して行う方法について概説していく。

1:はじめに
この章ではまず、MAXとさまざまなソフトウエアとのネットワークを介した通信の一覧をあげた上で、それらの概略を述べる。次章からそれぞれのソフトウエアとMAXとのソフトウエア間通信について詳細を説明していく。

Software
MAX object
Protocol
misc
MAX otudp,tcpClient,tcpServer UDP/IP,TCP/IP  
Image/ine ImUdp UDP/IP MAX->Image/ineの一方向のみの接続
Keystroke keystroke TCP/IP  
PD(Pure Data) pdnetsend,pdnetrecieve UDP/IP,TCP/IP  
FLASH otudp,osccontrol TCP/IP,UDP/IP floscというGatewayソフトを介して接続
[Table.1:Conectivity with MAX]

Image/ineとMAXの接続に関しては、Image/ineに付属のImUdpというMAX オブジェクトを使用することで可能になる、同様にKeyStrokeも付属のKeystroke オブジェクトで可能である。PDとMAX/MSPの接続に関しては、いくつかの方法があるが、ここではpdsend,pdrecieveというMAX objectを利用する方法をとりあげる。このリサーチの中では異質なソフトであるがINTERNETのコンテンツ制作で多く利用されているFLASHも取り上げてみた。FLASHとともにDirectorとの組み合わせもあるがWeb コンテンツの再生環境としてはFLASHの方が普及していること、またDirectorはXTRAと呼ばれる外部プログラムと組み合わせることでさまざまな機能拡張が可能であるが、FLASHにはそういったものが見当たらないことでMAXとの通信でFLASHの拡張性の少なさを補えるであろう。これらの理由からFLASHとMAXを取り上げる。MAXとFLASHの場合は、上記のfloscというGatewayソフトウエアを介して、otudp,OpenSoundControlといった MAXオブジェクトを利用して通信を行うことが可能になる。

2:MAXとMAX
まずは、MAX同士の通信を考えよう。これは、できて当然のようにも思われるが、MIDIを介しては以前から可能であったがLANやインターネットを通じての通信は、市販のMAX/MSPに付属するobjectだけでは不可能である。PDでは、当初からnetsend,netrecieveといったobjectが含まれているが、MAXの場合は新たにobjectを追加する必要がある。現在筆者が把握しているobjectにはotudpとTCP/IPがある。otudpに関しては、DSPSS2000(*1)で既に解説されているので、ここではtcpClient,tcpServerに関して解説を加える。otudpはそのオブジェクト名から類推できるように、UDP/IPによる通信であったが、tcpClient,tcpServerオブジェクトはTCP/IPを使用した通信用のobjectである。TCPはUDPと比較して信頼性が高いが、冗長度が高くなるという短所もある。tcpClient,tcpServerオブジェクトは現在http://www.opendragon.com/Pages/MaxObjects.shtmlからダウンロード可能なTCP/IPオブジェクト群の一部である。MAX同士でメッセージを交換するサンプルパッチをFig.2-1,Fig.2-2に示す。


[Fig. 2-1:MAX patch for tcpClient]


[Fig. 2-2:MAX patch for tcpServer]


3:MAXとImage/ine

Image/ine自体に関しては、DSPSS1999,DSPSS2000で説明があったのでここでは省略する。蛇足であるが2002年6月現在Image/ineは、steimのサイトから独立しhttp://www.image-ine.org/に移っておりソフトウエアの作者であTomDemeyerがソフトウエアの維持管理を行っていく様子である。また、steimのサイトにもimage-ineのサイトにもソフトウエアの価格に関する記述がなく著者がダウンロードしてインストールしたところパスワードの要求もなく動作した。
  MAXとImage/ineの通信を行うにはImage/ineに付属のImUdpをMAXのexternal folderにコピーする。次にMAXからImUdpオブジェクトを利用してImage/ineにデータを送信することによって行われる。MAXからリモートでImage/ineのMappingパラメータの全てを操作できる。またMappingパラメータをメモリーに保存したり以前保存したメモリーを呼び出す(実行する)ことも可能である。しかし逆にImage/ineからMAXにデータを送信することは、現在のところ不可能である。下記に、Image/ineの設定の例Fig.3-1,Fig.3-2とMAXのサンプルパッチFig.3-3を示す。Image/ineの設定は、以下の手順で行う。まず、Windows->Mappings ウインドウを表示する。次にMappings ウインドウの右上にあるxの文字を何度かクリックしてPlugin Mappingsの画面に変える。そこでNetControlの項目を探し、そこをoptionクリックする。そうするとTCP/UDP Setup ウインドウが現れるので、Enable UDP Controlをチェックしておく。ポート番号(通常は1000以上の値)を設定する。また、Mappings WindowのControlの項目の中のNetControlを選びUDP Remoteにする。またChan項目はMAXのImUDPオブジェクトの第2インレットのチャンネル設定と対応している。


[Fig.3-1:Image/ine TCP/UDP setup]


[Fig.3-2:Image/ine Parameter contol seeting]


[Fig.3-3:Max path for control Image/ine]

4:MAXとKeystroke
Keystrokeは、マルチユーザーで画像、サウンド、テキストを同時にリアルタイムに取り扱うことのできるクロスメディアシンセサイザーアプリケーションである。Keystrokeは、MacOS9,MacOSX用が開発中でβバージョンの段階であるが、開発当初からマルチユーザーでのネットワークを介したメディアパフォーマンスを目指して設計されている。MIDIを利用して、またはネットワークを介してのP2Pでのコラボレーションだけではなくサーバーを介して数名(現在の仕様では5名まで)でのセッションが可能である。Keystrokeはモジュールと呼ばれる単独の機能(MAXのオブジェクトに相当する)を実現するための70種類程度の部品(モジュール)を、必要に応じて組み合わせて利用する。MAXとの通信においては、KeyStroke側にはTCPclientモジュールを、MAX側にはKeystrokeに付属のKeystrokeオブジェクトを使用したパッチの間で行われる。以下に、サンプルのMAXパッチとKeystrokeファイルの例を示す。Keystrokeのパラメータの値は、全て内部で正規化されているので最大値、最小値を意識することはほとんどないが、MAXの場合はその値の範囲を入力(inlet)は第2引数で、出力(outlet)は第3引数で具体的に指定する必要がある。また、Keystrokeの場合ひとつのTCPclientモジュールは、入出力、各8個しかもたない。また、ポート番号も他のモジュールと重複することはできないため多数のパラメータをコントロールが必要になる場合は複数のポート番号を割り当てる必要がある。これは、MAXのオブジェクトも同様でひとつのオブジェクトあたり各8個の入出力となっていて、同じIPアドレスで重複したポート番号を割り当てることはできない。Fig.4-1にKeystrokeのパッチ例を、Fig.4-2にMAXのパッチ例を示す。

[Fig.4-1:Keystroke Patch]


[Fig. 4-2:MAX patch for Keystroke]

5:MAXとPD(Pure Data)
PDはもともとnetsend,netrecieveというLANやインターネットを介しての通信用のオブジェクトがあるので、このオブジェクトと通信できるMAXオブジェクトを使用したパッチをMAX側で用意すればよい。その通信用オブジェクトがpdnetsend,pdnetrecieveである。2つのPDオブジェクトは、第1引数がない場合はTCPによる通信で、0以外の正の整数の場合はUDP通信となる。一方MAXオブジェクトのpdnetsend,pdnetrecieveはUDP通信のみに対応しているのでPDオブジェクトのnetsend,netrecieveの第一引数を0以外に設定しなければならない。Fig.5-1にPDパッチを、Fig.5−2にMAXパッチの例を示す。

[Fig.5-1:PD patch for MAX]


[Fig.5-2:MAX patch for PD]

6: MAXとFLASH

Introductionでも述べたが、MAXとFLASHの通信に関しては、これまでの例と異なり相互のプロトコルを変換するゲートウエイの役割をするFLOSCというソフトウエアが必要になる。これは、MAXのotudpが使用しているプロトコルはUDPで、FLASHが通信に使用しているxml socket はTCPを利用しているから、UDPとTCPを変換する役割を果たしている。floscソフトウエアはJavaで記述されていてWindows、Macintosh上で動作するバージョンがソースコードを含めて公開されている。FLASHの場合、xml socketで通信するサーバーはFLASHムービーと同じドメイン名でなければならない。FLASHムービーとMAXを通信させるためには、
1)floscソフトウエアをサーバー上で起動する。
2)otudp,OpenSoundControlオブジェクト(以下OSCオブジェクトと省略)を使ったMAX Patch。
3)xml socket通信を行うaction scriptを含んだflashコンテンツファイル。
が必要となる。
floscをダウンロードして解凍した後、コマンドプロンプトでfloscをダウンロードして解凍したflosc ディレクトリに移動し、そこで
C:\flosc>java Gateway 8000 8001
としてプログラムを起動する。このときの引数 8000は、UDPデータ(MAXパッチのデータ)を送受信するポート番号、8001はTCPデータ(FLASHムービーのデータ)を送受信するポート番号を意味している。
OSCオブジェクトは、送信データをbufferingしてbangメッセージまたはsendメッセージによってデータを出力する。OSCオブジェクト自体はデータをInternetまたはLANに送受信する機能は持たないので出力をotudpオブジェクトを介して利用することになる。
以下にパッチの例を示す。一方FLASHムービーのアクションスクリプトに関しては、ここでは詳しく述べないのでhttp://www.benchun.net/flosc/からFLOSCをダウンロードした際に含まれている、flosc-0.2.flaファイルを参考にして欲しい。またFLASHにおけるXML socketのプログラムに関しては、利用するサーバーソフトウエアは異なるもののhttp://faces.bascule.co.jp/tutorial/が参考になる。Fig.6-1にflosc用のサンプルパッチを示す。

[Fig.6-1:MAX patch for FLASH]

まとめ
ここではMAXを核としていくつかのソフトウエア相互の接続方法を中心に述べてきた。今回解説したソフトウエア以外にもさまざまなソフトウエアがMAXと接続できる。たとえば、最近フリーウエアになったSuperColider、PDと双璧をなすjMAX、昨年transmedialeなどでも受賞しているautoillustrator。しかし、ここでは主にリアルタイムグラフィックソフトウエアを中心にソフトウエアを選択した。映像、音声そのものではなくて、それぞれのソフトのパラメータや操作をリモートコントロールする点に注目している。また、著者の嗜好も含まれている。この文章では、MAXを中心としてその相互接続について説明したが、他の組み合わせもいろいろと可能であろう。特にOSC(Open Sound Control)はソースを公開していることもあり、さまざまなapplicationに対応しているのでアプリケーション間の相互接続に関しても力を発揮するであろう。ここでのさまざまなサンプルパッチはLAN環境で動作を確認したものであるが、IPアドレスをグローバルIPアドレスに書き換えることでインターネットを介した動作も可能である。ただし、Proxy、サーバー、ゲートウエイの設定によっては動作しない場合もある。特に、通常は必要なポート以外は、閉じられているのでネットワーク管理者に使用するポート番号をあけてもらうことも必要になる。この際、異なるソフトウエアがネットワークを介して接続されることによってどのような作品が可能となるかそれは読者の発想力にかかっている。この文章がその助けになれば幸いである。

[参考文献]
1)The Proceedings of DSP SUMMER SCHOOL 2000 p14-17

[参考URL]
MAX TCP/IP: http://www.opendragon.com/Pages/MaxObjects.shtml
Image/ine: http://www.image-ine.org/
Keystroke: http://www.keyworks.org/
Open Sound Control: http://cnmat.cnmat.berkeley.edu/OSC/
FLOSC: http://www.benchun.net/flosc/
FLASH XML socket tutorial: http://faces.bascule.co.jp/tutorial/
Sample Files of this site: http://www.nn.iij4u.or.jp/~shirano/dspss/maxnet/MaxNetJ.sit


Copyright. 2002 by Saburo HIRANO(shirano@nn.iij4u.or.jp) All rights reserved.