SuperCollider CLASSES

Psync

synchronise and limit pattern duration

Description

Psync behaves somewhat like Pfindur -- it has a maxdur argument that limits the total duration of the event stream.

The difference is in what happens if the event pattern stops on its own before maxdur is reached. If the total duration of the event pattern is shorter than the given maximum duration:

Pbind's natural durationPfindur(16, Pbind(....)) behaviorPsync(Pbind(....), 4, 16) behavior
6 beatsPfindur plays only 6 beatsPsync rounds up to 8 beats (adds a two-beat rest)
18 beatsPfindur cuts off after 16 beatsPsync cuts off after 16 beats

maxdur may be omitted. If the Pbind stops by itself, the rest will be inserted according to quant, but the total duration will be unlimited.

Class Methods

*new (pattern, quant, maxdur, tolerance: 0.001)

Arguments:

pattern

a pattern that returns events.

quant

rounding factor for total duration (effectively a "bar length")

maxdur

maximum duration

tolerance

difference threshhold that a pattern must exceed max to be ended.

Inherited class methods

Instance Methods

Inherited instance methods

Undocumented instance methods

-embedInStream (event)

-maxdur

-maxdur = value

-quant

-quant = value

-tolerance

-tolerance = value

Examples

(
SynthDef(\help_sinegrain,
    { arg out=0, freq=440, sustain=0.05, pan;
        var env;
        env = EnvGen.kr(Env.perc(0.01, sustain, 0.3), doneAction:2);
        Out.ar(out, Pan2.ar(SinOsc.ar(freq, 0, env), pan))
    }).add;
)

(
// a fixed duration pattern:

f = Pbind(
    \dur, 0.5,
    \degree, Pn(4,1),
    \instrument, \help_sinegrain
);

// this pattern has indetermined length:
a = Prand([
    Pbind(
        \dur, Pseq([0.02, 0.002, 0.1, 0.1],2),
        \degree, Pseq([9, 7, 5],inf),
        \instrument, \help_sinegrain
    ),
    Pbind(
        \dur, Pseq([1, 0.35],2),
        \degree, Pseq([0, [2b,5b]],inf),
        \instrument, \help_sinegrain
    ),
    Pbind(
        \dur, Pseq([0.15, 0.25, 1.3],2),
        \degree, Pseq([2b,4,5b],inf),
        \instrument, \help_sinegrain
    )
]);
)

Pseq([f, f, a, a], inf).play; // play a sequence


// Psync allows to limit the duration of a stream relative to a beat grid

b = Psync(a, 1, 1); // create a sequence of exactly 1 beat elements
Pseq([f, f, b, b], inf).play;


b = Psync(a, 1, 2); // create a sequence of elements of either 1 or 2 beats length
Pseq([f, f, b, b], inf).play;

(
b = Psync(a, 2);    // create a sequence of elements with a minimum of 2 beats,
            // but with undetermined upper limit
Ppar([
    Pseq([f, f, b, b], inf), // sequence
    Pbind(\instrument, \help_sinegrain, \freq, 1000, \sustain, 0.01, \dur, 2) // metronome
]).play;
)