人気ブログランキング | 話題のタグを見る
ブログトップ
コンピュータと共にある創造的日常
uneoyaji.exblog.jp

メディアアート・プロジェクトにハマったオヤジの日常生活
by une0exct
DT4 パラメータファイルのアイコンも作り直してみた
DT4 パラメータファイルのアイコンも作り直してみた_b0129209_2155756.jpg昨日はアプリのアイコンを作り直したが、今日はパラメータファイル用のアイコンを作り直してみた。システムに組み込みのドキュメント用アイコンを参考に、512x512 pixel のイメージを Photoshop で作りました。ちょっと陰がきつすぎたね...
# by une0exct | 2008-03-30 21:14
アプリのアイコン
次のリリースを Version 1.5 とすることにしました。アプリのアイコンに Version 番号を入れているので、アイコンのイメージも作り直しました。Leopard の開発環境に入っている Icon Composer で古いアイコンファイルを開いてみると、これまで 128x128 pixel が最大だったのに、512x512 と 256x256 があるではないですか。どこでこんな大きなアイコンを表示するのかと思ったら Leopard の新機能 Quick Look で Finder のウィンドウを思いっきり大きくしたときに使われるんですね。というわけで、Photoshop で作っていたアイコンを 512x512 対応にしました。
出来上がった Photoshop のファイルを Icon Composer にドラッグ&ドロップしてびっくり。pre-multiplied alpha は良くないというコメントと共に、アイコンの周囲がなんか黒っぽくなっているではないですか。試しに Photoshop で透明度を指定するときに、これまでは、境界をぼかした選択をして、選択を反転して消去してたんだが、これをアルファチャネルを追加して、そこをぼかして白で塗りつぶすというやり方でうまくいきました。めでたしめでたし。できたアイコンは、こんな感じ。
アプリのアイコン_b0129209_21425966.gif

# by une0exct | 2008-03-29 21:45
AppleScript をアプリに埋め込む
3/25 のブログに書いたランダム系列を制御するプログラムは AppleScript で書いたもので、DT4自身のアプリとは独立したモジュールだったんですが、これをアプリに埋め込んで、デフォールトでランダム系列が走るようにしました。
早い話しが、アプリのバンドル・リソースにスクリプトファイルを入れて、実行開始時に別スレッドで、そのスクリプトを実行するわけです。スクリプトが無限ループになってるので、別スレッドにしないとGUIの操作ができなくなってしまうんだなこれが。しかし、API リファレンスには

Important: You should access NSAppleScript only from the main thread.

って書いてあるけど。。。

あと、問題はユーザがランダム系列による制御を停止する方法。無理矢理スレッドを強制終了にする方法もありそうだけど、ここでは、スクリプトから参照可能な read only の属性を仕込んでおいて、アプリのコードの方で、その属性値を変更して、スクリプトの方ではループ内でこの属性を参照して、値が変わってたら exit repeat して、スクリプトを終了するという風にしました。

NSAppleScript なんていう便利なクラスが組み込まれてて、非常に簡単でした。が、ちょっと引っかかったのは、Xcode 3 の Resources のところにスクリプトファイルを追加しても自動的にはアプリのリソースにコピーされず、ターゲットの構築手順にも追加しておかないといけないという点でした。

では、本日の画像:
AppleScript をアプリに埋め込む_b0129209_2224575.jpg

# by une0exct | 2008-03-28 22:26
DT4 のサウンド部分を少々拡張
DT4では Core Audio を使って合成音とサンプル音をいろいろ加工して出している。ソースコードを眺めていたら、どうも無駄な計算してるところがあったので、改良。少し効率アップしたはずです。
もう1つ、音の長さを調節するスライダーを追加。短くするとちょっとワイルドな感じになりました。こんな感じ。

MP3 もアップロードできるといいのにね。
# by une0exct | 2008-03-27 17:52
DT4 のデバッグは限りなく
MacOS X の Objective-C でプログラミングやってるんですが、Mac の CPU が Intel になってから Dual Core あたりまえということで、CPU パワー命な、リアルタイム・リアクションを求める当方としては、当然、マルチスレッド使う訳です。で、共有メモリーのロックとか、結構クリチカルなわけですよ。実行時のバグも、毎回現象が違ってたりして、原因を見つけるのが難しい。デバッガにかけると何も異常がなかったり。


今朝見つけたバグは、そんな高尚?なんではなく、単に NSArray arrayWithObjects: の最後に nil を入れるのを忘れていたという、ちょっと間抜けなものでした。デバッガのお陰ですぐフィックスできたのは幸い。


もう1つ、昨日いじったところで、awakeFromNib の中でスレッドを作ってたのを applicationDidFinishLaunching に移しました。awakeFromNib だと、まだ load し終わっていない NIB とかがある場合に、スレッドがデッドロックすることがあるので、というか、そういうプログラムになっていたので、起動時にときどきハングアップしてたのでした。


これだけじゃ、なんなので、今日のDT4イメージでも載せておきます。

DT4 のデバッグは限りなく_b0129209_1144154.jpg

# by une0exct | 2008-03-26 11:47