iPhone」カテゴリーアーカイブ

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に在学しているのは有り難いです。どっちが先生で、どっちが生徒だ?って気もしますけどね(笑)。彼の記事にトラックバックを入れておきます。

UITouchDiagnosticsLayer

コレ何でしょうね? 以下の画像は、iPhoneの上部にボタンとスライダーを置いて、下部にUITouchDiagnosticsLayerというオブジェクトを配置したもの。スクリーンをタップorドラッグすると、その位置がUITouchDiagnosticsLayer(タッチ診断レイヤー?)に数ポイントの履歴付きで表示されます。

ナゾなのはスライダーに対しては、電位マップのような網目が表示されること。ボタンや余白部分では表示されないんですけどね。網目はタッチごとに微妙に違っているように見えるものの、タッチの仕方を変えても、それほど大きくは変化しないみたいです。

uitouchdiagnosticslayer.JPG

なんだか意味ありげだけど、どのように利用するのかは分かりません。マルチ・タッチをしても、同時に数点が押されているようには表示されないですね。ただ、次のような現象を確認することはできました。

人差し指で押す(1点タッチ) → 人差し指の位置が表示される。
中指で押す(2点タッチ)   → 中指の位置が表示される。
薬指で押す(3点タッチ)   → 薬指の位置が表示される。
薬指を離す(2点タッチ)   → 中指の位置が表示される。
中指を離す(1点タッチ)   → 人差し指の位置が表示される。
人差し指を離す(タッチなし) → 何も表示されない(以前の表示が残る)。

明らかに、フツーのタッチ・スクリーンではないってことは分かるんですが、さて,この後どうしたらいんでしょう?

Xcodeで勝手アプリ開発

Xcodeで勝手アプリを開発するためのテンプレートが公開されていました。このあたりの説明を参考にセットアップね。これで、Xcodeで新規プロジェクトを作る時に、iPhone UIKit Applicationが選べるようになります。

早速、私もこれまでのコードをXcodeプロジェクトに移行。ソースを編集するのは楽々だし、ビルドもバッチリです。嬉しがってクラス・モデルを表示してみたりして…(階層が深くないので、ほとんど意味ナシ〜笑)。

iphone-xcode_m.jpg

いかにもモダンな統合開発環境って感じですが、実際にはtoolchainベースであることには変わりなく、ビルドはMakefileを呼び出しているだけね。それでも、使い慣れたXcodeで作業できるのは、ターミナル嫌いの私にとっては精神的にとっても楽です(笑)。

後は、UIKitなどのクラス・ツリーを表示したり、ヘッダへのアクセスを簡単にしたいのですが、どうしたらいいんでしょう? どなたか教えてください。

iPhone Human Interface Guidelines

AppleがiPhone Human Interface Guidelinesなるドキュメントを公開しました。その名の通り、iPhoneにおけるヒューマン・インターフェースのガイドラインです(笑)。

かつてMacintoshの登場から間もなくして刊行された「Human Interface Guidelines:The Apple Desktop Interface」は、コンピュータGUIデザインのバイブルとして超有名(読んでない人はモグリ!)。一方、Mac OS X/Auqa版の「Apple Human Interface Guidelines(旧Aqua Human Interface Guidelines)」では、Apple自身が逸脱しちゃったりでイマイチでしたけど、今回のドキュメントはどう評価されるんでしょうね。

ともあれ、最近のAppleの動向を考えながら、このドキュメントを読むと結構笑えますよ。最初のページからして”Currently, developers create web applications for iPhone, not native applications.”ですからね。そして、すぐにWebアプリでは不可能な事柄についての説明がどんどん登場します。つまり、ネイティブ・アプリをデザインするための情報を、Appleが公式に出している訳です。

iphone-human-interface-guidelines-navigation.jpg

iPod touchで予見され、先週から現実のものとなった勝手iPhone&勝手アプリ撲滅キャンペーンから考えると、このHIG公開は明らかに矛盾しています。と言うことは、近くAppleから公式SDKと公式アプリ動作環境が提供されると期待するのがスジってものです(笑)。今月はLeopard登場(のハズ)だしね。

iPhoneで斜めスライダー

もしかしてと思って試してみたら出来ました、斜めスライダー。setRotationBy:をスライダーに送るだけで、ハイ、この通り。ちゃんと斜めに動きます。本当は縦スライダーを作ろうとしていたんですけどね。

akaiphone2-sliders.jpg

setRotationBy:はUIView-Geometry.hに定義されていて、GUIオブジェクトはUIViewのサブクラスなので、何でも回転できちゃうハズ。setTransform:でアフィン変換もできるみたいだから、歪んだGUIも作れますね。OS XたるiPhoneの能力の高さを再認識しましたです。

こんな風に上位クラスを調べるのは、お宝探しっぽくて楽しいですよ。Cocoa/Objective-Cだから、たぶんこんな感じかなとコードを書けば、それなりに動いてくれるのも快感。でも、正解を見つけるまでのトライ&エラーは大変面倒なんですけどね。

【追記】斜めスライダーに喜んだのも束の間、本来の目的の縦スライダーの表示が微妙に変。ノブが少しズレてるみたい。うむむ??

aka.iphoneネイティブ版登場!

前回の弱気な?マークとは違って、今回は強気の!マークです(笑)。MaxをコントロールするためのiPhoneネイティブ・アプリケーションが(一応)完成。aka.iphone / experiment 2として公開しました。勝手アプリなので、あなたのiPhoneがレンガになる前に試してください。Maxへ直接OSCメッセージを送るので、前回のようにサーバを設定するといった面倒はありません。

akaiphone2-working.jpg

