操作方法

pdファイル

pdファイル(拡張子pd)は、pd箱からFile>Openで開くことでパッチウィンドウを表示する。docフォルダから適当なpdファイルを開いて確認する。

ところでpdファイルは「メモ帳」など、テキストエディタで開いて中身を見ることができる。正しくは、大抵のファイルがテキストエディタで中身を見ることができるのだが、pdファイルの書式は、以下のように比較的簡潔なものである。

#N canvas 0 0 219 180 12;
#X obj 63 106 print;
#X msg 63 49 hello world;
#X connect 1 0 0 0;

例えば上のテキストを任意のテキストエディタに貼り付け、任意のファイル名.pdとして保存(pdフォルダ内に、新規pdファイル専用のフォルダを作成すべきである)、次にpd箱からこのファイルを開いてみる。このように、pdファイルをテキストで示すことは簡単である。

尚、以後本文では、簡単のためほとんどの場合において、オリジナルのパッチを例示する際に、断りなくテキストを用いる。改行を省く事があるが問題なく起動する。

パッチウィンドウ

pd箱からFile>Newで新規のパッチウィンドウ(キャンバスとも)が表示される。パッチウィンドウは、PCの処理能力が許す限り、いくつでも同時に開いておくことができる。

パッチウィンドウで重要なメニューはFile、Edit、Putの三つだろう。メニューから表示されるキーボードショートカットを覚えておくと便利である。

FileメニューではSave(上書き保存)Save as(名前をつけて保存)ぐらいを押さえておく。変更を保存せずにパッチウィンドウを閉じようとすると「Close Anyway?」などというポップアップが出る。「とにかく閉じるか?」とのことだ。

EditメニューはCut(切り取り)Copy(コピー)Paste(貼り付け)Duplicate(複製)Select all(全て選択)などである。またFontはパッチ全体の文字の大きさと、パッチの大きさを一括変更する。Tidy upはパッチを簡単に行揃えする。いずれもパッチの見た目を整形するものである。

最後のEdit modeは、編集モードと通常モードの切り替えであり、頻繁に用いる重要コマンドのひとつだろう。編集モードではマウスポインタが手の形になり、部品の移動や結線、部品の中身の書き換え、ドラッグによる囲み選択、Shift+クリックによる複数部品の順次選択などが行える。通常モード(Run mode)は言わば演奏モードであり、部品の操作を行う。

Putメニューは各種部品を配置するものであり、これも頻繁に用いることになる。

またパッチウィンドウの余白部分(何も部品を置いていない所)で右クリック(あるいはダブルクリック)を行うとHelpなどのメニューが表示される。ここでHelpを選択するとオブジェクト(後述)の概要(pd\doc\5.reference\0.INTRO.txt)が表示される。どんなオブジェクトがあったかを見るのに便利である。

部品の概要

Putメニューなどから配置できる、pdの部品類について簡単にまとめる。詳細については各部品のプロパティ(部品上で右クリック>Properties)やオブジェクトヘルプ(部品上で右クリック>Help)を参照。Object、Message、Comment以外は、Propertiesからカスタマイズが可能である。またBangからCanvasまでを、GUIオブジェクトなどと呼ぶことがある。

Object
オブジェクト名を書き込むことで様々に機能する(
オブジェクト一覧)。オブジェクトによっては、オブジェクト名の後に引数(空白で区切る)を書き込むことで、オブジェクトの初期値などを決定できる。また特に、音声信号の処理に関するオブジェクトは、名前が「~」で終わる(チルダオブジェクトとも)。

Message
クリックや、インレットへの入力によって、中に書き込まれた文字や数字を出力する。

Number
数の入出力と表示を行う。ドラッグによって数を1ずつ増減、Shift+ドラッグによって0.01ずつ増減、アウトレットから出力できる。クリックにより、キーボードの数の入力も可能。

Symbol
文字列の入力と表示を行なう。

Comment
パッチウィンドウに文章を表示する。

Bang
クリックやインレットへの入力によって、メッセージ「bang」を出力する。オブジェクト「bng」でも作成可能。

