Designing Sound in SuperCollider/Equivalents for Pure Data Objects

The following list is based on the Pure Data (PD) Object Reference Glossary by Christopher Ariza, which is available at the following URL: http://www.flexatone.net/docs/pdg

The coefficients of the SuperCollider examples are adapted to the behavior of the pure data objects.


[metro] edit

Sends a series of bangs at a constant rate in miliseconds.

// example: [metro 2012]
// 2012 ms = 2.012 s 
// BPM: 60 / 2.012 = 29.821073558648
// BPS: BPM / 60 = 0.49701789264413 -> ~ 0.497 Hz

Impulse.kr((2012/1000).reciprocal); // equals to Impulse.kr(60/(2012/1000)/60);


[bp~] edit

Band pass filter. Arguments initialize center frequency and Q.

// [bp~] and BPF.ar differ in their behaviour. 
// This example is just an approximation to [bp~].

BPF.ar(signal, centerFrequency, Q.reciprocal)


[cos~] edit

The cos~ object outputs the cosine of two pi times its signal input. So -1, 0, 1 and 2 give 1 out, 0.5 gives -1, and so on.

(signal * 2pi).cos

alternatively, use the more common phase modulation and a lookup table:

SinOsc.ar(phase: 0.5pi + (2pi * signal))

[delwrite~] edit

Delay a signal. Provide a signal as input to add to a delay line. One or more [delread~] or [vd~] objects can read from the delay line created with the [delwrite~] object.

1st argument: name of delay line 2nd argument: length of delay line in msec (= max. delay time)

// at first: a buffer for the UGens to use
buffer = Buffer.alloc(s, s.sampleRate * seconds, 1); // or LocalBuf(s.sampleRate * seconds, 1) ... whatever suits best

DelTapWr.ar(buffer, signal)

[hip~] edit

One-pole high pass filter.

(signal - OnePole.ar(signal, exp(-2pi * (freq * SampleDur.ir))))


[lop~] edit

One-pole low pass filter.

OnePole.ar(signal, exp(-2pi * (freq * SampleDur.ir)))


[max~] edit

Return the larger of two signals.

signal1.max(signal2)


[min~] edit

Return the smaller of two signals.

signal1.min(signal2)


[noise~] edit

Uniformly distributed white noise; the output is between -1 and 1.

WhiteNoise.ar


[phasor~] edit

Sawtooth oscillator. Ramps from 0 to 1; can be considered a Sawtooth waveform between 0 and 1.

LFSaw.ar(0.5, 1, 0.5, 0.5)


[pink~] edit

Pink noise generator.

PinkNoise.ar


[pow~] edit

Exponentiate a signal.

signal.pow(exponent)


[vd~] edit

Delay a signal. One or more independent [vd~] objects can read a delay line from one named [delwrite~] object. The delay line must be named as a construction argument. A signal input will set the delay time in milliseconds.

// works in conjunction with DelTapWr and an allocated buffer
DelTapRd.ar(buffer, outputOfDelTapWr, delTime)


[vline~] edit

The vline~ object, like line~, generates linear ramps whose levels and timing are determined by messages you send it. The messages consist of a target value, a time interval (zero if not supplied), and an initial delay (also zero if not supplied.) Ramps may start and stop between audio samples, in which case the output is interpolated accordingly.

// Equivalent in SuperCollider for the following message sent to [vline~]: [1 1000 500, 0 1000 2500]
EnvGen.ar(Env.new([0, 0, 1, 1, 0], [0.5, 1, 1, 1]))

// the pure data message means: 
// go to 1 in 1000ms but wait 500ms from the starting point, 
// then go to 0 in 1000ms but wait 2500 ms from the starting point:
Env.new([0, 0, 1, 1, 0], [0.5, 1, 1, 1]).plot


[wrap~] edit

Remainder modulo 1. The [wrap~] object gives the difference between the input and the largest integer not exceeding it (for positive numbers this is the fractional part).

Wrap.ar(signal)

or use the operator "wrap"

signal.wrap(0, 1)