XcodeでPure Dataのオブジェクトを作る 1. Hello world
Posted in PD会 on 9月 14th, 2009 by Norihisa Nagano – 3 CommentsPure Data(以下Pd)がiPhoneで動かせたので、いろいろ拡張すべく格闘しています。
Pdの使い方が実は分かってないとか、いろいろ(大きな)問題はありますが、なにはともあれプラグインで拡張です。
そう、Pdは自分でオブジェクトをCで書いて拡張できるようになっています(エクスターナル・オブジェクト。以下External)。画面に出てくるあのブロックを自作できるわけです。
Windowsはどうだか知りませんが、Mac OS Xの場合Pd-extendedをインストールしているなら
/Applications/Pd-extended.app/Contents/Resources/extra/bonk~/bonk~.pd_darwin
みたいに、.pd_darwinというファイルがあります。これがExternalです。
Cで書くのだから、Xcodeで作れます。
ということで作ってみよう!5分で作れます。
追記:
UNIXな人はnagachikaさんの記事を参照です。
準備
http://puredata.info/docs/developer/PdExternalsInXcode
にばっちり書いてあるので、この通りやればいいのですが、10.6で画面が少々違うし、日本語であるとうれしいかもなので書いておきます。
・プロジェクトを作る
Xcodeで新規プロジェクトを作ります。
Framework & LibraryのBSD C Libraryを選択して、TypeはDynamicにします。これ重要です。
名前はhelloworldにします。

・ビルド設定
先にビルド設定を行います。
赤い丸のTargetsのhelloworld

をダブルクリックするとインスペクタが開くのでBuildタブを選択して
Configuration:を[All Configurations]にして横の検索窓に”Other linker flags”と入力します。
Other linker flagsのところをダブルクリックするとシートが出てくるので +ボタンを押して
-undefined dynamic_lookup
をコピペします。これをやらないと、「この関数の実装・変数が無い、無い、無い、無い」とビルドエラーが出まくって途方に暮れることになります。つまりこれはm_pd.hに定義がある(が実装などが見当たらない)ものは動的に見るよ、という呪文です。
同様に以下3つもやります。
“Product Name”: helloworldにする(なっている)
“Executable Prefix”: libを消す。(これでlibhelloworld.dylibというファイル名前からhelloworld.dylibに)
“Executable Extension”: pd_darwinにする(さらにhelloworld. pd_darwinになる)
追記:
上記設定名が、日本語環境だと違います。
”Other linker flags”→他のリンカフラグ
“Product Name”:→プロダクト名
“Executable Prefix”→実行可能ファイルのプレフィックス
“Executable Extension”→実行可能ファイルの拡張子
(thanks! yasoshimaさん)
以上をやってConfiguration:の下のShow:のところをSettings Defined at This Levelにするとこんな感じになってます。

これで準備OK。
実装
http://puredata.info/downloadsからPdのソースをダウンロードしてきてm_pd.hを探してプロジェクトにコピーします。
m_pd.hにはPdのオブジェクトで使うクラスや型の定義、メソッドがもりもり書いてあります。
コマンド + Nで新規ファイルの追加画面が出るので、helloworld.cというファイルを作って追加します。このファイルに実装を書きます。
Productsがhelloworld.pd_darwinになってないと設定が失敗してます。
.pd_darwinという拡張子じゃないとPdが読み込んでくれないので注意です。
次に、helloworld.cに
http://iem.at/pd/externals-HOWTO/node3.html
の
the code: helloworldのコードをコピペします。
これで実装は完了です。
このオブジェクトが何をやるかというと
void helloworld_bang(t_helloworld *x)
{
post("Hello world !!");
}
となっているように、bangを送ったら、Hello world !!と出力します。
テスト
このファイルを/Applications/Pd-extended.app/Contents/Resources/extraのどこかにコピーします。
extra/helloworld/helloworld.pd_darwinとか、フォルダを作って置いてもOKです。
では、Pdを起動してみましょう。
こんな感じでHello world !!
と出ます。
Hello world !!
これでPdが拡張し放題ですね。









