March 04, 2006

Flash+Max/MSP:Flashserver

Written by noriko matsumoto | Flash , Max+Others

Flash+Maxについて、以前のワークショップのメモ程度にしか書いていなかったので久々にflashserverオブジェクトについてまとめてみました。

flashserverとはMaxパッチとFlashコンテンツ(swf)間でXMLソケット通信を行う
オブジェクトで、数値やメッセージをFlash←→Max間で双方向のやり取りをすることができます。
Flash +Maxの方法としては、FCSを使う。又は、PHPを使うとかいろいろありますが、遠隔地のパソコンを動かすのではなく、ちょっと隣のMacのMaxパッチを手元のマシンのswfで動かすとかいう場合は、特にサーバーたてる必要ないためflashserverがおすすめです。
必要なもの
ーーーーーーーーーーーーーーーーーーーー
flashserver オブジェクト 作者Olaf Matthesさん
http://www.nullmedium.de/dev/flashserver/
Flash5以上
 マクロメディアには30日体験版のFlash8がおいてありますのでひとまずこれで(機能はかわりません)
Maxパッチを走らせるマシンのIPを知る
 今回はネットワーク環境設定でMaxを動かす側を10.0.0.1と手入力しました。
  MaxとFlashを同じマシンで動かすのであればIPアドレスは必要なしです。
 それ以外は、LANでマシンとマシンを直接つないでしまうかAirMacカード搭載であれば
 ネットワークを作成でAirのローカルネットワークを作るなどで対応できます。
Max/MSP
ーーーーーーーーーーーーーーーーーーーー
ダウンロードするバーションですが,1.0が安定しています。原因は調べてないのですが
1.1で動かない場合がありました。

ダウンロードしたら、エクスターナルトがヘルプパッチがありますのでさくさくと、Maxのエクスターナルフォルダとヘルプパッチフォルダにそれぞれ入れてしまいましょう。

サンプルのFlashファイルもあるのですが、かなり親切にたくさんの機能を作ってくれている
ので逆に複雑かも知れません。ので今回はFlashからMaxにメッセージを送る機能のみの基本的なアクションスクリプトで。

flashserver.jpg

[このパッチにFlashからメッセージを送る方法]


Flashserver以下の数字は、Flashとの連携で使用するポート番号です。
(必ずFlashに書くアクションスクリプトで設定するポートとあわせること)
FlashからMaxへメッセージを送るのに必要なアクションスクリプトをFlashに書いていきます。
事前準備:ステージに"bt"というボタンインスタンスを配置しインスタンス名を"bt"にする。
(Flashのはじめのフレームに記述するフレームアクション)
---------------------------------------------------------------------------------
    stop();
      server = "10.0.0.1";
    port = 31337;
    flashtomax = new XMLSocket();
    flashtomax.connect(server, port);
    flashtomax.onConnect = onPDconnect;
    function okuru (symbol, value) {
    okurude = symbol + " " + value + ";"
    flashtomax.send(okurude);
    }
    bt.onPress=function()
    {okuru("vol",2);}

---------------------------------------------------------------------------------
これでMaxパッチを先に開いておいてFlashをプレビュー。でつながります。
swfの"bt"インスタンスをクリックするとMaxウィンドウに2が出ると思います。

[アクションスクリプトの解説]


    server = "10.0.0.1";
    //通信したいMaxの動いているマシンのIP;MaxとFlashが同じマシンで動かす場合は      localhostです
    port = 31337;
    //ポート 番号はかえても問題ないですが既にそのポートを別のアプリケーションが使用している場合もあります。ちなみに255番はiChatが使用してます。
    //そしてこれはMaxパッチのflashserverのポート指定と必ず同じにしてください。
    flashtomax = new XMLSocket();
    //xmlソケットを作る。ここではxmlソケット名「flashtomax 」としました。
    flashtomax.connect(server, port);
    //通信したいマシンとつなげるための命令connectです。
    xmlソケット名.connect(サーバーのIPアドレス,ポート)でxmlソケット通信を開始します。
    //数値やメッセージを送る関数 関数名"okuru"にしました。
    function okuru (value) {
    okurude = value + ";"
    //送るメッセージを作る
    flashtomax.send(okurude);
    //xmlソケットにokurudeを流す命令
    }
    //事前準備:デスクトップにbtというボタンインスタンスを配置しインスタンス名をbtにする。
    //btが押されたときの命令
    bt.onPress=function()
    { okuru(2);
    //関数okuruにvalue =2を引き渡す&okuruを実行
    /*この場合okurudeで2;というメッセージに処理され、そのメッセージがflashtomaxというxmlソケットにのってMaxパッチに引き渡されます。Max上では2のみになってprintされます。
    value + ";"の";"は送るときどうしても必要なようです。ないと送れませんでした。*/
    }

------------------------------------------------------------------------------------------------------------
Flash側がMaxパッチ動いているマシンのIPの指定、送るべきポートの指定、xmlソケットの生成など設定を行いMax側はその指定されたポートをあけて待つだけという流れでFlashから受け取ったメッセージはFlashserverの第一アウトレットから出力されます。
ただしこのFlashserverパッチの起動時の注意ですが
Flashswfで先にxmlソケットを開いた状態から、同じポートのMaxパッチを立ち上げるとポートがぶつかりうまく作動しません。
MaxのprintメッセージにMac Osx errorと出ます。
(Flashの1フレーム目でnew XMLSocket();命令を書いて、loadの状態でxmlをつないでいる場合によく出ます。)
この場合は一度Maxを完全に終了し、swfも落として、Maxから立ち上げるとerrorは解除されます。
Flashのボタンなどにnew XMLSocket()命令をつけている場合は問題は出ないです。

また最近のswfはセキュリティー設定がありますので、上記のスクリプトでswfのみ立ち上げると「潜在的に危険な動作〜」とのメッセージがでます。
http://www.macromedia.com/go/settmgr_locsecy_ja_author
でセキュリティのセッティングを行う必要があります。

また1つのFlashserverオブジェクトをFlashコンテンツの2つで使いたい場合は、片方が既にxmlソケットを結んでいるためそれを解除しないと2つ目のFlashコンテンツは通信ができません。
その場合、必要な動作が終了した場合に次のフレームに飛ばしxmlソケットのクローズド命令xmlソケット名.close();をつけてるなどで対応できます。
(そのかわり、動作前に毎回xmlソケットを通信し直す必要が出てしまうのですが)

基本的にFlashは外のドメインのxmlを読み込まないため、FlashserverコンテンツでswfをWebサーバーにおいて使用や外部同士のネットワークでの使用(自宅のFlashから、別の場所のMaxパッチを動かすとか)はあまりおすすめできませんでした。

という感じでFlashserver
Flash単体ではできない部分が多いのでローカルのネットワークの中では
(HDの画像をアップするとか、同時発音100音を鳴らすとか)い
ろいろ便利ですし、Flashのインターフェースの滑らかさも取り入れられて、楽しいですね。

検証はMacOs10.4 Flash8 Max/MSP 4.5です。
Olaf Matthesさんに感謝。

Designing Interactions
Bill Moggridge
Mit Pr (2006/10/30)
売り上げランキング: 9240

関連記事




次の記事

Mar 08, 06
Written by Masaru Tabei | info
ただいまめちゃくちゃテンヤワンヤなマサルです。こんばんは。 なんでテンヤワンヤかというと、IAMASが横浜で展覧会を行い、そこに拙作『息吹...

前の記事

Feb 10, 06
 OpenSoundControl(以下OSC)は、アプリケーション間、ハードウェア間をUDP/IP通信でコミュニケーションするためのプロトコルです。 ....