1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
|
+ Pattern {
lock { arg n=1;
^Pfin(n.asStream, this.asStream)
}
}
+ Stream {
fastForward { arg by, tolerance=0, inevent;
var t = 0, delta = 0, event;
if(by <= 0) { ^0.0 };
inevent = inevent ?? { Event.default };
while { t.roundUp(tolerance) < by }
{
event = this.next(inevent.copy);
if(event.isNil) { ("end of stream. Time left:" + (by - t)).postln; ^t - by };
event = event.copy.put(\freq, \rest);
event.play;
delta = event.delta;
if(delta.isNil) { ("end of stream. Time left:" + (by - t)).postln; ^t - by };
t = t + delta;
};
^t - by // time left to next event
}
}
+ EventStreamPlayer {
xplay { arg fadeTime, argClock, doReset = false, quant=1.0;
if (doReset, { this.reset });
clock = argClock ? clock ? TempoClock.default;
stream = PfadeIn(originalStream, fadeTime).asStream;
clock.play(this, quant);
}
xstop { arg fadeTime;
stream = PfadeOut(stream, fadeTime).asStream;
}
}
+ PauseStream {
xplay { arg fadeTime, argClock, doReset = false, quant=1.0;
this.play(argClock, doReset, quant);
}
xstop { // stop after fade?
this.stop;
}
}
|