Hello,
I would like to suggest adding a this.changed(\stopped); message to
EventStreamPlayer, so it can notify any dependents when it stops.
This would be congruent with a scheme for notifying when a Node
ends, which I can also post here, if it is of interest. The scheme
uses a new class: ServerWatche
r and the known NodeWatcher class, plus a few methods for Node,
"onStart", "onEnd".
Below are the modified code for EventStreamPlayer:next, plus 2 examples.
Seasons greetings,
Iannis Z.
+ EventStreamPlayer {
next { arg inTime;
var nextTime;
var outEvent = stream.next(event);
if (outEvent.isNil) {
streamHasEnded = stream.notNil;
stream = nextBeat = nil;
// IZ: notify dependant objects that stream has ended.
this.changed(\stopped);
^nil
}{
if (muteCount > 0) { outEvent.put (\freq, \rest) };
outEvent.play;
if ((nextTime = outEvent.delta).isNil) { stream = nil };
nextBeat = inTime + nextTime; // inval is current logical beat
^nextTime
};
}
}
/*
Examples:
(
a = Pbind(\degree, Pseq([1,2,3, Pwhite(10, 20, 5)],2), \dur, 0.2).play;
a.addDependant({ | who, how | format("% %", who, how).postln });
)
(
var stream;
stream = Ppar([
Pbind(\degree, Pseq([4,5,6],4), \dur, 0.5),
Pbind(\degree, Pseq([1,2,3],2))
], inf).play;
stream.addDependant({ | who, how | format("% %", who, how).postln });
{ stream.stop }.defer(5);
)
*/
_______________________________________________
Sc-devel mailing list
Sc-devel@xxxxxxxxxxxxxxx
http://www.create.ucsb.edu/mailman/listinfo/sc-devel