iPhoneのファクトリー・フォント

ファクトリー・イメージファクトリー・サウンドに続いて、今回はiPhoneのファクトリー・フォントです。手順は以前の記事を参考にしてもらうとして、フォントは/System/Library/Fontsフォルダにあります。Finderでもおおよその字体が確認できますが、QuickLookやFontBookを使うと尚良しですね。

iphone-factory-fonts_s.jpg

すべてのフォントのサムネール一覧はコチラ(356KB)。

明らかに日本語フォントであるのはヒラギノ角ゴシック(ProNW3とProNW6) だけみたいですが、arialuni(ArialのUnicode版)やSTHeiti/STXihei(簡易中国語)あたりでも日本語が使えそう。7セグメントLED風のDB_LCD_Temp-Black(すべてのアルファベットはない、残念)とか電話用に最適化されているらしいPhonepadTwoとかも面白い。

フォント選択用らしいUIFontChooserを使うと、こんなビューが現れます。

iphone-uifontchooser.png

コードはこれだけ。

UIFontChooser *fontChooser = [UIFontChooser sharedFontChooser];
[mainView addSubview:fontChooser];

このビューで選択可能なフォントは以下の通り。

.helvetica It mm
.times It mm
american typewriter
applegothic
arial
arial rounded mt bold
arial unicode ms
courier
courier new
db lcd temp
georgia
helvetica
helvetica neue
hiragino kaku gothic pron
lock clock
marker felf
phonepadtwo
stheiti
times new roman
trebuchet ms
verdana
zapfino

はい、お疲れさまでした。

寝た子を起こすWake-On-LAN

MaxMSP-MLのトッピックなんだけど、ネットワーク経由でスリープしているMacを起こすにはどうするの?って話が出ていました。スリープさせるのはaka.powerとudpsend/udpreceiveあたりを使えばバッチリなのですが、寝た子を起こすのはaka.powerでもできない。MaxもMacも動いていない訳ですからね。

ところが、Wake-On-LANという技術があって、特殊なパケットを送り込めばMacがスリープから目覚めるそうです。そんなこと知らなかったのでビックリしつつ、Wake550というユーティリティを使ってみたら、ちゃんとMacBookが目覚めるので、またビックリ。

そこで、Wake550が使っているPerlスクリプトを読み解いて、aka.datagramとudpsendを使って実験してみると、これまたお目覚めしてくれるので、3度目のビックリでした。Perlは使ったことがないので、間違っているかもしれないけど、取り敢えず動いています(笑)。素晴らしい〜!

wakeonlan-test.png

テスト・パッチはコレね。もちろん、MACアドレスやブロードキャスト・アドレスは、使用する機材やネットワーク環境に合わせて設定してください。Wi-Fiはダメみたいですよ。iPhoneもダメでした。
wakeonlan-testpat.zip

aka.Repository開設

このサイトはともかく、世間的にはヒッソリしていようと思っていたものの、簡単にインストールしたいとか、アプリが実行できないとか、いろいろと要望が寄せられるようになりました。なので、個人用のレポジトリを作成して公開しています。はい、http://akamatsu.org/repo.xmlです。詳しくはコチラね。

iphone-aka-repository-1.jpg iphone-aka-repository-2.jpg

要は、コンピュータナシにiPhoneだけでアプリケーションをインストールできるわけです(もちろん、Installer.appが必要ですよ)。レポジトリはXMLまたはplistファイルを書くだけなので簡単でしたけど、量が多かったので少々時間がかかっちゃいました。ただ、あと1ヵ月もしないうちに状況が変わって、レポジトリが不要になるかもね(笑)。

ところで、なぜヒッソリしたいのかと言えば、サポートをする気がないからです。真剣に取り組んでいる人には対応しますけど、ロクに状況も書かずに助けを求められても困っちゃいますからね。商品でもないし、広告や寄付を取っているわけでもないから、自己責任&自己解決が原則ですよ〜(と日本語で書いても読めない人が大半)。

