FlashとWiiリモコン

今回の学生クエストは久々のWiiネタで、WiiリモコンをFlashで使いたい、というものでした。Flashはヤメとけば?と即答はしたものの、それじゃあんまりなので(笑〜AIR+Flexという建設的な意見もあり)、以下いくつかの方法を挙げておきます。いずれも単なる知識で、きちんと実証してません。何故ってFlashは持ってないからね(ウソ)。

まず、手前ミソなあたりから、aka.wiiremoteを使うとして、MaxとFlashとの通信を考えれば、次の2つの方法があります。

方法1:jit.qt.movieでswfファイルを読み込んで再生。flash_varメッセージやgetflash_varメッセージを使って、flashの変数を読み書きする。Jitter Tutorialの44番「Flash Interactivity」あたりを参照ね。書き出すFlashのバージョンやQuickTimeの設定に要注意

方法2flosc (Flash OpenSound Control) を介在させて、OSCをプロトコルとしてMaxとFlashを通信させる。Maxではudpsendやudpreceiveを使い、FlashではXMLSocketを使います。floscに付属するサンプルを見れば、なんとかなるでしょう。

Wiiリモコンのデータ・ハンドリングだけなら、専用アプリを使うのが簡単。

方法3OSCulatorからOSCメッセージを送り、floscを経由してFlashで受け取る。方法2のMaxをOSCulatorに置き換えたものね。OSCulatorは次のMIDI送信も可能。

方法4WiiToMidiThe Wiinstrumentを使い、MIDIメッセージをFlashに送る。Flashは標準でMIDIを受け取れる(よね?)。

FlashムービーをWebブラウザで再生するなら、ブラウザ限定プラグインあり。

方法5:Firefoxの拡張プラグインWiiRemoComを用い、JavaScriptでWiiリモコンの状態を取得し、JavaScriptからSetVariable()関数でFlashへデータを送り込む(のかな?)。

どうせなら、Wii本体のインターネット・チャンネルでやれば?ってことも考えられます。

方法6:WiiのWebブラウザ(Opera)は、標準でWiiリモコンの状態をJavaScriptで取得可能。それがwindow.opera.wiiremoteオブジェクトで、このページの後半に情報が載っています。細かなデータは取れないけど、解釈されたデータは使い易くなっています。

他にもありそうですが、面倒なのでこの辺で切り上げます。こんなにイロイロあるのは決定的な解決方法が無いからで、やっぱり馬鹿なんです。いや、手足をもがれた可哀想な立場と言うべきかな。セキュリティ命ですから(笑)。

ともあれ、一番手っ取り早いのは、方法4やOSCulator(下図)あたりでのMIDI送信のような気がします。ただし、MIDIのコントロール・チェンジの場合は、一般に7ビットなので、精度が要求されない用途向きね。

osculator.png

Phone Fingersで指紋ナシ

米Gizmodの記事で知りましたが、Phone Fingersなる製品があるそうです。その記事では茶化してますけど、指にゴム(?)製カバーを付けることで、iPhoneに指紋が残らないよ〜ってことらしいです。25ピースでUS$9.90、お試し版5ピースならUS$3.00、サイズはSmallからExtra Largeまでの4種類。

phone-fingers.jpg

これを常時付けるのは、ラバー・フェチ以外の人には抵抗がありますよね。でも、こいつの先端が尖っているものが欲しいです。先端が尖っていたら、細かなポインティングができますから、少なくとも演奏用に使いたい。どなたか、作ってください(懇願)。

ご存知のように、iPhoneは指(皮膚)でないと操作できないので、爪を尖らせてもダメなんですね。以前のDSPBoxプロジェクトでは、圧力感知型のタッチ・スクリーンを使っていたので、琴のツメ(山田流がオススメ)を削って使っていました。だから、iPhone細密ポインティング用アタッチメントって需要があると思うな〜(ないか?)。

iPhone公式SDKは来年2月

AppleがiPhoneのSDKを来年2月に提供すると発表しました。追伸ながら(笑)iPod touchでも同様となっています。iPhone Human Interface Guidelinesで予見されていたので、ビックリはしませんが、ついに!とうとう!待ってた!という感じです(でも、Leopardには間に合わなかったのでガッカリ)。

