あまつぶ

3.19 23:00 【小数を渡す】

 昨日書いたように「blur window 1 amount 3 brightness 1.0」というようなスクリプトでぼかしをかけられるようにしようと思ったのだが、またも思わぬところで行き詰まってしまった。イベントを処理してぼかしを実行させるところまではあっさりいけたのだが、「1.0」というのがうまく渡せていないようだ。
 brightnessオプションはFixed型だから、'aete'リソースでもtypeFixedを使ってみたのだが、イベントのデータに入っているのは、double型になっていた。試しに「1」にしてみると、これはlong型として処理された。おそらく、スクリプト中で数字を使うと、整数であればlong、少数であればdoubleとして扱われるということなのだろうと思うが、これをFixedにしてやるにはどうしたらいいんだろう。
 longで渡されていればlongで、doubleで渡されていればdoubleで取り出してFixedに変換してやればいいんだろうけどなんだかややこしいなぁ。結局'aete'リソースで指定するパラメータのタイプってのはスクリプト編集エディタで用語解説を開いた時にどんな値を渡すべきなのかがわかるようにするために使われるだけで、渡された値が有効なものかどうかというのはアプリケーションが判断するしかないってことなのかな……。
 基本的には、AEGetParamPtrなどを使ってパラメータの内容を取り出した時にerrAECoercionFail(=-1700)が返ってきたら「あ、ほしかったものじゃないや」と思えばいいんだろうけど、少数でも整数でもあり得る場合はややこしい。まずtypeWildCardでデスクリプタとして取り出しておいて、そこからdoubleかlongかによって場合わけ、それぞれの場合について値を取り出し、最後にほしい型に変換してやると。Fixedだったら……、MacTypes.hでlongと定義されてるから、longからなら16ビット左シフト、doubleからなら65536倍してからlongにキャスト、かな。ん〜、なんとも。ま、Fixedとして取り出すルーチンを一度作ってしまえばあとは使い回しがきくから別に構わないといえば構わないんだけどねぇ。

 そんなわけでデスクリプタからFixedを取り出すルーチンを作成し、ぼかしフィルタをスクリプトから実行できるようになった。他のフィルタについても同様に'aete'リソース、処理ルーチンを書き、動作確認までできた。1つできてしまえばあとはたいして変わらないから、「色合い」でちょっと詰まった以外はいたって順調(色合いについてはリファレンスに書いていないオプションがあって(昨日書いたように、上のポップアップメニューで選んだものを使うかどうかのオプションがあったわけ)それを調べるのに手間取ったと)。回旋は各セルの値をリストで……ってことにしたのでややこしいかなと思ったけど、typeAEListとして取り出しておいて各アイテムからFixedとして取り出すだけでたいしたことなかった。さすがに慣れてきたかな。
 その回旋のダイアログにバグがあるんじゃないかということも昨日書いたけど、どうもダイアログにバグがあるのではなくて実際の処理がおかしいみたい。スクリプトから実行しても、ダイアログで実行したのと同じようになってしまった。ちょっとこれでは使えないのでサポートするのを止めようかなと思いつつ、、そのうちなおるかも知れないからそのままでもいいかな。ドキュメントのどこかに「おそらくQuickTimeのバグのため正しく動きません」とか書いておけばより親切か。
 あとは記録ルーチンを書けばバグが見つからなければ完成と言えるかな? スクリプト(と、ドキュメントもそうかな)についてはちょっと改良の余地があるかなと思うけど、それ以外は最初に考えていたものよりかなり機能が多いものができたし。最初はJPEGの圧縮率を変更できるだけでいいやと思っていたのに、いつの間にかエフェクトに対応したりスクリプティングに対応したり……。ま、どちらも初めてやったからいろいろ勉強になってよかったかな。

 次はらんだむかべがみの話かも。

to March 18, 1999 ↑ to March index → to March 21, 1999