サポートが大変である最大の理由は、ユーザ層が広いことでしょうね。Maxオブジェクトに比べて、iPhone関係のダウンロード数やアクセス数は2桁または3桁違いますから。つまり、100倍とか1000倍とかのオーダーなのです。それに、Maxユーザは基本的なリテラシーが高いと思うけど、iPhoneユーザは必ずしもそうじゃないだろうしね。

とにもかくにも、個人レポジトリながら公開しちゃったので、それなりに訳の分からない問い合わせが増えるんじゃないかな。牧歌的な世界の終わりと言うか、幼年期の終わりと言うか、激動の時代の始まりかもしれません。

TapTheBeat.app登場

ミュージシャン必携ツール、タップする時間間隔によってテンポを表示するBPMカウンタ、その名も懐かしのTapTheBeat.appを公開しました。四分音符、八分音符、三連八分音符、十六分音符での時間長(ミリ秒)も同時に表示されます。上下ボタンで表示するテンポを調整することも可能です。鼻歌でも歌いながら曲のテンポを確認したり、テンポに合ったディレイ・タイムを割り出したりして使ってください。

iphone-tapthebeat-icon.png iphone-tapthebeat.jpg

写真では分かりにくいかもしれませんが、このアプリのグラフィックスは必要以上にジャギー・ジャギーしています。実はコレ、元々はTapTheBeatというDA(デスク・アクセサリ)なのです。DAなんて、最早誰も知らないでしょうけど、まぁ、そーゆーものがあって、しかも、白黒(グレースケールではない)画面が一般的だった頃に、なんとかウィンドウやボタンを立体的に見せようとしていたのが、こーゆー表現でした。

これは、当時ウルトラ・モダーンだったNeXTSTEPの影響によるもので、この輝かしい後継者が現在のMac OS XおよびOS Xですね。いや〜時の流れを感じさせると言うか、巡り巡って今再びと言うか、もう演歌の世界ですね(笑)。つまり、iPhoneの源流は20年ほど前にあって、それが今日まで(きっと未来へも)滔々と流れていることになります。Knowledge Navigatorも同時期だけど、遥かに小さなデバイスとして実現されているし、バトラーみたいなプッシュ型サービスは要らないよね。

ともあれ、懐古趣味であることは承知しつつ、そんな歴史的な意味もあって化石発掘的に疑似立体GUIを再現した訳です。以前にはWebの時代だってことで、Shockwaveプラグイン版も作ったけど、今じゃ動かないしね(苦笑)。それに、違和感タップリで変なインパクトがあって、何よりグラフィックスに悩まなくて済むのは有り難い(でも、リソース取得は大変でした)。まぁ、ニヤニヤしながら楽しんでください。

LEDBanner.app登場

LEDマトリックス風のメッセージ・ディスプレイ、LEDBanner.appを公開しました。設定したメッセージを延々とスクロール表示するもので、スクリーンをタップすればテキスト入力が現れます。部屋の片隅に置いてもいいし、腕に付けたりバックルに付けたりして、薄暗いクラブで遊んでください。

iphone-ledbanner-icon.png iphone-ledbanner.jpg

英数字だけでなく日本語表示もできるし、サポートされている言語なら何でもOKなハズです。ただ、逆スクロールはしないので、アラビックな人はゴメンナサイですね。日本語や中国語なら垂直スクロールって手もあったな。

LEDっぽい光の表現がイマイチだし、フォント関係の指定が分からないままなんだけど、まぁ、こんなものでしょうってところでリリースしました。アンチ・エイリアスがかかった多階調LEDバナーってのは、ちょっとイケてませんから、なんとかしたいところですが、これまた公式SDK待ちです。って、旧作をアップデートするのは面倒なので、そのままになりそうな予感大ですけどね。

iPhoneのDock Connector

iPhoneのDock Connectorについて調べたので、備忘録として書いておきます。

iPhoneのDock Connectorのピン配列
Dock Connector @ wikiPodLinux
Apple iPod dock interface pinout @ pinouts.ru
これらのサイトはiPodのDock Connectorについての情報だけど、iPhoneでも同じハズ(?)「tried leg 28 and 27 instead of 3 4 and its not working…」という記述もアリ。どちらが正しいのかな??

