Pure Data

Wireless Connections

Soon after some introductory patching, a Pd user will soon discover the slight inconvenience of connection lines running over objects to reach other objects. Luckily, there's a solution.

Using the send and receive objects data can be sent from one part of the patch to another without connecting lines. These objects can also send data to other windows. The send and receive objects need an argument to identify each other. This argument is usually in the form of a word.

sendreceive1_1

In the above example, [metro 1500] generates bangs at the interval of 1.5 second (1500ms) and is sending the data to the [send beat] object. This in turn sends the data to the [receive beat] object.

A single send object can be received by multiple receive objects.

sendreceive1

The bangs in the above example are picked up by each [receive beat] object because they all have the same argument - "beat". There is no limit to the number of sends and receives with same argument. It is possible to have many sends. Just add to the example above more [metro] objects:

sendreceive2_1

What kind of data can be sent?

[send] and [receive] are for control data - messages, symbols, lists. For audio signals a 'tilde' version of these objects are needed. [send~] and [receive~] can be used to receive a single audio signal at many places.

This example shows audio sends used to create a multitap delay:
 

send_receive_delays

Throw and Catch

In the above example you may notice that outputs from delay lines are not sent with [send~] back to [r~ out]. Audio signals can only have one [send~] but many [receive~]. While there are technical reasons for this difference, a handy pair of audio objects that can help to achieve many-to-one sends are [throw~] and [catch~]. Many [throw~]s can send audio signals to one [catch~].

 send_receive_delays_throw_catch

Using [catch~] it is possible to further control and process audio (i.e.: volume control, VU metering, limiting, reverbs, etc...).

Coincidentally, all objects we described above ([send], [receive], [send~], [receive~], [throw~], [catch~], as well as [delwrite~] and [delread~]) all work across different patches, subpatches and abstractions. 

In conclusion, the objects described above are powerful tools  to not only send and copy data and audio around a single patch without messy connections, but to create connections between individual patches, subpatches and abstractions.

A word of warning though: the arguments passed to these objects are always global - they are accessible from all patches and abstractions opened in a single Pd session. This simply means that a situation can arise with unwanted 'crosstalk' of data or multiplies defined. Care has to be taken on names of arguments, while at the same time a technique exists to localize arguments using dollarsigns.