Page:  1   2   3  ALL
March 14, 2006

「I/O Board, Module, Unit」でセンサーを使う

 電子部品として売られてるセンサー類のほとんどは、感知した結果を電圧の変化で出力します。
これを、パソコンに入力して利用する場合には、デジタルデータに変換しますが、そのためのハードウェアが必須になります。

 パソコンと繋いで、センサーからの値を利用したい。LEDを光らせたい。モーターを制御したい。など。
マウスとキーボード以外からの入力、音と映像以外での出力などを行いたい様々なケースで、
それぞれの方法に対して、専用のハードウェアを自ら作るという手段をとれる人は、ほとんどいないでしょう。
 I/O Board 又は、I/O Moduleや、I/O Unitと呼ばれるハードウェアは、様々な用途に対応できるように汎用性があり、扱いやすい設計がなされているので、多くの人にとってセンサー類を使うときにとても重宝するのです。

どういうものがあるのか?


自分が把握してるものには、以下のようなものがあります。

"TELEO"は、こういったものの中では、古く有名です。4アナログ、2デジタルの入力、2デジタル、2PWMの出力。複数のTELEOを連結して、より多くの入出力が可能になる。Max/MSPに対応しています。
*PWMは、PulseWidthModulation(パルス幅変調)の略で、デジタルでアナログを表現する方式。どういうことかというと、モーターを手動でON/OFFするのを想像してみてください。ONにしたら、回転数0から、なめらかに最大回転数になる。最大回転数になる前にOFFにしたら、回転数0に向かうが、0になる前にまたONにしたらまた最大値に向かう。そうやって、ある一定量になるように、高速にON/OFFを繰り返すことで、デジタル出力で、なめらかなアナログ量を実現する方式です。

"phidgets"は、用途別に様々なタイプがある。そのなかで基本的なタイプのInterfaceKitは、PWM出力がないが、8アナログ、8デジタル入力、8デジタル出力。数が多い。Max/MSP、Flashに対応している。

最近のものとして、Arduino、Wiring、BlueSenseがあります。
"Arduino"、"Wiring"は、processing向けに作られているようです。細かくは把握してません。

"BlueSense(別名 MaxBoards)"は、ワイアレスで行えるのが特徴です。

 入手するのに、一番手軽なのは、日本に代理店のある"phidgets"です。それ以外は、日本に代理店がないので、本体自体は、そんなに高くはないのですが、輸送料で高くついてしまいます。

GAINER



GAINERs
 "GAINER"は、iamasのPDPプロジェクト内でオープンソースで開発されているI/O Moduleです。現在はMax/MSPとProcessingに対応するためのライブラリが公開されています。
大きな特徴としては、電気回路の設計段階でテスト用に使うブレッドボードに装着して利用するところです。より詳細については、GAINER開発メンバーのハラダくんによる記事を期待してください。

 また、GAINERに興味を持った方は、3月18日(土)ー21日(火)に横浜BankART Studio NYK(旧日本郵船倉庫)にて行われる「SOURCE OF LIFE はじまりの水 - IAMAS in Yokohama」内で、GAINERを使ったワークショップが開催されるので、参加してみてはどうだろう。と、言いたいところですが、すでに、定員数に達してしっまったみたいです。ただ、ワークショップはオープンな感じで行われるようなので、モノは見る事ができると思います。
また別の機会があれば、いち早くお知らせします。

(写真資料提供:Katsuhiko Harada)

続きがあります "「I/O Board, Module, Unit」でセンサーを使う"
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さんに感謝。

続きがあります "Flash+Max/MSP:Flashserver"
February 10, 2006

OpenSoundControlについて

 OpenSoundControl(以下OSC)は、アプリケーション間、ハードウェア間をUDP/IP通信でコミュニケーションするためのプロトコルです。
.
..
 最近では、いろんなケースで見かけるようになり、Lemurというマルチタッチ可能なタッチパネルを備えたコントローラデバイスが、ソフトウェアとの通信にOSCを採用したり、デファクトスタンダードと言えるほど浸透してきています。

 自分自身も、よく使う場面があります。音マシンと映像マシンとの同期をとるためであったり、Flash8以前(Flashでビットマップ処理できないとき)に、jitterでの画像解析の結果をFlashコンテンツに反映させたり、などなど。様々なアプリケーションに実装済みなので、使い何処も様々あるでしょうし、オープンソースなので、自分のソフトウェアにも実装可能です。

 他に変わった使い方としては、mmonoplayer(jit.atari2600オブジェクトの作者)は、オープンソースのNESエミュレータにOSCを実装して、実行中のゲームのカラーパレットをMaxから動的に変更を加えてグラフィックを改ざんするため、エミュレータとMaxの通信にOSCを使用している。
http://mmonoplayer.com/nesvis.html
http://mmonoplayer.com/mmmanip.html

 この例も含め、いろいろなOSCを扱った記事や実例のテーマは、何かが何かをコントロールするような主従関係ものが多いようです。関連するドキュメントがすでに多く存在する上で、改めて、ここでOpenSoundControlについて書くのですから、なにか新しいことでないと意味がないような気になるので、ここで新しいかもしれないことを提案すると、並列処理的なアイデアを加味すると、より幅広い応用ができるのではと思うのです。