汎用のDoc Connectorアダプタ
iPod Connector Style 1 @ Soarkfun
iPod Connector Style 2 @ Soarkfun
PodBreakout @ Sparkfun

iPhoneのビデオ出力
Apple コンポジット AV ケーブル @ Apple Store
Apple コンポーネント AV ケーブル @ Apple Store
Video/TV Output? @ Hackint0sh(自作)
市販の一般的な4極ミニプラグ型のAVケーブルの使用はできないらしい。

iPhoneのシリアル入出力
Iphone Serial Port Tutorial @ DevDot
Dock Connectorからはシリアル信号(Ground, Serial Ground, TX, RX)が出ている。
UARTデバイスとしてUxinの標準APIが使用できる(サンプル・コード有り)。
シリアル・ポートを初期化後に、Serial Ground(Pin 11)を500ミリ秒間隔でLOW→HIGH→LOW→HIGHと変化させるオマジナイが必要。

シリアル入出力ができるとなると、GainerやArduinoなどに接続したくなるね。理屈ではGainer上のUSB-UARTブリッジを外して、シリアル・ライン同士を直接繋げば良いハズ(?)。本題から外れるけど、ワイヤードが嫌なら、LANTRONIXのWiPortなどが使えるかも。

ハードが苦手な私としては、間隔が狭いピンにケーブル線をハンダ付けするのは、考えるだけで目眩がするんですけど、誰かこんな感じのケーブル、あるいはプラグ・アダプタを作ってくれないかな? LINE IN、LINE OUT、VIDEO OUTの3種類の端子があれば嬉しいです。

iphone-stompboxes.jpg
(Thanks to Amplitube)

Sinewave.app登場

些細なバグを潰して(それを見つけ出すのは難しい場合が多い)、まともにサイン波が鳴るようになったので、Sinewave.appとして公開しました。GUIも元祖Sinewaveに似せつつ、iPhone風に仕上げています。メーリング・リストへの元祖ポストも見つけました。なんてことをしていると、どこぞのマニアさんみたいですが(笑)、2001年オリジナル版と2008年ポーティング版とを仲良く並べて記念撮影です。

iphone-sinewave-icon.png iphone-sinewave.jpg

ともあれ、安定して動作するようになったものの、その結果は、当然のことながらサイン波です。凶暴な音が出ていたバグ入りバージョンに比べると、ちょっと気が抜けちゃいますね。ひとつのバグは安定動作させながら再現できるけど、もうひとつのバグはAPIを間違って多重呼び出ししていたので、復活させるとフリーズが再発します。うむ、困ったな〜。

【追記】書き忘れてました。iPodで音楽を流しながら、サイン波を鳴らすことができます。カラオケ・トラックを用意して、テルミンっぽく演奏してください…って、周波数がリニア・スケールなので(何故って元祖Sinewaveがそうだから)メロディをとるのは難しかもね。

Firmware 1.1.3でのaka.iphone

iPhoneをFirmware 1.1.3へアップデートされた方へaka.iphone情報。akaRemote 2.1 (aka.iphone / Experiment 2.1)は初期設定が更新されないか、最悪実行時エラーになるかも。他のアプリは大丈夫な気がします。US特派員は未アップグレードで、実際の動作確認はできていないそうで、単なる推測なんですけどね。

Firmware 1.1.3では、これまでのrootユーザではなく、mobileユーザとしてアプリケーションが実行されるそうです。初期の頃に作ったakaRemote 2.1は、直接/var/root/Library/Preferences/下にパス名を指定して初期設定(Preference)ファイルを読み書きしている(しかも、標準的なファイル名じゃない)ので、ちゃんと動作しないんじゃないかな。他のアプリは初期設定を使っていなかったり、パス指定をしないNSUserDefaultsクラスを使っているので、問題がないハズです(祈)。他にも落とし穴があるかもしれません〜大変大変。

iphone-preferences.png

ちなみに、当初はAppleが脱出経路を塞ぐのを懸念して、公式SDKが出るまでは脱獄方法を公開しないというのがiPhone Devチームの方針だったのですが、参加していた一人(?)が抜け駆けして公開しちゃったらしいです。当然のことながら、他の人からは非難囂々なんだけど、これは以前にもあった話ですよね。しかも、公開された方法はバグだらけなので、近日中に本家版を公開することになったみたいです。まぁ、真相や各自の意図までは分からない(しかも私は英語力微弱)けど、これもまた砂場ではない現実の(無茶な)世界ですね。

