Prorate divide stream proportionally

superclass: FilterPattern

*new(proportions, pattern)

proportions: a pattern that returns either numbers (divides the pattern into pairs)

or arrays of size n which are used to split up the input into n parts.

pattern: a numerical pattern

// examples:

// divide 1 into various proportions

(

a = Prorate(Pseq([0.35, 0.5, 0.8]), 1);

x = a.asStream;

x.nextN(8)

)

// divide a pattern into various proportions

(

a = Prorate(Pseq([0.35, 0.5, 0.8]), Prand([20, 1], inf));

x = a.asStream;

x.nextN(8)

)

// divide 1 into several parts

(

a = Prorate(Pseq([[1, 2], [5, 7], [4, 8, 9]]).collect(_.normalizeSum), 1);

x = a.asStream;

x.nextN(8)

)

// sound example

(

SynthDef(\help_sinegrain,

{ arg out=0, freq=440, sustain=0.05;

var env;

env = EnvGen.kr(Env.perc(0.01, sustain, 0.2), doneAction:2);

Out.ar(out, SinOsc.ar(freq, 0, env))

}).add;

)

(

var a, x;

a = Prorate(

Prand([2/3, 1/3, [0.3, 0.3, 0.4], [0.6, 0.4]], inf),

Pseq([1, 2, 1, 3, 12], inf)

);

3.do {

{

var x = a.asStream;

var freq = rrand(72, 84).midicps;

loop {

Synth(\help_sinegrain, [\freq, freq]);

(0.25 * x.next).wait;

}

}.fork;

};

)