class:: Pfin
summary:: limit number of events embedded in a stream
related:: Classes/Pfinval, Classes/Pfindur, Classes/Pconst
categories:: Streams-Patterns-Events>Patterns>Repetition

description::

Limits the number of output values from the given pattern or stream. If the stream is able to output more values, Pfin will terminate it early.

The number may be given as a constant, or calculated on the fly from a function or stream. See the "sequence of pitches" example below.

ClassMethods::

method::new
embeds strong::count:: elements of the strong::pattern:: into the stream.

Examples::

code::
(
var a, b;
a = Pfin(5, Pseq(#[1, 2, 3],inf));
b = a.asStream;
9.do({ b.next.postln; });
)


//Pfin used as a sequence of pitches

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

(
var c, b;
c = Pn(Pfin({ rrand(3, 5) }, Pseq([1, 2, 3, 4, 5, 6], inf) * 4 + 65), inf);
b = c.asStream;
Routine({
	loop({
		Synth(\help_sinegrain, [\freq, b.next.midicps]);
		0.12.wait;
	})
}).play;
)

// or, more concisely:

p = Pbind(
	\instrument, \help_sinegrain,
	\midinote, Pn(Pfin({ rrand(3, 5) }, Pseq([1, 2, 3, 4, 5, 6], inf) * 4 + 65), inf),
	\dur, 0.12
).play;

p.stop;
::