2月までかかる理由として、オープンなプラットフォームを提供することと、ウィルスやマルウェアからプラットフォームを守ることとを両立させるために、必要な作業があるからだとしています。

まぁ、それはそうなんでしょうけど、ガチガチのサンドボックスを作られても困るなぁ。あるいは、Nokiaの例を挙げているように、デジタル署名認証になって契約や審査を経なければ公開できない(動作しない)ってことになるのかも。「an advanced system」がどうなるか、お手並み拝見ですね。

iphone-sdk-announcement.gif

ともあれ、私は2月までiPhone関係の開発を中断します(笑)。

【追記】ちゃんと伏線がありました。コレですね。特に2番目の「署名入りアプリケーション」はピタリと照準が合ってます。

Leopardは10/26発売

Mac OS X v10.5 “Leopard”の予約注文の受付が始まりました。今注文すれば10/26にお届け〜だそうです。グラフィッカー垂涎、待ちに待ったCore Animation搭載ですよ。Quartz Composerも正式にOSCに対応するから、aka.iphoneでも使えます。iPhone SDKがどうなるかも大注目。私も先ほどワンクリックしました(笑)。

leopard.jpg

一応これでもADC会員(さすがにPremierではなくてSelect)なので、ちょっと待てば正式版が送られてくるんだけど、一刻を争うのは、11月後半に予定されているバレエ公演に使うためなのです。ホント間に合って良かった〜って感じですけど、新しいOSがないとバレエができないって人も珍しいですね(笑)。いや、踊るんじゃなくって、私は映像担当です。福岡の人はお楽しみに〜〜

ちなみに、IAMASでは先月にコンピュータのリプレイスがあったのですが(なので、今は誰もが最新のMacBook ProやMac Proを使っている)、今回からOSの自動更新付きの契約にしたそうですよ。なので、学生な人にも間もなくLeopardが届けられるハズです。なんかいいタイミングですね〜。

【追記】「300を超える新機能」というページがありますが、音楽・音響系の新機能は挙げられていないみたいです。オーディオ周りはTigerで既にフル・スペックってことかもしれませんが、ちょっと寂しいですね。ただ、QCについて一言も触れられていないくらいだから、我々的にはズーパーな機能が沢山控えているハズ。

【追記】USのサイトでも日本のサイトでも6:00PMからApple Store他で販売開始ってなってますね。現地時間での6:00PMなら、世界で一番早く日本で販売が開始されることになります。そして、本拠地のUS西海岸(やハワイなど)は一番遅くなる。ボジョレー・ヌーボーみたい。

【追記】おっと、間違えました。UTC+14のキリバスはないとしても、UTC+12:45のニュージーランドやUTC+10のオーストラリア東部のほうが日本より早いですね。販売店はきっとあるんでしょう。

iNdependence 1.2.2

Appleによる勝手iPhoneレンガ化作戦Firmware 1.1.1に対抗すべく、アクティベーション&脱獄(およびイロイロ)ツールのiNdependece 1.2.2がリリースされました。同様のコマンドライン手法はすでに公開されていましたが、今後はGUIアプリケーションとして手軽に実行できますね。もちろん、各説明を熟読した上で自己責任で試してください。

independence122.png

SIMロック解除ツールanySIM 1.1.1のリリースももうすぐだそうです。Steve Jobs自身が自虐的に「イタチごっこ(a cat-and-mouse game)」と言うように、不毛な労力の繰り返し第2回戦もほぼ終了って感じですかね。それに、ウィルス・スパム開発者と防御フィルタ開発者が根っこでは繋がっているという伝説(?)がありますが、同じような妄想が沸き起こっちゃいます。はい、妄想ですよね、根拠はありません(笑)。

ちなみに、US特派員は2台目のiPhoneを手に入れたらしいので、1台は1.1.1用の実験機にしようかと考えているそうです。ただ、無茶苦茶忙しいので、当面1.0.2でも構わないとも言っていました。

Preview of next aka.iphone

Here’s a preview of the next version of aka.iphone.
I can’t say about the release schedule but it will have:
– Multiple screens
– Transition effect
– Accelerometer
– XY slider
– Vertical and horizontal sliders
– Large and small buttons
– OSC port configuration
– Sending and Receiving values
– New protocol (over OSC)
– Multiple iPhone support