さて、これで、ようやくスライダーをグリグリできるようになりました。プッシュ・ボタンとトグル・ボタンもあります。まだ実際には作っていませんが、XYパッドやナンバー・ボックス、テキスト・ボックスなども盛り込めそうです。反応&通信はとっても速いです。

ただし、システム標準(?)のGUIライブラリ(UIKit)を使っているせいか、マルチ・タッチはできません。もっとも、あるボタンを押さえながら別のボタンを押せるなど、マルチ・タッチらしきことは見え隠れしています。正式なドキュメントがないので、これまでの解析結果を参考に、手探りで試行錯誤しているわけで、かなり開発に時間がかかるのがツライところ(軟弱)。

それから、IPアドレスやポート番号が固定のままとか、いろいろと不備がありますね(だって面倒だから)。GUIを自由に配置したいといった要望も出てくると思うのですが、専用エディタを作る程暇人じゃないし、どうしたものかと思案顔です。まぁ、遊べる範囲で遊んでください。

iPhone Software Version 1.1.1

いろんな意味で予告通りのiPhoneソウトウェア・アップデート1.1.1が登場しました。今回の目玉はiTunes Wi-Fi Music Storeでしょうけど、それ以外にも数多くの新機能や改良が加わっています。でも、iPod touchにはある日本語入力機能(International Keyboards Support)は見当たらないな。例の無表情オヤジが滔々と新機能を説明してくれるムービーも登場しています。

iphone-111.jpg

ここで気になるのが、裏の目玉たる勝手iPhoneをレンガにしちゃうぞ大作戦ですね。アップデータも「永久に操作不能になっちゃうぞ」云々と表示されているそうです。コワイですね(苦笑)。さて、どうなりますことやら。

【追記】しっかりレンガになるみたいです。ロック解除していない場合は、問題なくアップデートできるようですが、勝手アプリが走らなくなるとか。各地で非難轟々ですけど、スクリーンにレンガを表示するくらいの茶目っ気が欲しかったですね。

iPhoneで初ライブ

The Breadboard Bandのソウル公演は無事に終わりました。演奏はいつにも増して強力かつバラティ豊かだったんですが(と自画自賛)、特筆すべきは、US特派員から受け取ったiPhoneを使って演奏したことです。おそらく世界初!ってことはないでしょうけど、まだあまり例がないんじゃないかな。

iphone-bbb-saber.jpg

The Breadboard Bandは「コンピュータはもうオシマイ」ってのがコンセプトのひとつなので、aka.iphone / Experiment 1は使えない。そんなわけで作ったのが勝手アプリのBBB-Saber。先の記事のBBBアイコンはコレです。

と言ってもオリジナル・アプリではなくって、iSaberという勝手アプリに含まれるサウンドを入れ替えて、いくつかのリソースを変更しただけ。iSaberはiPhoneの3軸加速度センサーを利用していて、iPhoneを振り回すとスター・ウォーズのライト・セイバーみたいにブーンって音が鳴ります。そこで今回は、グリッチっぽいノイズ音を仕込んで、飛び道具として使った訳です。

オリジナル・アプリじゃないから、ちょっと横着というか卑怯って気もしますね(笑)。でも、よく考えてみれば、サウンドはオリジナルだけど、人様のアプリ(Pro Toolsとか)を使って音楽を作っている人は山ほどいる訳で、ま、いっか!と思った次第です。

と言う訳で、誰か止めなよ(笑)ってくらいiPhone記事が続いていますが、それもこれもiPhoneをMaxまたは音楽・映像などで使うためなのです。iPhoneを持ってないから(それは私も同様)と言わずに、しばらく(?)お付き合いください。

【追記】そうそう、さすが韓国なので、PRADAフォンを持っているひともチラホラ。ちょっと触らせてもらいましたけど、単なるケータイでした。GUIは馬鹿Flashらしいので、まぁ、こんなものでしょう〜って感じでダサダサなんです。一回り小さいボディとモノクロ明快系のグラフィックスはグッドなのですけど、あちこちで破綻してたり、意味不明だったりします。これで10万円だから、なんともブランド様々です。

anySIM.appでSIMフリーiPhone

盗作疑惑のUnlock.appではなくて、本物(ってのも変ですが)のSIMロック解除ツール、anySIM.appがリリースされました。CUIツールのiUnlock改めiUnlock_ReloadedをベースにしたGUIバージョンで、iPhoneの勝手アプリとして動作します。もちろん、フリー(と言うかオープン・ソース)です。

盗作野郎に負けられないと思ったのか、稚拙なアイコンを持ち、進行把握が困難であったUnlock.appに対して、奇麗で分かり易いGUIになっています。次の写真、4段目2個目がanySIM.appのアイコン(4個目にはナゾのBBBアイコン…)。

iphone-anysim.jpg

手順は以下の通り。もちろん、自己責任でどうぞ。

1. The iPhone Dev WikiからanySIM.appをダウンロードする。
2. iFuntasticなどを使ってanySIM.appをiPhoneにインストールする。
3. SettingsのGeneralのAuto-LockをNeverに設定する。
4. anySIM.appを起動する。
5. slide to unlockのノブをスライドする。
6. 注意書きを読んで、OK. Unlock My Phoneボタンを押す。

以上の手順で処理が開始されるので、後は気長に(20分くらい?)待てばいいみたいです。インストールに関しては、すでにPXL版がある他、Installer.app版も近くリリースされる見込み。

ちなみに、The iPhone Dev Wikiは直リンク禁止だったのですが、いつの間にかその記述が消えていました(だけど、無駄な投稿はしないでね、との注意書きあり)。Web検索でThe iPhone Dev Wikiが探せなかった人はいないと思いますけど、これからは問題なくリンクが貼ることができるようです。