Toggle
クリックやインレットへの入力によって、0または1を出力する(同様のものは、PropertiesでWidthを1としたNumberでも作成可能)。0の場合はただの四角であり、1の場合にバツが表示される。オブジェクト「tgl」でも作成可能。

Number2
数の入出力と表示を行う。Numberの機能を拡張したもの。オブジェクト「nbx」でも作成可能。

Vslider
垂直スライダ。数の入出力と表示を行う。ドラッグによって数を1ずつ増減、Shift+ドラッグによって0.01ずつ増減、アウトレットから出力する。オブジェクト「vsl」でも作成可能。

Hslider
水平スライダ。数の入出力と表示を行う。ドラッグによって数を1ずつ増減、Shift+ドラッグによって0.01ずつ増減、アウトレットから出力する。オブジェクト「hsl」でも作成可能。

Vradio
垂直ラジオボタン。整数の入出力と表示を行う。クリックによって数の切り替えが可能。オブジェクト「vradio」でも作成可能(オブジェクト「vdl」も可能だが、Propertiesがない)。

Hradio
水平ラジオボタン。整数の入出力と表示を行う。クリックによって数の切り替えが可能。オブジェクト「hradio」でも作成可能(オブジェクト「hdl」も可能だが、Propertiesがない)。

VU
音量メータ(Volume Unit)。数の入出力と対数スケールでの表示を行なう。オブジェクト「vu」でも作成可能。

Canvas
XYコントローラ。編集モードでの移動などにより、パッチウィンドウ内での縦横の位置を整数値の組で送信。囲み選択時などに表示される青の枠が本体である。オブジェクト「cnv」でも作成可能。

Graph
コントローラ類の部品のみを表示するサブパッチとして使用でき、数列を追加する事もできる(Put>Array>in last graph)が、数列を追加したGraphは後述するArrayと同等である。Arrayの「枠」とも言える。

Array
数値の配列(一次元配列)を線グラフで表示する。線のドラッグによって数値を変えられる。追加によってひとつのArrayに複数の配列も表示可能。

プログラミング(1)

パッチ

pdでは、様々な「部品」を並べて「線」でつなぐことで、パッチと呼ばれる「音を出す仕掛け」を作る。仕掛けを作ることをプログラミングと言う。pdでは、プログラミングと言ってもこの「並べてつなぐ」に尽きるのであって、難解なテキストを書き連ねるプログラム言語とは異なり、仕掛けの因果関係そのものが図的に見えており、従ってプログラミングの経験を問わないと言える。パッチの見た目はフローチャート(流れ図)によく似ているが、前述の通り「部品」の多くは直接マウスで操作することができ、操作によっていわゆる「演奏」ができる。

フローチャートに似ていると書いたが、pdの開発者の考えでは(Pd Documentation chapter 2.6.2)パッチは「見える通りに動作する」ことが理想であり、印刷物からパッチを再現することも可能、というものらしく、この意味ではフローチャートに等しいと言って過言ではない。この要件は、ユーザーにとってのパッチ作成の容易さも意味し、同時に、一見して理解できるよう常にパッチを視覚的に整理して書くべきであるという教えでもある。

GUIオブジェクトの機能拡充などから、必ずしも「見たまま」ではないこともいくつかあるが、とはいえpdの「見たまま」度は、他の「箱と線」式の音楽ソフト(Max/MSPなどいくつか存在する)と比較すればましな方だとも言える。

オブジェクトボックス、メッセージボックス、ナンバーボックス

部品の概要として先に列挙したが、pdにおいて、基本となる部品はオブジェクト(Object)、メッセージ(Message)、ナンバー(Number)の三種の「箱」である。この三種だけでも、充分に使用に足るパッチが作成できるように、pdは作られている。これらの「箱」は、その形で種類を容易に判別できる。

以下、練習を行いながら説明する。新規のパッチウィンドウを開き、まずPutメニューかキーボードショートカットでこれらのボックス一個ずつを置いてみる。

オブジェクトボックスは、置いた直後は中身が空で、オブジェクトの名前や引数(ひきすう)を書き込むことで、各種オブジェクトが作成できる。編集モードでクリックすることで、オブジェクトへの書き込みができる。ドラッグでの文字の範囲選択、Back Spaceキーが使える(Deleteキーは使えない)。

例えばキーボードから「+」と入力、パッチウィンドウの余白部分をクリックすると、箱の縁に黒い部分が現れ、「+」オブジェクトの作成が確認できる。この黒い部分は、後に結線を行う「入出力端子」である。箱の上部の端子はインレット(入力)、下部の端子はアウトレット(出力)と呼ぶ。

再度オブジェクトボックスをクリックし、例えば「+ 9」と書き込む。これは数字の入力に対して9を足すオブジェクトである。この場合の「9」を引数と呼ぶ。オブジェクト名と引数の間には必ず空白を入れる。「+9」と続けて書くと、pdは「+9」というオブジェクトの作成と見なし、「+9」オブジェクトは存在しないのでDOS窓にエラーを発するだろう。

ナンバーボックスは、数の入出力を行う。通常モードでその表面から上や下にドラッグすると、中の数字が1ずつ増減する。Shift+ドラッグを行うと0.01ずつ増減する。一回ナンバーボックスをクリックすると、キーボードから直接数を入力、Enterで確定できる。またナンバーボックスにも入出力端子が見える。

メッセージボックスにも入出力端子が見える。メッセージボックスは、通常モードでのクリックや、インレットへの入力によって、中に書き込まれた文字や数字を出力する。編集モードでクリックすることで、中身を書き込むことができる。例えば「9」と書き込む。

操作に関して言えば、ナンバーはドラッグ、メッセージはクリックで動作し、オブジェクトは通常モードでは操作できないもの、と理解できる。

結線

編集モードで、マウスポインタをアウトレットの上に持って行くと、ポインタが丸の形になる。この状態からドラッグを行うと線が延びる。ドラッグしたまま別のボックスのインレットに持って行くと、再度ポインタが丸の形になる。ここでマウスボタンを離せば、ボックスどうしが結線される。この結線は各種データや音声信号の流れを示すものである。既に結線された線の上にポインタを持って行くと、ポインタがバツの形になる。ここでクリックすると線が青色(選択状態)になり、File>Cut(または相当のキーボードショートカット)で線が消え、接続が解かれる。

例えば、メッセージ「9」、オブジェクト「+ 9」、ナンバーを上から順に並べて結線する。この時、オブジェクトへの結線は左のインレットに行う。では通常モードに戻り、メッセージ「9」をクリックする。ナンバーには「18」と表示される。ナンバーをドラッグして数を変え、再度メッセージをクリックすると、やはり「18」と表示される。確認のため、この練習パッチをテキストで示す。

#N canvas 0 0 215 220 12;
#X obj 88 93 + 9;
#X floatatom 88 147 5 0 0 0 - - -;
#X msg 88 40 9;
#X connect 0 0 1 0;
#X connect 2 0 0 0;

ところでpdでは、音声信号が流れる線を太線で、数やメッセージなどのデータが流れる線を細い線で表す。また音声信号をデータ系のオブジェクトに結線しようとした場合など、エラーになるか結線そのものが不可能な場合があるが、これはオブジェクトごとに入力できる線が決まっていることを示す。

入力のhotとcoldの区別、右から左への出力順序

二個以上の入力を持つオブジェクトにおいて、入力にhotとcoldの区別があるものがある。左側の入力はhot、右側の入力はcoldである。その意味を、以下のパッチで見てみる。

#N canvas 0 0 277 231 12; #X floatatom 167 160 5 0 0 0 - - -; #X floatatom 167 36 5 0 0 0 - - -; #X floatatom 186 69 5 0 0 0 - - -; #X obj 167 106 +; #X floatatom 54 160 5 0 0 0 - - -; #X floatatom 89 69 5 0 0 0 - - -; #X msg 54 36 bang; #X obj 54 106 float; #X connect 1 0 3 0; #X connect 2 0 3 1; #X connect 3 0 0 0; #X connect 5 0 7 1; #X connect 6 0 7 0; #X connect 7 0 4 0;

左のパッチでは、まずナンバーを適当な数にしてみるが、coldに入力されているため、「bang」をクリックしない限りは数が出力されない。

右のパッチでは、hotに入力したナンバーをドラッグすると、出力にあるナンバーは即座に反応する。coldに入力したナンバーをドラッグしても、出力に変化はないかのようだが、cold側のナンバーを適当な数にして、再度hot側のナンバーをドラッグすると、今度はhot側とcold側の数の足し算が出力される。cold側に入力した数は、線を切り離しても残存する。

この現象を試しに文章にすると「hotへの入力は即実行を伴い、coldへの入力は実行を伴わない」といったところだろうが、いずれにせよこれは感覚的に把握すべきだ。何故このような区別が必要か、coldが何の役に立つのかについて、以下のパッチを例示する。

#N canvas 0 0 463 182 12; #X msg 51 52 bang; #X obj 129 52 + 1; #X floatatom 129 97 5 0 0 0 - - -; #X msg 246 52 bang; #X obj 326 52 + 1; #X floatatom 326 97 5 0 0 0 - - -; #X obj 51 97 float; #X obj 246 97 float; #X connect 0 0 6 0; #X connect 1 0 2 0; #X connect 1 0 6 1; #X connect 3 0 7 0; #X connect 4 0 5 0; #X connect 4 0 7 0; #X connect 6 0 1 0; #X connect 7 0 4 0;

一見良く似たふたつのパッチが並んでいるが、左は「+ 1」の出力が「float」のcoldに、右は「float」のhotに、入力されている。まず左のパッチの「bang」をクリックする。クリックの度に1ずつ加算されることがわかる。つまり「bang」の度に「float」が実行されるため、このようになる。「float」のcoldに入力された数は、「float」が実行されない限り、実際には「float」には「入っていかない」。

右のパッチの「bang」は、プログラムの強制終了の手順を知っている者のみ、クリックしてよい。何故なら、「+ 1」の出力が「float」のhotに入ることで、「bang」以後「float」は間断なく実行され、パッチの操作や、場合によっては、PCの操作そのものが不可能になるからである(DOS窓にerror: stack overflowと表示)。

#N canvas 0 0 398 182 12; #X floatatom 96 127 5 0 0 0 - - -; #X floatatom 37 26 5 0 0 0 - - -; #X floatatom 37 127 5 0 0 0 - - -; #X obj 96 83 -; #X obj 37 83 -; #X obj 202 92 -; #X floatatom 202 127 5 0 0 0 - - -; #X floatatom 202 26 5 0 0 0 - - -; #X obj 202 56 trigger float float; #X connect 1 0 3 0; #X connect 1 0 3 1; #X connect 1 0 4 1; #X connect 1 0 4 0; #X connect 3 0 0 0; #X connect 4 0 2 0; #X connect 5 0 6 0; #X connect 7 0 8 0; #X connect 8 0 5 0; #X connect 8 1 5 1;

hotとcoldの区別は、ケアレスミスの原因ともなるので注意が必要である。上のパッチの左側は、一見したところ全く同じ引き算を行う。同じ数で引き算を行うのだから結果は常に0であるはずだが、上のナンバーを適当にドラッグすると、左下のナンバーは常に0だが、右下のナンバーは何やら不規則に数を示す。実は左側の「-」には、cold、hotの順で入力線を引いたのに対し、右側の「-」にはhot、coldの順で入力線を引いたのである。pdのパッチが必ずしも見た目通りではないことの一例でもある。

hotから入力線を引いた場合の、間違いの原因は恐らくhotから結線したことで先にhotに値が入力されてしまい、要するに入力に時差が生じるからではないかと思うが、この説明が妥当かはわからない。簡単に言えば「入力はcoldを優先」させるべきらしいが、実作業においてこれを毎度意識することは現実的ではない。

そしてこのような場合の最善策が、右側の「trigger float float」を介した引き算パッチである。この「trigger float float」のように、複数の出力を持つオブジェクトは、必ず右側から順に出力することになっている(と言ってもコンピュータの処理速度における話なので、時差を感じる事はない)。「入力はcoldを優先」が原則とすれば、それに合致した書き方である。

メッセージボックスの用法

#N canvas 0 0 760 411 12; #X msg 311 36 bang; #X floatatom 346 69 5 0 0 0 - - -; #X floatatom 311 133 5 0 0 0 - - -; #X msg 350 230 \; pd dsp 0; #X msg 350 273 \; pd dsp 1; #X floatatom 137 260 5 0 0 0 - - -; #X floatatom 137 337 5 0 0 0 - - -; #X obj 447 127 print; #X msg 467 84 1 \, 2 \, 3; #X msg 447 36 1 2 3; #X msg 159 84 0; #X msg 206 84 1; #X floatatom 159 132 5 0 0 0 - - -; #X msg 159 36 bang; #X floatatom 206 36 5 0 0 0 - - -; #X msg 33 222 \; ahoaho 9 \; uhouho 4; #X obj 34 132 print; #X msg 34 36 xxx; #X msg 46 65 42; #X msg 58 94 (^^); #X obj 311 100 float; #X obj 137 222 receive ahoaho; #X obj 137 300 receive uhouho; #X msg 583 200; #X msg 609 93 set; #X msg 621 123 add uh; #X msg 621 152 add2 ah; #X msg 583 34 set au; #X msg 596 63 set ou; #X text 44 8 [1]; #X text 188 8 [2]; #X text 324 8 [3]; #X text 456 8 [4]; #X text 599 8 [5]; #X text 114 192 [6]; #X text 368 192 [7]; #X connect 0 0 20 0; #X connect 1 0 20 1; #X connect 8 0 7 0; #X connect 9 0 7 0; #X connect 10 0 12 0; #X connect 11 0 12 0; #X connect 13 0 10 0; #X connect 14 0 11 0; #X connect 17 0 16 0; #X connect 18 0 16 0; #X connect 19 0 16 0; #X connect 20 0 2 0; #X connect 21 0 5 0; #X connect 22 0 6 0; #X connect 24 0 23 0; #X connect 25 0 23 0; #X connect 26 0 23 0; #X connect 27 0 23 0; #X connect 28 0 23 0;

メッセージボックスは、通常モードでのクリックや、インレットへの入力によって、中に書き込まれた文字や数字を出力する。ここではメッセージの主な用法について簡単に述べる。

パッチ[1]は、どんな内容でもメッセージたり得ることを示している。メッセージボックスをそれぞれクリックして、DOS窓で結果を確認する。しかしながら、pdで通常用いるメッセージは、概ねオブジェクト側が理解できるものに限られる。この例では「42」以外のメッセージはpdに無縁と思ってよい。

パッチ[2]のメッセージ「0」「1」は、要するに一定の数値を切り替えるスイッチと理解できる。「bang」またはメッセージ「1」の上のナンバーでも、結局同じ動作をすることを確認する。

パッチ[3]のメッセージ「bang」は、要するに「ヨーイドン」の「ドン」の意味であり、「bang」を解するオブジェクトの実行や、先に見た通りメッセージの励起に用いることが出来る。左から二番目のパッチでは、まず「float」の右側の入力(cold)のナンバーを適当に変えてみる。その後「bang」を叩くと「float」から数が出力される。「bang」はpdでは挨拶並みに日常的なメッセージであるので覚えておく。オブジェクトによってはその他のメッセージも解するが、詳しくはオブジェクトの説明において後述する。

パッチ[4]ではメッセージ「1 2 3」と「1, 2, 3」の違いをDOS窓で確認する。「1 2 3」では同時に「print」オブジェクトに入力されるのに対し、「1, 2, 3」では順次入力され順次実行となる。これらのように、複数の内容を並べたメッセージを、特にリストと呼ぶ。

パッチ[5]はメッセージそのものの書き換えである。「set」は書き換え、「add」は「;」を付けて追加と改行、「add2」は改行なしで追加。

パッチ[6]の「;ahoaho 9;uhouho 4」の「;」はsend(送る)の意味と考えられる。その横にある「receive」オブジェクトはデータの受信を行うもので、「ahoaho」「uhouho」はアドレスと思って頂きたい。アドレスは任意である。よって「;ahoaho 9;uhouho 4」というメッセージは「ahoahoに9を送る、uhouhoに4を送る」などと解釈できる。

パッチ[7]の「;pd dsp 0」「;pd dsp 1」は、pd窓のcompute audio(音声計算)チェックボックスをリモートで操作するものである。従って頻繁に用いる事になるだろう。「;pd dsp 0」はpdでの音声出力を中止し、「;pd dsp 1」はpdでの音声出力を開始するメッセージである。

$記号

#N canvas 0 0 390 221 12; #X floatatom 31 152 5 0 0 0 - - -; #X msg 31 61 \; ahoaho \$1; #X floatatom 31 29 5 0 0 0 - - -; #X msg 171 88 \; pd dsp \$1; #X obj 171 29 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1; #X obj 286 115 print; #X msg 286 70 \$2 \$1 0; #X msg 286 29 1 to 3; #X obj 31 115 receive ahoaho; #X connect 2 0 1 0; #X connect 4 0 3 0; #X connect 6 0 5 0; #X connect 7 0 6 0; #X connect 8 0 0 0;

$1、$2、$3などの$n記号は、メッセージやオブジェクトの中での変数を意味する。変数とは、イメージとしては任意の数字や文字を入れられる「箱」であり、$1、$2、$3などの変数名は「箱」の名前と言える。変数には数値変数と文字変数の二種があるが、$はそのいずれも扱う。上のパッチで、$の用法を簡単に示す。

左側のパッチは、$を用いたsend-receiveである。ちなみにメッセージ「;ahoaho $1」はオブジェクト「send ahoaho」でも全く同じ機能なのであまり用いる必要がないだろう。

中央の「;pd dsp $1」には、小さい四角で表示されている、トグル(Toggle)というものが入力されているのだが、このトグルはクリックの度に0と1を切り替える機能を持つ。つまりこのパッチはcompute audioの切り替えを、より簡潔に表記したものである。トグルをクリックしてpd箱の動きを確認する。

右側のパッチは、変数に文字も使えることと、$nの順位によって内容の置換が可能であることを示す。メッセージ「1 to 3」をクリックし、DOS窓で結果を確認する。

サブパッチ

込み入ったパッチを作成しているとパッチウィンドウが見難くなり、パッチの一部を別の場所に移してパッチウィンドウを見易くしたいと思う時がある。このような場合にサブパッチを作成する。またサブパッチをコピーすれば、同一の構造が簡単に得られる。サブパッチの作成は、括弧入れとか階層化などと呼ぶことができる。サブパッチの中にサブパッチを作る事もできる。

サブパッチの作成にはふたつの方法がある。第一は、オブジェクトボックスに「pd (任意のサブパッチ名、省略可)」と入力する方法であり、サブパッチの内容はメインのパッチと同じpdファイルに書かれる。第二は、既に存在している別のパッチを呼び出すために、オブジェクトボックスにパッチ名を入力する方法である。このいわゆる外部参照方式では、同一のpdファイルをサブパッチとして、同時に複数用いることが出来る。

いずれの場合も拡張子「.pd」は必要なく、また外部パッチを呼び出す場合には相対パス名で書く。つまり一階層上のフォルダから呼び出すには「../」を、二階層上なら「../../」をパッチ名の前に書く。「../extra/」と書くと、一階層上に戻りextraフォルダの中を見に行く。つまり同じ階層にある別のフォルダ内のパッチを参照する場合にこのように書く。下の場合ではこれら二種のサブパッチの扱いを示しているが、同じフォルダにuhouho.pdがない、あるいは「../extra」にhelp-expr.pdがない場合にエラーとなる。