Sinwave.app登場

iPhone用の凶暴なカオス的オーディオ・オシレータ、Sinwave.appを作成しました。なかなか素晴らしいサウンドなのですが、操作するうちに確実にiPhoneがフリーズするので(笑)、取り敢えず公開したのはYouTubeでのデモ・ムービーだけです。偶然だと思うけど、ファイルの一部が破損したこともあって、音だけでなく動作も狂暴なのかもしれません。タイトルもSinewave(サインウェーブ、サイン波)じゃなくって、Sinwave(シンウェーブ、罪悪波?過失波?)ですよ。

iphone-sinwave-icon.png iphone-sinwave.jpg

元々は、そろそろ(面倒っぽいけど)Audio Queueをやらなきゃな〜ってことで、James McCartney氏が作成したSinewaveなるCocoaアプリをiPhoneに移植しようとしていました。JamesはSuperColliderのオリジナル開発者で、SuperColliderをMac OS Xに移行させる前段階として試作したのがソレね。移植と言っても、Cheetah(Mac OS X 10.0)時代のHALとLeopardから導入されたAudio QueueとではAPIが違うので、サイン波生成部分をいただいて、GUIを似せた程度ですけどね。ちなみに、サイン波生成は単純にsin()関数ですね。プログラミング言語では伝統的にsine()じゃなくってsin()です。

それで、何度かのビルド・エラーとランタイム・エラーを乗り越えて、初めてiPhoneから出た音がコレだったんです。もう一発でシビレました(低脳表現だな〜笑)。おそらく、バッファにデータを書き込む時に馬鹿をしていて、そのせいで凶暴音になるし、場合によってはフリーズしちゃうんですね。でも、そんなことはどうでも良いくらいにグレートな音だったので、それ以上コードを直すことを止めて、ビルドしたアプリを永年保存することにしました。

ミスやエラーが創造に繋がることは多々指摘されているけど、このケースもその典型ですね。一方で、公式SDKや公式実行環境では、こんな無謀が許されないかもしれず、その点が心配になります。セキュリティ絡みで窒息している馬鹿Flashが良い(悪い)例ですから。砂場(サンドボックス)では、創造性は萎びてしまいます。無茶をやりましょう。無茶ができる環境を求めましょう。無茶な世界でも、紳士淑女として振る舞えるからね(ってのは性善説、セキュリティは性悪説)。

Alarm.app登場

スウィーニー・トッドを観ながら思いついたのが(2階から地下へ◯◯が落ちるシーンね!)、自由落下検出機能付きのiPhone用警報器、Alarm.appを作りました。このアプリを立ち上げておけば、iPhoneを落とした時にアラームが鳴ります。瞬時に反応できれば、iPhoneを破損から救えるかも。危機が迫った時には、スクリーンにタッチして手動で鳴らしてもいいです。って、ちょっと無理があるな〜そのうち、バックグラウンドで実行できるようにしますね(できるのか?)。

iphone-alarm-icon.png iphone-alarm.jpg

さすがに慣れてきたので、この程度ならコーディングには1時間もかからないものの、グラフィックスを作るのに数時間かかるのがツライところ。デジカメで非常灯を撮影したり、Poserで説明図を作ったりね。まぁ、素人なりに楽しいような、やはり面倒臭いような複雑なキブンです。iPhone落下中の写真も撮りたかったんだけど、まだうまく出来ていません。

それから、警報の画像はともかく、音のタイミングはかなりダメダメで気持ち悪いです(すみません〜)。performSelector:withObject:afterDelay:の時間精度の問題なのかもしれないし、AVControllerのレイテンシーの問題なのかもしれない。AVControllerをsetRepeatMode:1にすればループ再生できるけど、ループが終端に達した時のコールバックがない(よね?)ので、画像との同期ができない。この程度のことでも、Audio Queueを使わなければならないのかな?