Pd Kai#3 Startup Process

1,437 views

Published on

Pd会 第3回 発表資料「PureData の起動プロセス」

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,437
On SlideShare
0
From Embeds
0
Number of Embeds
183
Actions
Shares
0
Downloads
6
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Pd Kai#3 Startup Process

  1. 1. PureData Start-up process @PdKai #3 id:nagachika 1
  2. 2. Pd の 起動プロセス Mac OS X(Linux 等その他の Unix系も多分一緒) /Application/Pd-extended.app/Contents/MacOS/Pd-extended 実は Tcl 埋め込み(GUI) GUIから起動する場合(sys_startfromgui) (Linux 等では pd-gui) /Application/Pd-extended.app/Contents/Resources/bin/pd 通常の pd プロセス アプリとして起動の時はGUIの子プロセスと して起動 ex) pd -guiport 5600 2
  3. 3. • アプリケーションとして(GUIから)起動 • まず MacOS/Pd-extended (pd-gui) が起動(t_tkcmd.c sys_startfromgui)) • Resources/bin/pd -guiport 5600 のように pd が fork+exec される • pd → gui の方向にソケット接続して通信するみたい GUI pd ポートは GUI のほうが開いて待ってる。 ただし最初に接続してきた1クライアントしか 相手にしていない fork (-guiport 5600) connect 3
  4. 4. • pd から起動(GUIあり版) • Resources/bin/pd を起動(-nogui はつけない) • -open, -send などの起動時にあれこれするオプションは無効 • pd → gui → pd と1段多くプロセスの親子関係ができる • pd ← gui ← pd の方向にソケット接続して通信するみたい ただし最初の pd ← gui のソケットは繋げるだけ繋げて放置される GUI pd ここのソケット通信は使われてないっぽい。 fork (-guiport 5600) connect pd fork (u_main.tk 5400) connect おそらく主な処理はこちらが担当 4
  5. 5. • pd から起動(GUIなし版) • Resources/bin/pd -nogui で起動 • -open, -send などの起動時にあれこれするオプションが使える • GUI がいないのでそのままでは操作できないので、-open や -send で netreceive オブジェクトを貼った canvas を作って操作 • スクリプトから操作するにはこの方法しかない(PureData 自体を弄 らなければ) pd 5
  6. 6. • Windows(適当) • GUI は受信ソケットは作らずに接続するようになってる • おそらくは pd が親で GUI(tcl)を子として起動 • pd ← gui ← pd の方向にソケット接続して通信するみたい GUI GUI の処理をみると MSW の時は GUI→pd の 接続をするようになっている。 Mac OS X でもこの構成だと楽なのに… pd fork connect 6
  7. 7. 外部から操作 • GUI のとりかえ • -guicmd で GUI のコマンドラインを置き換えできる • しかし g_canvas 等は tk のコマンドを直に書いてる(tk にべったり依存) • 抽象化レイヤを作りたい。そこそこ手を入れないといけない。 • -nogui で起動して netreceive 経由で弄るという手も • Ruby/PureData(GUl 起動してから操作もできる) • GUI 関係のメッセージは抑制されてしまうから表示系は断念 • Array(Table)等はだめだけどGEMは別口で画面を開いてるかも(未確認) • エラー(オブジェクト名間違いなど)の検出ができない 7
  8. 8. netreceive • netreceive <port> <udp> <old> • <port> listen するポート番号 • <udp> 0:TCP or 1: UDP • <old> “old” ならば Pd アプリケーショ ン自体にメッセージが送信できる(セ キュリティの観点から obsolete にし ているらしい) 8
  9. 9. message • pd <msg> <args>...; • PureData アプリケーションへのmessage • pd filename <name> <dir>; で canvas に命名 • #N canvas <xpos> <ypos> <xsize> <ysize> <font>; • xpos/ypos canvas ウィンドウの位置 • xsize/ysize ウィンドウのサイズ • font フォントのポイントサイズ 9
  10. 10. message • pd-<canvas名> <message> <args>... ; • canvas 毎の message • obj - オブジェクト作成 • obj <xpos> <ypos> <class> <args>... • text - コメントオブジェクト作成 • msg - メッセージオブジェクト作成 • connect - オブジェクト間の接続 10

×