– No multi-touch support
– No GUI configuration

akaiphone3-preview.jpg

aka.iphone / experiment 2に最小限の機能しか持たせていないせいだと思いますが、いろいろと問い合わせが多いので、次期aka.iphoneはこんな雰囲気ってのを載せておきます。

iWPhone WordPress Plugin and Theme

iPhoneのSafariでは、このサイトの表示がチョイとおかしい(=デフォルト表示では左右余白が多過ぎる)んですが、その対処となる(と思われる)WordPress用プラグインがiWPhone WordPress Plugin and Themeです。結構早い時期から出ていたみたいですが、最近になって気が付きました。

iwphone-wordpress-plugin.jpg

このプラグインは、iPhoneやiPod touchに最適な表示になるようコンテンツを整形したり、専用テーマに切り替えたり、大きな画像を縮小したりといったことを、自動的に行なってくれるみたいです。他のブラウザに対しては影響を与えず、通常のフォーマットやテーマとして動作するそうです。

ただ、このプラグインはWordPress 2.2.1対応で、このサイトはWordPress 2.0.7なのですね。WordPressをバージョンアップすればいいんだけど、その場しのぎでイロイロと手を加えているので、少々面倒かもしれないんです。なので、Leopardサーバがリリースされた頃に、マシンも入れ替えて総リフレッシュしたいなって思っています。

ともあれ、WordPress 2.2系をお使いのサーバ管理者様は、iWPhoneプラグインをインストールされるといいんじゃないでしょうか?(って旧聞にしてジョーシキかも?)

iPhoneでMax

はい、この通り。MSPの音響処理も、Jitterの映像処理も動きます。ちょっと反応は遅いですけどね。もちろん、合成じゃありませんよ。

iphone-vnc.jpg

ってのはウソじゃないけど、よくあるジョークの類いなのでダマされないでください。iPhoneでVNC、MacでVNSを動かしてMaxを起動しているだけです。

iPhoneではInstaller.appからVNseaをインストール、MacではOSXvnc改めVine Server for OS Xをインストールね。当たり前の話ですが、MaxだけでなくSuperColliderもPhotoshopも、iPhoneで操作できます。ただ、キーボード入力はまだサポートされていません。

これが瞬間的に動作してくれれば、aka.iphone系を作る必要はないわけですけどね。実際には、かなり遅いので、VNC/VNSでの演奏は無理っぽいです。まぁ、タイミングがシビアではない用途で、あなたが気の長い人なら使えると思います。

【追記】Tiger(Mac OS X 10.4)やLeopard(Mac OS X 10.5)では、システムに標準でVNC機能が備わっていました。つまり、これらのOSを使っている場合は、Vine Server for OS Xをインストールする必要はありません。ココココを参考にしてください。

iPhoneでOSC

aka.iphone2OSC (OpenSound Control) というプロトコル(下位レイヤーはUDP/IP)を使って通信しています。Maxではお馴染みの方法で、udpsendやudpreceiveで一発OKですね。

でも、Maxとは違ってiPhoneではOSCが標準じゃないから、自分でケアしなければなりません。もちろん、スクラッチから書くのは大変なので、私が利用したのはChandrasekhar “Sekhar” Ramakrishnan氏が開発したObjCOSCというObjective-C用のOSCライブラリ。

それで、ObjCOSCを使ったOSCの送信はとっても簡単。Objective-Cのコードはちょっとクセがあるけど、なんとなく分かるでしょ?

OSCPort* port = [OSCPort oscPortToAddress: address portNumber: portNumber];
[port sendTo:"/foo" types:"f", 0.2061f];

受信もコールバック関数を登録しておくだけ。

OSCInPort* portIn = [[OSCInPort alloc] initPort: inportno];
[portIn newMethodNamed: "foo" under: [portIn topLevelContainer]
callback:fooCallback context: myController];

だけど、受信にはハマりまくりました。コールバック関数が呼び出されるところまでは問題ないんだけど、その後がダメダメです。全然うまくいかなかったので、現在公開しているaka.iphone2は送信だけなのね。

