The tempo-relative timing capabilities in Max can be used to synchronize MSP processing in time with a musical beat. In this example, timings of delays are specified in tempo-relative time units so that they remain rhythmically correct for any tempo.
A stereo spatialization effect can be achieved using x,y coordinates to determine intensity and delay for the sound at each speaker at each moment. The hypothetical listener is placed at a point equidistant from the two speakers. The speakers are each assumed to be at some angle from the listener between 0 and pi radians, with 0 radians being straight to the right, pi/2 radians being directly in front of the listener, and pi radians being to the left.
This abstraction encapsulates delay, gain control, and stereo panning in a single object that can be used in some other "parent" patch. It assumes that its first inlet will be connected to a tapin~ object in the parent patch. That tapin~ object will send a tapconnect message when MSP audio is turned on, thus linking the tapout~ object in this abstraction to the memory buffer of the tapin~ object in the parent patch.
Audio delay is achieved by creating a buffer in which the most recent past sound can be stored. Usually this is called a "ring buffer" or "circular buffer", because when the buffer is filled (with, let's say, the past one second of sound), it loops around and begins refilling itself at the beginning, thus overwriting the sound that was stored more than one second ago.
This patch requires the tapoutxfade~ abstraction in the example "Abstraction for crossfading delay times of a remote tapin~ object". When audio is turned on, the tapin~ object sends out the tapconnect message to the three subpatches, thus associating their internal tapout~ objects with the same tapin~.
This example shows my preferred method for changing between different fixed delay times. It's an abstraction that I regularly use when I want a simple delay, and want the ability to change the delay time with no clicks or pitch changes. It's designed as an abstraction so that it can be used as an object (a subpatch) within any other patch.