PureData
Start-up process
@PdKai #3
id:nagachika
1
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
• アプリケーションとして(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
• 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
• pd から起動(GUIなし版)
• Resources/bin/pd -nogui で起動
• -open, -send などの起動時にあれこれするオプションが使える
• GUI がいないのでそのままでは操作できないので、-open や -send
で netreceive オブジェクトを貼った canvas を作って操作
• スクリプトから操作するにはこの方法しかない(PureData 自体を弄
らなければ)
pd
5
• Windows(適当)
• GUI は受信ソケットは作らずに接続するようになってる
• おそらくは pd が親で GUI(tcl)を子として起動
• pd ← gui ← pd の方向にソケット接続して通信するみたい
GUI
GUI の処理をみると MSW の時は GUI→pd の
接続をするようになっている。
Mac OS X でもこの構成だと楽なのに…
pd
fork connect
6
外部から操作
• GUI のとりかえ
• -guicmd で GUI のコマンドラインを置き換えできる
• しかし g_canvas 等は tk のコマンドを直に書いてる(tk にべったり依存)
• 抽象化レイヤを作りたい。そこそこ手を入れないといけない。
• -nogui で起動して netreceive 経由で弄るという手も
• Ruby/PureData(GUl 起動してから操作もできる)
• GUI 関係のメッセージは抑制されてしまうから表示系は断念
• Array(Table)等はだめだけどGEMは別口で画面を開いてるかも(未確認)
• エラー(オブジェクト名間違いなど)の検出ができない
7
netreceive
• netreceive <port> <udp> <old>
• <port> listen するポート番号
• <udp> 0:TCP or 1: UDP
• <old> “old” ならば Pd アプリケーショ
ン自体にメッセージが送信できる(セ
キュリティの観点から obsolete にし
ているらしい)
8
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
message
• pd-<canvas名> <message> <args>... ;
• canvas 毎の message
• obj - オブジェクト作成
• obj <xpos> <ypos> <class> <args>...
• text - コメントオブジェクト作成
• msg - メッセージオブジェクト作成
• connect - オブジェクト間の接続
10

Pd Kai#3 Startup Process

  • 1.
  • 2.
    Pd の 起動プロセス MacOS 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.
    • アプリケーションとして(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.
    • 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.
    • pd から起動(GUIなし版) •Resources/bin/pd -nogui で起動 • -open, -send などの起動時にあれこれするオプションが使える • GUI がいないのでそのままでは操作できないので、-open や -send で netreceive オブジェクトを貼った canvas を作って操作 • スクリプトから操作するにはこの方法しかない(PureData 自体を弄 らなければ) pd 5
  • 6.
    • Windows(適当) • GUIは受信ソケットは作らずに接続するようになってる • おそらくは pd が親で GUI(tcl)を子として起動 • pd ← gui ← pd の方向にソケット接続して通信するみたい GUI GUI の処理をみると MSW の時は GUI→pd の 接続をするようになっている。 Mac OS X でもこの構成だと楽なのに… pd fork connect 6
  • 7.
    外部から操作 • GUI のとりかえ •-guicmd で GUI のコマンドラインを置き換えできる • しかし g_canvas 等は tk のコマンドを直に書いてる(tk にべったり依存) • 抽象化レイヤを作りたい。そこそこ手を入れないといけない。 • -nogui で起動して netreceive 経由で弄るという手も • Ruby/PureData(GUl 起動してから操作もできる) • GUI 関係のメッセージは抑制されてしまうから表示系は断念 • Array(Table)等はだめだけどGEMは別口で画面を開いてるかも(未確認) • エラー(オブジェクト名間違いなど)の検出ができない 7
  • 8.
    netreceive • netreceive <port><udp> <old> • <port> listen するポート番号 • <udp> 0:TCP or 1: UDP • <old> “old” ならば Pd アプリケーショ ン自体にメッセージが送信できる(セ キュリティの観点から obsolete にし ているらしい) 8
  • 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.
    message • pd-<canvas名> <message><args>... ; • canvas 毎の message • obj - オブジェクト作成 • obj <xpos> <ypos> <class> <args>... • text - コメントオブジェクト作成 • msg - メッセージオブジェクト作成 • connect - オブジェクト間の接続 10