Skip to content

Instantly share code, notes, and snippets.

@scztt
Created August 21, 2020 14:25
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save scztt/e53046e866e75e48bff1b62311da96eb to your computer and use it in GitHub Desktop.
Save scztt/e53046e866e75e48bff1b62311da96eb to your computer and use it in GitHub Desktop.
// Only pull a value once per clock time - else, return the previous value
PtimeClutch : FilterPattern {
var <>delta;
*new {
|pattern, delta=0.0|
^super.new(pattern).delta_(delta);
}
embedInStream {
|input|
var lastTime, lastVal;
var stream = pattern.asStream;
loop {
var thisTime = thisThread.beats;
if (lastTime.isNil or: { (thisTime - lastTime) > delta }) {
lastVal = stream.next(input);
lastTime = thisTime;
};
input = lastVal.copy.yield;
}
}
}
+Pattern {
timeClutch {
|delta=0.0|
^PtimeClutch(this, delta)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment