The examples for this chapter will use Pd's abstraction mechanism, which permits the building of patches that may be reused any number of times. One or more object boxes in a Pd patch may be subpatches, which are separate patches encapsulated inside the boxes. These come in two types: one-off subpatches and abstractions. In either case the subpatch appears as an object box in the parent patch.
If you type ``pd" or ``pd my-name" into an object box, this creates a one-off subpatch. The contents of the subpatch are saved as part of the parent patch, in one file. If you make several copies of a subpatch you may change them individually. On the other hand, you can invoke an abstraction by typing into the box the name of a Pd patch saved to a file (without the ``.pd" extension). In this situation Pd will read that file into the subpatch. In this way, changes to the file propagate everywhere the abstraction is invoked.
Object boxes in the subpatch (either one-off or abstractions) may create inlets and outlets on the box in the parent patch. This is done with the following classes of objects:
,
:
create inlets for the object box containing the subpatch. The
version creates an inlet for audio signals, whereas
creates one for control streams. In either case, whatever
shows up on the inlet of the box in the parent patch comes out of the
object in the subpatch.
,
:
Corresponding objects for output from subpatches.
Pd provides an argument-passing mechanism so that you can parametrize different
invocations of an abstraction. If in an object box you type ``$1
",
it is expanded to mean ``the first creation argument in my box on the
parent patch", and similarly for ``$2
" and so on. The text in
an object box is interpreted at the time the box is created, unlike the
text in a message box. In message boxes, the same ``$1
" means ``the
first argument of the message I just received" and is interpreted whenever
a new message comes in.
An example of an abstraction, using inlets, outlets, and parametrization, is shown in figure 4.11. In part (a), a patch invokes ``plusminus" in an object box, with a creation argument equal to 5. The number 8 is fed to the object, and out comes the sum and difference of 8 and 5.
The
object is not defined by Pd, but is rather defined
by the patch residing in the file named ``plusminus.pd". This patch is shown
in part (b) of the figure. The one
and
two
objects correspond to the inlets and outlets of
the
object. The two ``$1
arguments (to the
and objects) are replaced by 5 (the creation argument of the
object).
We have already seen one abstraction in the examples: the object introduced in chapter 1, Figure 1.9(c). This shows an additional feature of abstractions, that they may display controls as part of their boxes on the parent patch; see the Pd documentation for a description of this feature.