Jitterオブジェクト開発講座(1) SDKのインストールとサンプルのビルド

UBオブジェクト開発講座に引き続き、今回からはJitterオブジェクトの開発方法を手っ取り早く見ていきます。もちろん、ユニバーサル・バイナリーとしての開発方法です。より詳しい説明はCycling ’74のWEBサイトの「Jitter SDKページ」にあります。このページからは、Jitter API ReferenceとJitter Programming Guideを参照することができ、SDKファイルをダウンロードすることができます。

さて、Jitterオブジェクト開発講座の第1回はSDK(ソフトウェア・デベロップメント・キット)のインストールとサンプルのビルドまで、です。以前のUBオブジェクト開発講座に近い形で書いてみますね。

Step 1: Xcodeをインストールする。

・Jitterブジェクトの開発には、Xcode 2.2以降とMac OS X 10.3.9以降が必要である。
(なぜかUBオブジェクト開発はXcode 2.2.1以降とMac OS X 10.4が必要となっている。いずれも最新のバージョンを用意した方が良いと思われる。)
・XcodeはMac OS XのインストールDVDに付属している他、最新版はApple社の開発者用サイトからダウンロードできる。

Step 2: SDKをコピーする

・ Cycling ’74社のWebサイトからJitter 1.6 Macintosh SDKをダウンロードする。
・Jitter1.6SDKディスクの内容をハードディスクの任意の場所にコピーする。例えば、Jitter SDKというフォルダを作り、Jitter1.6SDKディスクの内容をJitter SDKフォルダにコピーすると良い。

Step 3: フレームワークをコピーする

・Jitter1.6SDKフォルダのCopyContentsToLibraryFrameworksフォルダの中身をLibrary/Frameworks/フォルダにコピーする。
(Libraryフォルダは日本語環境では起動ディスクの「ライブラリ」フォルダのこと。)
(OpenGLを利用する場合は、OpenGL.frameworkが必要となるが、これはXcodeの一部として既にインストールされている。)

Step 4: サンプルをビルドする

・サンプルのプロジェクト・ファイルをダブル・クリックする。例えば、projectsフォルダにあるhelloフォルダのmax.jit.hello.xcodeprojファイルをダブル・クリックする。
・Xcodeが起動し、プロジェクト・ウィンドウが開く。
・Xcodeのプロジェクト・ウィンドウのビルド・アイコンをクリックして、プロジェクトをビルドする。
・ビルドが成功すれば、helloフォルダにbuildフォルダが作られるが、その中のDevelopmentフォルダにjit.hello.mxoというオブジェクトが作られる。ただし、これはエイリアスで、実際のファイルはJitter SDKフォルダと同じ階層に作られるsysbuildフォルダの中のDevelopment:Cycling ’74:jitter-externalsフォルダにある。
・何らかのエラーが発生する場合は、Jitter SDKの構成やフレームワークのコピーが間違っていることが考えられるので、再確認する。
・オブジェクト・ファイルが作成できれば、Maxを起動してオブジェクトの動作を確認する。sysbuildフォルダ下のjitter-externalsフォルダにjit.hello.help(あるいはjit.hello-test.patなど)といったテスト用のパッチ・ファイルを作ると良い。

Step 5: 自分のプロジェクを変換する

・サンプルのプロジェクトを複製し、それを元にユニバーサル・バイナリ化したい自分のプロジェクト、あるいは新しく制作するプロジェクトを作ると良い。詳しくは、Jitterオブジェクト開発講座(2)にて説明。

ところで、すでにMaxMSP UB SDKをインストールした人は、同じフォルダにJitter SDKもまとめたくなると思いますが、現状では別々のフォルダにしたほうが良いようです。例えば、max-includesフォルダの内容って微妙に違いますからね。

私はユーザ・フォルダ(akaフォルダ)にdevelopmentという開発関係のファイルを入れるフォルダを作り、その中にJitter SDKフォルダやMaxMSP UB SDKフォルダを入れています。以下の図のように、同じ階層にsysbuildフォルダが作られることになります。また、Jitter SDKフォルダ下に自分のプロジェクを入れるフォルダを作ると良いでしょう。私の場合はaka-jit-ub-projectsフォルダがそれです。

