This commit is contained in:
Felix Roos 2022-02-11 01:10:44 +01:00
parent f8a178c282
commit f15686ba0f
4 changed files with 116 additions and 24 deletions

View file

@ -354,9 +354,10 @@ class Pattern {
return stack([this, func(this._early(time_pat))]);
}
every(n, func) {
const pats = Array(n - 1).fill(this);
pats.unshift(func(this));
return slowcat(...pats);
const pat = this;
const pats = Array(n - 1).fill(pat);
pats.unshift(func(pat));
return slowcatPrime(...pats);
}
append(other) {
return fastcat(...[this, other]);
@ -422,6 +423,15 @@ function slowcat(...pats) {
};
return new Pattern(query2)._splitQueries();
}
function slowcatPrime(...pats) {
pats = pats.map(reify);
const query2 = function(span) {
const pat_n = Math.floor(span.begin) % pats.length;
const pat = pats[pat_n];
return pat.query(span);
};
return new Pattern(query2)._splitQueries();
}
function fastcat(...pats) {
return slowcat(...pats)._fast(pats.length);
}
@ -493,6 +503,16 @@ const slow = curry((a, pat) => pat.slow(a));
const early = curry((a, pat) => pat.early(a));
const late = curry((a, pat) => pat.late(a));
const rev = (pat) => pat.rev();
const add = curry((a, pat) => pat.add(a));
const sub = curry((a, pat) => pat.sub(a));
const mul = curry((a, pat) => pat.mul(a));
const div = curry((a, pat) => pat.div(a));
const union = curry((a, pat) => pat.union(a));
const every = curry((i, f, pat) => pat.every(i, f));
const when = curry((binary, f, pat) => pat.when(binary, f));
const off = curry((t, f, pat) => pat.off(t, f));
const jux = curry((f, pat) => pat.jux(f));
const append = curry((a, pat) => pat.append(a));
export {
Fraction,
TimeSpan,
@ -515,5 +535,15 @@ export {
slow,
early,
late,
rev
rev,
add,
sub,
mul,
div,
union,
every,
when,
off,
jux,
append
};