ハマった箇所は2つあって、ひとつはエンディアン問題。OSCは数値をビッグ・エンディアンで扱っているのに対して、iPhone(あるいはIntel Macなど)はリトル・エンディアンみたいです。ObjCOSCのサンプル・コード(main.c)なら、PrintOSCArgs()で整数と実数をエンディアン変換する必要があったわけです。変換する部分だけ抜き出しておきます。

int intValue;
intValue = CFSwapInt32BigToHost(intValue);

float floatValue;
CFSwappedFloat32 swappedFloatValue;
swappedFloatValue.v = floatValue;
floatValue = CFConvertFloat32SwappedToHost(swappedFloatValue);

ただ、送信は変換ナシに扱えてるんだから、受信だけ変換が必要ってのはイマイチなんじゃない?って思いますけどね。シンボル(文字列)の受信は問題ないです。

もうひとつのポイントは、受信のコールバック関数から他のインスタンスのメソッドを呼び出すには、メイン・スレッドから行なう必要があるみたいってこと。これをやるのがperformSelectorOnMainThreadね。myControllerというインスタンスがあるとして、そのtest:メソッド(パラメータはNSNumber)をメイン・スレッドから呼び出すのは、こんな感じ。

[myController performSelectorOnMainThread:@selector(test:)
withObject:[NSNumber numberWithFloat:floatValue] waitUntilDone:NO];

以下のように、直接呼び出すとiPhoneがフリーズします(笑)。こっちがフツーなんですが…

[myController test:[NSNumber numberWithFloat:floatValue]];

このあたりは、永野哲久くんがヘルプ&ヒントをくれました。多謝多謝。彼はObjective-Cでオーディオ・ビジュアル系の作品を作っていて(大雑把ですまない〜)、こーゆー人がIAMASに在学しているのは有り難いです。どっちが先生で、どっちが生徒だ?って気もしますけどね(笑)。彼の記事にトラックバックを入れておきます。

Radioheadの新作ダウンロード

そうそう書き忘れていました(ってか、昨日のゼミで学生が話していて思い出した)、Radioheadが新作アルバム「In Rainbows」を昨日(日本だと今日?)から発売しています(そのハズ)。ユニークなのは、店頭などでのCD販売はナシで、ダウンロード販売のみ、しかも値段はリスナー(ダウンロードする人)が決めてね、というシステムね。

ダウンロード・サイトは現時点で全然繋がらないので(笑)、写真は12/3からUS$82で販売される予定の豪華特別ボックス・セットね。このパッケージには、ダウンロード版と同じCDとアナログ・レコードに加えて、ボーナス盤的なCDとレコード、デジタル・フォト、その他イロイロと入っているそうです。これも彼らのサイトからの直販のみらしいです。

radiohead-inrainbows.jpg

Radioheadは2003年以降、いわゆるレコード会社とは契約していないそうなので、虎視眈々とこの日を狙ってたんでしょうね。Princeのご乱行の時にも書いたけど、Radioheadもデジタル・コンテンツの特性を、きちんと実証しています。Princeは無料バラマキ作戦で、Radioheadは評価(あるいは賞賛)システムだけど、いずれにしても、デジタル・コンテンツそのものに価値はない、あるいはデジタル・コピー自体は本質的にタダってことです。

そして、ボックス・セットが示しているのは、アナログ・コピーにはプレミアムが必要ってことだけど、これは古典的な価値システムなので、分かり易いですよね。逆に言えば、単なる大量コピーであるフツーのCDは、これまた価値がないことを示している訳です。

古い体質のまま空回りし続ける著作権業界は、これまた古いメディア(CD/DVDとか放送とか)に依存できると思い込んでいるらしくて、未だに9回コピーとか10回コピーとか言ってますけどね。でも、誰も古いメディアを使わないんだから、足元にはもう波はありませんよ〜って人の心配しなくてもイイか(笑)。

ちなみに、経済には詳しくないけど、今の著作権業界って金本位制みたいな気がするな。しかも、業界には金準備がないから、幻想の金本位制だね。経済界では1971年に起こったドル・ショック(金本位制から変動為替相場制への移行)が、まだ起っていないってことは、この業界は30数年は遅れてるってことになります。