processingでこいで Maxでおどる


 例えば、自分の使用頻度高いMax/MSP+Jitterは、大量のオブジェクト同士を物理法則に沿わせて計算させるのが非常に苦手です。Maxでオブジェクト書くのは労力がいりますし、手軽にJavaScriptで書いたとしても満足のできる実行速度が出るとは限りません。
 こういうのはProcessingだとやりやすいです。パフォーマンスも悪くないし、最近ではtraer.physicsという物理エンジンライブラリも登場したので、より迅速に書けます。
http://www.cs.princeton.edu/~traer/physics/

 このライブラリ、ちょっといいなぁと思ったので、MaxとProcessingを同時に走らせ、MaxからのOSC経由でのProcessingへの命令を受けて、計算結果をまたMaxに返すことで、Processingをバックエンドで動く計算マシンのようにして、最小限の労でMax上で、物理法則に基づいた動きを実現してみようと考えた。
 さっそくこのライブラリをダウンロードして、サンプルの"bouncyballs"に、OSC送受信部分を加えて、Max側では、マウスの位置の送信部分と、受信した座標から円を描画する部分を書いた。

右図:Maxからのマウス座標の送信を受けて、Processing側でボールの位置を計算し描画するとともに、Maxに座標データをわたしているので、MaxとProcessingでボールが全く同じに動いている


 3個だけでは効果を実感できないので、任意の個数にMax側から変更できるようにるるために、Processingのコードを書き換え、Max側は速度に応じてボールが明るくなるように変更を加えた。

 Processingのコードはアプリとして書き出した。右上にあるのがそのウィンドウ。描画する必要がないので、最小サイズに。アプリ化は、最近のリビジョンからの機能だが、これはとてもありがたい。例えば、ライブ中にある時間だけこの処理をさせたいとなったとする、アプリ化しておけば、その間だけApplescriptでアプリを自動で立ち上げることができる。

 Maxでは、リストは256までしか保持できないので、最高128個のパーティクルまででしかテストできなかったが、パーティクルそれぞれが訴求力と反発力の伴った運動、安定して30fpsの速度で動作した(PowerBookG4 867Hz メモリ1GB)。他の処理系がまったくないので、激しく処理を切り替えるライブなどでの実用に耐えるかどうかまでは不明だが、シンプルなことであれば、この即効性はとても魅力じゃないでしょうか。

 余談ですが、OSCは2バイト文字に対応してないので、日本語は送受信できません、自分も以前にFlashからMaxに日本語を送ろうとしてはまったのですが、これは、1バイトづつに変換して送ることで解決します。変換時の文字コードがお互いに違うと、化けるので、文字コードの変換も必要になります。

December 03, 2005

Applescript+Automator+Max

Written by noriko matsumoto | Max+Others , Max/MSP+Jitter

『んー、この作業を自動化したい!』とか一日に一回データーをコピーしてほしい、削除したーいなど
が出てくることがありますが、これはMacを使っていると、Applescriptを書くことで作業を簡単にすることができます。

またMaxではTaptools1.5を使うことで、MaxからApplescriptを実行することができ
MaxとMac純正のソフトウェア間の自動連携が可能になります。

しかし、Applescriptは日本語での紹介本なども少なくまた、アプリケーションに対する命令も各アプリケーションによって命令のアトリビュートが違うなどの、取っ付きにくい部分があるかなとおもいます。。。毎回動作を作る、長ーいスクリプトをかくのもなあ〜という感じで。

そこで最近つかっている、短いApplescriptを書いて、MaxからMacの別のアプリやシステムを
動作させる方法を紹介。
indextop20050412.jpg

10.4に表示ついているAutomatorで一連の実行したい内容をつくり、アプリ化します。
それを直接、Maxから呼び出せればいいのですが、
Automatorで書き出したアプリはスクリプト形式ではなく、Maxからは実行できないので、Automatorで作ったアプリを実行するだけの、Applescriptを書きます。

そしてそのApplescriptファイルのみMaxに読み込み実行するパッチを書きます。
それを実行すると自動的に、Automatorのアプリが動き、動作するという方法です
使うオブジェクトはTaptoolsのtap.applescriptです。

tap.applescriptに時間をきめてbangを送るプログラムをつけると、Automatorだけではなかなか
一定の時間による繰り返しはできないので、便利になります。
例〜
Automaterで今日作成されたファイルを削除するワーク
Automaterくんはワークフォローをくむのが簡単ですね〜。
iTunesやSafariにも命令が充実してて、iPod関係はかなり気になりますね。
その後保存;アプリケーション形式で。
aoute2.jpg
Applescriptで書くスクリプト:上記で保存した.appをよびだす。



tell application "@@@.app"
activate
end tell


a.jpg
スクリプトファイルで保存

そのスクリプトファイルをMaxのtap.applescriptで読み出す。
aas.jpg
23時になったら削除!

確かにいろんな方法で上記のようなことができますが、長々とプログラムを書くより、
Automaterを使うのが一番今の所楽!な気がします。
applescricptを使わなくてもAutomaterで書き出したunix実行ファイルをMaxからたたくのもあるかな?
では。
Applescript +Automater+Maxでした。
MSPで曲をユーザーにつくってもらって、自動で一つのiPodに転送したり、夢がひろがりますね、

September 14, 2005

実験:phidgets on Max

手元にphidgetsが戻ったので、Maxでの動作チェック。

続きがあります "実験:phidgets on Max"
Page:  1   2   3  ALL