#N canvas 16 6 438 219 12; #N canvas 399 10 254 192 ahoaho 0; #X obj 59 36 inlet; #X obj 59 126 outlet; #X obj 59 79 + 1; #X obj 145 36 inlet; #X obj 145 126 outlet; #X obj 145 79 - 1; #X connect 0 0 2 0; #X connect 2 0 1 0; #X connect 3 0 5 0; #X connect 5 0 4 0; #X restore 60 85 pd ahoaho; #X obj 224 66 uhouho; #X floatatom 60 39 5 0 0 0 - - -; #X floatatom 60 136 5 0 0 0 - - -; #X obj 224 118 ../extra/help-expr; #X floatatom 127 136 5 0 0 0 - - -; #X connect 0 0 3 0; #X connect 0 1 5 0; #X connect 2 0 0 0; #X connect 2 0 0 1;

メインパッチからサブパッチの内容を見るには、サブパッチのオブジェクトボックス上で右クリックすることで表示されるOpenを選択する。サブパッチ「ahoaho」には「inlet」「outlet」オブジェクトがあるが、これはサブパッチにデータの入出力を行うものである。この他に音声の入出力を行う「inlet~」「outlet~」オブジェクトもある。これらの入出力オブジェクトは複数配置でき、サブパッチ内での配置の左右の順番と、メインパッチ上での入出力の左右の順番は対応する(サブパッチ内で「outlet」を移動させてみると面白い)。

同一のpdファイルを外部参照サブパッチとして、同時に複数使用可能であることは既に述べた。また必要があれば、サブパッチに引数を書き込むことができる。この引数はサブパッチ内で「float $1」「symbol $1」「pack $1 $2」などを用いて呼び出すことが出来る。

以下がその例である。ふたつのファイルに分かれ、同じフォルダに置く必要がある。サブパッチは必ずsub.pdとして保存する。メインのファイル名は任意である。両方保存したらメインパッチをpdから開く。その後「bang」をクリックしてみる。

(メインパッチ *.pd)

#N canvas 0 0 374 195 12; #X obj 67 61 sub 1 2 3; #X floatatom 67 143 5 0 0 0 - - -; #X floatatom 100 118 5 0 0 0 - - -; #X floatatom 134 96 5 0 0 0 - - -; #X msg 67 13 bang; #X floatatom 200 143 5 0 0 0 - - -; #X floatatom 233 118 5 0 0 0 - - -; #X floatatom 267 96 5 0 0 0 - - -; #X msg 200 13 bang; #X obj 200 61 sub 4 5 6; #X connect 0 0 1 0; #X connect 0 1 2 0; #X connect 0 2 3 0; #X connect 4 0 0 0; #X connect 8 0 9 0; #X connect 9 0 5 0; #X connect 9 1 6 0; #X connect 9 2 7 0;

(サブパッチ sub.pd)

#N canvas 50 50 374 195 12; #X obj 86 50 inlet; #X obj 86 128 outlet; #X obj 163 128 outlet; #X obj 242 128 outlet; #X obj 86 96 float \$1; #X obj 163 96 float \$2; #X obj 242 96 float \$3; #X connect 0 0 4 0; #X connect 0 0 5 0; #X connect 0 0 6 0; #X connect 4 0 1 0; #X connect 5 0 2 0; #X connect 6 0 3 0;

サブパッチ内のナンバーボックスなどを、メインパッチに表示して操作可能にすることが出来る。

  • サブパッチの余白部分で右クリック>Propertiesを選択
  • graph on parentチェックボックスにチェック、メインパッチにナンバー等が表示される
  • メインパッチに戻り、サブパッチのボックス上で右クリック>Propertiesを選択
  • screen width、screen heightでサブパッチの表示の大きさを調整

    ナンバー等のメインパッチ上での表示は、サブパッチ内での配置に基づく。そのためデザインが多少不自由である。以下に例を示す。

    #N canvas 0 0 225 173 12; #N canvas 0 0 287 218 /SUBPATCH/ 0; #X obj 85 75 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 -1; #X obj 85 130 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1; #X floatatom 162 103 5 0 0 0 - - -; #X coords 0 0 1 1 120 100 1; #X restore 49 31 pd;