Pd (Pure Data) は Miller Puckette が開発したデータフロー型プログラミングによるマルチメディア制作環境です.処理単位となる「オブジェクト」を相互に接続することで,全体的なデータ処理の流れを「パッチ」とよばれる図式として視覚的・対話的に構成していきます.Pd は Mac・Linux・Windows などで動作するオープンソースのソフトウェアです.
Pd 本体は,音メディア制作(シンセサイザ・シーケンサを含めた音信号処理システムの開発)に関するさまざまな機能をもっています.また,OpenGL ベースの映像メディア制作パッケージ GEM など,さまざまなパッケージが用意されていて,自由に組み込むことができます.よく使うパッケージ(GEM など)をあらかじめ Pd に組み込んだものが,Pd-extended として用意されています.
このチュートリアルでは,Pd(実際には Pd-extended)の基本的な使い方を学び,音メディア・映像メディア・ロボットメディアを自在に操るための基礎を築くことをめざします.以下では説明を分かりやすくするため,"Pd" で "Pd-extended" を意味するものとします.
Pd を起動すると,つぎのような Pd ウィンドウが現われます.これは Pd 全体の機能設定をしたり,動作ログやエラーメッセージを表示するための大切なウィンドウです.これを閉じると Pd は終了してしまいますので注意してください.
Pd のプログラムは,パッチ(patch)と呼ばれる図式として作成していきます.まず空のパッチを作成してみましょう.File メニューから,New を選択してください.つぎのような新規パッチのウィンドウが現われるはずです.このウィンドウに,さまざまなボックス(データの処理単位)を配置し,それらを接続線(データが流れるケーブル)でつなげることで,プログラミングしていきます.
簡単なプログラムを作ってみましょう.まず,ボックスを1つ置いてみます.空パッチのウィンドウがアクティブになっている状態で,Put メニューから Message(メッセージボックス)を選択し,空パッチの適当な位置に配置します.するとメッセージ内部でカーソルが点滅していますから,たとえば "Hello world" と(カンマを入れずに)タイプします.こうして生成されたメッセージボックスを,以下では [Hello world[ と表記します.
もう1つボックスを置きます.Put メニューから Object(オブジェクト)を選択し,先ほど作成した [Hello world[ の下あたりに配置します.やはりオブジェクト内部でカーソルが点滅していますから,"print" とタイプします.こうして生成されたオブジェクトボックスを,以下では [print] と表記します.
最後に,マウスポインタを [Hello world[ の左下にある小さな四角に合わせ(マウスポインタが変化します),マウスボタンを押し下げて,そのまま [print] の左上にある小さな四角まで(マウスポインタが変化します)ドラッグします.そこでマウスボタンを離せば,[Hello world[ から [print] への接続線が生成されます.
ボックスや接続線を消すには,マウスドラッグして消したいボックスや接続線を含んだ長方形領域を選択して delete キーを押します.コピーやペーストも可能です.接続線を1本だけ消したいときは,マウスカーソルを消したい接続線に合わせて(マウスポインタが変化します)delete キーを押します.
ボックスに書き込んだ文字列を修正したいときは,ボックスをマウスクリックすると内部の文字列が選択状態になりますので,キー入力した文字列に入れ替えることができます.あるいはカーソルキーを動かして一部分だけを修正することできます.ボックスを移動するには,そのボックスをマウスドラッグ(クリックではない)してください.接続線もいっしょに移動します.
これでプログラミング終了です.実行するには,Edit メニューの下端にある "Edit mode" を選択して,そのチェックマークを外してください.これで実行状態になります.もう一度 "Edit mode" を選択すれば編集状態に戻ります.では,実行状態で [Hello world[ をマウスクリックしてみてください.Pd ウィンドウのコンソール(文字表示領域)に "print: Hello world" という行が追加されるはずです.
ちなみに,編集状態と実行状態の違いは,マウスやキーボードの入力を編集作業に使うか,実行時のボックス操作(メッセージボックスからの送信など)に使うかの区別しかありません.編集状態でもパッチは「生きている」のです.
Pd では,ボックスを接続線でつなげることで,一連のデータ処理をパッチで表現していきます.すべてのボックスは上側に入力端子,下側に出力端子を持ちます.複数の入力端子がボックス上側に並ぶことや,複数の出力端子がボックス下側に並ぶことがあります.また,入力端子あるいは出力端子のないボックスもあります.すべての接続線はボックスの出力端子からボックスの入力端子へという方向性をもっていて,接続線を作成するにはこの順序にマウスドラッグします.
上の例では,メッセージボックス [Hello world[ をクリックすることでその内容がメッセージ Hello world(以下では /Hello world/ と表記)として出力され,接続線をとおしてオブジェクトボックス [print] に入力されます.[print] は,メッセージが入力されるごとに,その内容を Pd ウィンドウのコンソールに書き出すという機能をもっています.
1つの出力から複数の接続線が出ることもあります.下のパッチで,[Hello world[ を押せば,そのメッセージがコンソールに表示され,[Yes we can[ を押せば,そのメッセージがコンソールに表示されます.どんなに素早く操作しても,メッセージが衝突することはありません.
複数の接続線が1つの入力端子に入ることもあります.下の2つのパッチは,いずれも,[we can[ を押せば,コンソールには "Yes we can" と "Maybe we can" が表示されます.ここで登場した [prepend ...] は,入力メッセージの先頭に,引数(オブジェクト名 prepend の後ろに与えられたメッセージ;この例では Yes や Maybe)を追加したメッセージを出力するオブジェクトです.
上の2つのパッチで,メッセージがコンソールに出力される順序には注意が必要です.[we can[ からのメッセージは,[prepend Yes] への接続線に出力されるのが先か,あるいは [prepend Maybe] への接続線に出力されるのが先か,その出力順序は未知となります.正確には,接続線が作られた順序で(古い順に)メッセージが出力されますが,パッチを見ただけではわかりません.このような性質は,メッセージボックスだけでなく,すべてのボックスの出力端子についても言えます.(この順序を明示的に扱うには [trigger] を使います.)
ここでは /Yes we can/ のようなメッセージを扱いましたが,メッセージには他にも,英単語のようなシンボル(たとえば /Yes/),シンボルのリスト(これが /Yes we can/),数値(たとえば /3.14/)などがあります.また,/bang/ という特別なメッセージがあり,ボックスに動作のキッカケを与えるために使われます.これらについては次節で学んでいきます.