jitter-sdk_s.gif

Jitterオブジェクト開発講座(1) SDKのインストールとサンプルのビルド」への2件のフィードバック

  1. miztani

    チラシの裏として、carbonbundleでお手軽にjitterを拡張する方法(仮)

    jitterオブジェクトの開発するときに、単なる2Dの画像処理エフェクターをつくろうと
    思っても、jitterのプロジェクトの変更はMax/MSPのそれに比べると大変厄介のように
    感じる。例えば、jit_class_findbyname、jit_class_new…などの名称の変更
    (max.XXX.c/ jit.XXX.にまたがっているので#defineするにもヘッダファイルが増えて嫌になる)
    を筆頭に、パラメータの管理、設定など…。勿論、jitterのAPIを使って「何か」をつくるのならば、
    それは些細な事かもしれないが、手早くスケッチのように画像処理エフェクターとして
    jitterオブジェクトをつくろうと思ってもなかなかやる気がでない。
    そこで、jitterのオブジェクトに読み込むことのできるCarbonbundleによるプラグインを考えた。
    これは上記したスケッチの用途に向いている。更に付加えると、jitterを再起動せずに
    Carbonbundleを変更したものを読み込める為(オブジェクトだと無理)にその速度は向上する事だろう。

    jit.carbonbndl.mxo ( ベースとなるオブジェクト Max4.5 Mach-0 PPC xcodeにて制作)
    + jit.carbonbndl ( ベースとなるオブジェクト Max4.3 CFM cwにて制作)
    + demo.bandle ( コンパイル済みのCarbonbundle+ソースコード)
    + helpパッチ

    ダウンロード先 ( 因にベータ版であり、いかなる損害が起きようとも一切の責任は負いませんので悪しからず)
    http://www.uploda.net/cgi/uploader3/index.php?dlpas_id=0000000482.gz
    ダウンロードパス 242

    以下、Carbonbundleのコードにあたる( 4.5 / 4.3 共通 carbonbundle xcodeにて制作)

    #include “ext_mess.h”

    // 書き込むべからず !
    // 追加もなしで
    typedef struct {
    long width,
    height,
    rowbytes;
    } t_mInfo;

    // pluginのパラメータの構造体
    // パラメータが必要ないときもlong dummyとか適当な物を入れて空にするべからず。
    typedef struct {
    Boolean mode;
    } t_pInfo;

    // param メッセージが送られた時に呼び出される
    void __pSet(t_pInfo *p, short ac, t_atom *av)
    {
    p->mode = ((av)->a_w.w_long)?1:0 ;
    }

    // マトリクスの処理
    // only accept matrixes of type char / 2 dimensions / 4 planes
    void __pProcess(t_pInfo *p, t_mInfo *m , unsigned long *bip, unsigned long *bop)
    {
    long i, j;

    unsigned long *src, *dst;

    long width=m->width,
    height=m->height,
    rowbytes=m->rowbytes;

    if ( p->mode ) {
    for( i=0; imode=1;
    return (void *)p;
    }

    // 画像のバッファーの確保などの処理を書くところ
    // 1) プラグインが読み込まれた後に、マトリクスの処理の前に呼び出される
    // 2) マトリクスのdimサイズが変更された時に呼び出される
    void __pSetup(t_pInfo *p)
    {
    /*nada*/
    }

    // free関数
    // 他のプラグインが読み込まれた時に呼び出される
    // オブジェクトを削除した時に呼び出される
    void __pFree(t_pInfo *p)
    {
    /*nada*/
    }

    返信
  2. aka

    チラシの裏として、ということなのですが、内容的にも分量的にも新しいエントリとして投稿してはどうでしょうか?(&このコメントは削除して)

    ブログとなっていますが、赤松や佐近田さんだけがエントリを書くのではなくって、登録ユーザの方にもエントリを書いていただくことを想定していますので。もちろん、このサイトの趣旨から外れるエントリはご遠慮願いたいのですが、このコメントはバッチリですからね。

    というわけで、よろしく!

    返信

aka へ返信する コメントをキャンセル

メールアドレスが公開されることはありません。 が付いている欄は必須項目です