ぐる式 (貳) より引っ越し作業中.未完.

2008年6月16日月曜日

Pd: GridFlow を試してみる

home page of GridFlow. A Multidimensional dataflow processing library for PureData, designed for interactive multimedia. 現行バージョンは 0.9.3.バイナリが提供されていないので,ソースからビルドしなければならない.ここでは Pd-extended.0.40.3-rc1 に突っ込んでみる.

前準備: ソースの取得,ビルド環境の構築

  1. インストールには Pd のヘッダ・ファイル (m_pd.h) と Gem のソースが必要になる.ソースがなけりゃ Pd-extended に入ってる Gem のバージョンを確かめて取得しておく[Pd-extended.0.40.3-rc1 では Gem は 0.91.0 ’tigital’ が使われている.最新版は 0.91.1].もちろん GridFlow 自体のソースも忘れずに (笑).
  2. ソースの展開先の doc/install.html を佳く読む (笑).オンラインでは GridFlow 0.9.3 - Installation
  3. その Installation instructions (incl. compilation) によると, ruby は 1.8.2 がデフォルトで入ってるからエエとしても,他に lib* が 7 個ぐらい必要らしい (libjpeg libjpeg-shlibs libpng-shlibs libpng3 libpng3-shlibs libmpeg libmpeg-shlibs).面倒くさいので仰せのとおり Fink を使うことにする. XCode (2.4.1) と X11 のユーザ・パッケージ (1.1.3) はインストース済み.
    1. Fink を落としてインストール. Fink - Download Quick Start
    2. 前述 Fink のドキュメントで指示されている scanpackagesindex 更新が済んだら, FinkCommander のリストから必要ライブラリ (libjpeg libjpeg-shlibs libpng-shlibs libpng3 libpng3-shlibs libmpeg libmpeg-shlibs) を選択して,メニューから Source->Install でソースからインストールする.依存関係があるものはちゃんと処理してくれるので七回やる必要はない (笑).
    これでビルド環境構築は完了.

ビルドとインストール

  1. GridFlow のソース展開先ルートに Pd のヘッダ m_pd.h をコピー.Mac 用の Pd-*.app だとパッケージ内にある. extended なら Contents/Resources/include/pd-vanillae なら Contents/Resources/src/
  2. GridFlow のソース展開先ルートで ./configure --gem-include gem の展開先のソース・ディレクトリ・トップ (ex. gem-0.91.0/src) を実行する. JPEG Library, PNG Library <libpng12/png.h>, PureData (or DesireData), PureData GEM (source code) with m_holdname が found になってるのを確認.
  3. make する. warning がぽこぽこ出るうちに, gridflow.c.fcs でエラー orz.
    gridflow.c.fcs:133: error: expected unqualified-id before '{' token
    ソース (gridflow.c.fcs) の該当箇所.
    //----------------------------------------------------------------// Dimvoid Dim::check() {	// <- here    if (n>MAX_DIM) RAISE("too many dimensions");    for (int i=0; i<n; i++) if (v[i]<0) RAISE("Dim: negative dimension");}
  4. ↑意味判んね.とりあえず make を通すために以下のように変更. gridflow.c / (gridflow.c.fcs) の Dim::check() メソッド全体をヘッダ (gridflow.h / gridflow.h.fcs) へ移して,元の方はコメント・アウト.
    struct Dim : CObject {...//  void check(); // test invariants    void check() {        if (n>Dim::MAX_DIM) RAISE("too many dimensions");        for (int i=0; i<n; i++) if (v[i]<0) RAISE("Dim: negative dimension");    }...
    なぜかコレで通る.
  5. ちゃんと終わると, gridflow.pd_darwin という 10MB ほどのライブラリ・ファイルが生成される.
  6. make install でインストールの仕方が表示されるので,手動で組込む (笑).ディレクトリを丸ごとアプリのパッケージ内の Contents/Resoures/extra/ に突っ込む.ここではバージョン番号を削って gridflow というディレクトリ名にしている.
  7. パッケージ内の Contents/org.puredata.pd.default.plist を変更する.純正の Developer Tools である Property List Editor が楽.
    1. Property List の loadlib\d\d を追加する. class は String, Value は gridflow.
    2. Property List の nloadlib の Value を +1 する.
  8. 起動時にメッセージが出れば,無事にインストール完了.

    GridFlow 0.9.3, Copyright (c) 2001-2008 Mathieu BouchardGridFlow was compiled on Jun 12 2008, 18:11:08

    GridFlow 0.9.3

    インストールした先の examples ディレクトリ (Contents/Resources/extra/gridflow/examples/) にある例題を動かして遊ぶ.動かないのもけっこうある orz. [#camera] オブジェクトなどは,当然ながら入力がないと動かない.お手軽に試すなら, iSight カメラを搭載した MacBook 等で動かすべし.

例題集の実行例

  • blob
    GridFlow 0.9.3 blob
  • feedback_fractal
    GridFlow 0.9.3 feedback_fractal
  • polygon
    GridFlow 0.9.3 polygon
  • photo_pianoroll
    GridFlow 0.9.3 photo_pianoroll
    ピクセル行を音に変換している.

しっかし,負荷が掛かるな〜 (笑).↓ ps の出力から抜き出し.

  PID  %CPU %MEM      VSZ    RSS  TT  STAT STARTED      TIME COMMAND18586   0.7  1.0   146796  11532  ??  S    10:12AM   0:06.08 Pd-extended.0.40.3... -psn_0_2136473718587  13.1  1.0   189916  12304  ??  S    10:12AM   0:52.59 Pd-extended.0.40.3... -guiport 560218736   0.0  1.8   135924  20660  ??  S    10:12AM   0:07.72 Pd-0.41-4... -psn_0_2175795318737  12.9  0.7    37716   8240  ??  S    10:12AM   0:43.54 Pd-0.41-4... -guiport 5602

*.app/Contents/MacOS/Pd -psn_... と *.app/Contents/Resources/Scripts/../bin/pd -guiport 5602.

0 件のコメント:

コメントを投稿